PDA

View Full Version : Problema com CONSTRAIN



Tassi
19-May-2023, 11:01 AM
Saudações.

Tenho com problema com o seguinte CONSTRAIN:

Quero selecionar registro que não tenham a data preenchida, ou que ela seja maior que determinada data

Constrain TABELA as ((TABELA.CampoDeData eq "") or (TABELA.CampoDeData > dDataParametroSelecao))

onde CampoDeData é do tipo DATE e o dDataParametroSelecao tambem, iniciado via PROPERTY do DD.

O problema é que assim fica dando "Erro de Conversão de Tipo", ou traz os registros errados, mas se fizer assim funciona:

Constrain TABELA as ((TABELA.CampoDeData eq "") or (TABELA.CampoDeData > "01/01/2020"))

Quando a data está amarrada no código funciona perfeitamente.

Alguém tem alguma ideia do que pode estar acontecendo?

Obrigado.

Samuel Pizarro
19-May-2023, 11:32 AM
Ola Tassi

Imagino que dDataParametroSelecao seja uma variavel local que vc declarou dentro do metodo OnConstrain ?

Constrain (dataaccess.com) (https://docs.dataaccess.com/dataflexhelp/mergedProjects/LanguageReference/Constrain_Command.htm)


Important: When using Constrain ... As, do not use any local variables in the constraining expression. Since record scanning and expression evaluation occurs outside of the procedure in which the constraint is set those local variables will not exist when the expression is evaluated.


Pois bem, como diz a documentacao, isso eh invalido para constrain AS. pois o metodo que ira avaliar a expressao nao tem acesso ao valor da sua variavel local.. , pois a expressoa eh avaliade em outro lugar no codigo, para cada registro da sua tabela.. (isso mesmo pra cada registro)

Crie uma propriedade dentro do objeto DDO em questao para guardar o valor da sua data de filtro.. e utiilize a propriedade na expressao.



Constrain ... or (tabela.campo > (pdFiltroData(oSeuObjetoDDO)) )

Tassi
19-May-2023, 12:12 PM
OK. Deu certo. Já tinha a PROPERTY mas estava dando um GET e não usado diretamente como (Propriedade(Objeto)).
Obrigado.