Erro Banco de Dados

Discussão em 'Progress 4GL' iniciado por tbranco, Fevereiro 19, 2014.

  1. tbranco

    tbranco Membro Participativo

    Pessoal,

    algumas tabelas especificas que crio geram o seguinte erro, quando executo um find na mesma dentro de upcs:


    Find first/last failed for table xxxxxx.

    Se eu fizer o mesmo comando no editor, o erro não acontece. Esse erro se dá quando um registro não é encontrado, porém eu faço o tratamento para criar o registro caso o mesmo não seja encontrado ou atualizar o existente.

    Alguém já passou por isso?

    Arquivos Anexados:

  2. eduardo.leite

    eduardo.leite Equipe de Suporte Moderador Equipe de Suporte

    Caro colega,

    Poste um dos seus codigos por completo ou me envia por e-mail leite1969@yahoo.com.br para ver onde esta o problema.
  3. Rogerio

    Rogerio Moderator Moderador Equipe de Suporte

    Isso acontece porque não foi encontrado um registro na tabela com a condição informada.
    Tente no final da sua sintaxe colocar o comando NO-ERROR.
    e apos o seu FIND utilize o comando
    IF AVAIL <tabela> THEN
    DO:
    END.
    ELSE
    DO:
    END.



    Acredito que seja esse o problema.
  4. tbranco

    tbranco Membro Participativo

    Rogerio eu usei o no-error também. Consegui descobrir o problema, quer dizer, descobri a solução mas não entendi o problema. Alterei o evento onde fazia minha lógica. Antes fazia no "End-Update" e passei a fazer no "AFTER-END-UPDATE" e ae funcionou. Segue a lógica que funcionou:

    IF p-ind-event = "AFTER-END-UPDATE" AND
    p-ind-object = "VIEWER" AND
    c-objeto BEGINS "v34in172.w" THEN DO:

    FIND FIRST ITEM WHERE
    ROWID(ITEM) = p-row-table NO-LOCK NO-ERROR.
    IF AVAIL ITEM THEN DO:


    FIND FIRST item-eletronico USE-INDEX idx-elet WHERE
    item-eletronico.it-codigo = ITEM.it-codigo EXCLUSIVE-LOCK NO-ERROR.


    IF NOT AVAIL item-eletronico THEN DO:
    CREATE item-eletronico.
    ASSIGN item-eletronico.it-codigo = ITEM.it-codigo
    item-eletronico.eletronico = (IF h-eletronico:SCREEN-VALUE = "yes" THEN YES ELSE NO).
    END.
    ELSE
    ASSIGN item-eletronico.eletronico = (IF h-eletronico:SCREEN-VALUE = "yes" THEN YES ELSE NO).

    RELEASE item-eletronico.

    END.


    END.

Compartilhe esta Página