FOR EACH com campo DATETIME

Discussão em 'Comandos Básicos' iniciado por flavio.bardella, Junho 29, 2011.

  1. flavio.bardella

    flavio.bardella Sem Pontuação

    Bom dia Colegas,

    Sou o Flávio Bardella, desenvolvedor progress à mais de 15 anos. Hoje utilizo o progress 102B com dataserver Oracle e tenho o problema demostrado no código à seguir:

    define var wcampo_datetime.
    update wcampo_datetime.
    for each tabela where
    tabela.campo_datetime >= wcampo_datetime:
    display tabela.campo_datetime.
    end.


    Problema: A query acima retorna todos os registros da tabela, não obedecendo o filtro informado.

    Alguém já passou ou sabe como resolver tal problema?

    Abraceço antecipadamente a sua atenção e colaboração.

    Abraços,
    Bardella
  2. eduardo.leite

    eduardo.leite Equipe de Suporte Moderador Equipe de Suporte

    Flavio,

    Fiz o código abaixo para testar e funciona sem problema, vc usa tabela do EMS ou ESpecifica, pode enviar o *.DF e o *.D da tabela e a rotina para fazer um teste aqui?

    Código:
    
    def temp-table tabela
        field campo_datetime   as datetime
        index idx is primary unique campo_datetime.
    
    def var iCont              as integer.
             
    define var wcampo_datetime as datetime init now.
    
    do iCont = 1 to 365:
    
        create tabela.  
        assign tabela.campo_datetime = today - iCont.
    
    end.
    
    update wcampo_datetime.
    
    for each tabela 
       where tabela.campo_datetime >= wcampo_datetime:
    
        display tabela.campo_datetime.
    
    end.
    
    
  3. flavio.bardella

    flavio.bardella Sem Pontuação

    Boa tarde Eduardo,
    Muito obrigado pela sua atenção.
    Realmente a rotina conforme você criou funciona normalmente. O problema é que o mesmo não acontece quando o for each é para uma tabela do banco de dados Oracle (via dataserver).
  4. kirchner

    kirchner Membro Participativo Moderador

    Flavio,

    Pede pro DBA tirar um trace no Oracle e ver o que está chegando lá. As vezes ajuda a identificar o problema.
    Outra boa pedida é o manual do DataServer for Oracle. Tem várias picuínhas de DataServer que estão descritas no manual. Nunca usei DATETIME com Oracle. Nem sabia que o Oracle tinha esse tipo de dado :)
  5. naozuka

    naozuka Sem Pontuação

    Faz muito tempo desse post mas vou responder caso alguém esteja precisando.

    Eu tive o mesmo problema aqui.
    Ao realizar um:

    for each [tabela] where liberado = 'N':
    disp [tabela].
    end.

    Não retornava nada.
    Mas se eu fizesse sem o where, me mostrava o campo liberado com o valor 'N'.

    Não sei o motivo, mas ao acessar o Oracle, existiam dois campos: LIBERADO e U##LIBERADO.
    Acredito que seja algum campo do tipo indice que só o Progress cria no Oracle.
    Criei uma Trigger After Insert e Update para replicar o valor do campo LIBERADO no campo U##LIBERADO e foi resolvido.

Compartilhe esta Página