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
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.
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).
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
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.