Access SQL

Delphi

14/10/2005

Galera, acesso em um arquivo mdb um atributo data/hora DAT_LANC.
Quando utilizo uma query no DELPHI, ao fazer um filtro, a consulta retorna vazia, mas tenho certeza que a data existe.

with QRYInterface do
begin

DatabaseName := ´SIPCAP´;

close;
SQL.Clear;
SQL.Add(´SELECT *´);
SQL.Add(´ FROM TABSIPCAP´);
SQL.Add(´ WHERE PLANO IN (´ + vrTXT + ´)´);
SQL.Add(´ AND DT_LANC >= :DTI´);
SQL.Add(´ AND DT_LANC <= :DTF´);
ParamByName(´DTI´).AsDateTime := StrToDate(DTInicio);
ParamByName(´DTF´).AsDateTime := StrToDate(DTFim);
Open;

end;

Tem alguma manha de passar data para o access entender parâmetros de data?
Obs.: Com o BETWEEN não funcionou de jeito nenhum!!!!

Valeu!


Peununes

Peununes

Curtidas 0

Respostas

Vinicius2k

Vinicius2k

14/10/2005

Colega,

O Access é ´particular´ com datas... Quando trabalhava com ela preferia utilizar na tabela uma string de 8 posições com a data invertida, ex: ´20051014´

Tente, passar a data como string entre ´tralhas´, normalmente, resolve.
...
ParamByName(´DTI´).AsString := ´#´ + DTInicio + ´´; 
ParamByName(´DTF´).AsString := ´´ + DTFim + ´´; 
Open;


T+


GOSTEI 0
Edsonssantos

Edsonssantos

14/10/2005

Use da seguinte forma:

SQL.Add( ´ AND DT_LANC BETWEEN :DTI AND :DTF´ );
ParamByName(´DTI´).AsDateTime := StrToDate(DTInicio);
ParamByName(´DTF´).AsDateTime := StrToDate(DTFim);

Os parametros DTI e DTF devem estar com o atributo ftdate.

Dessa forma sempre resolve comigo.

Espero ter ajudado.


GOSTEI 0
Peununes

Peununes

14/10/2005

A segunda dica funcionou!
O problema agora é o ´IN´.

Passando os parâmetros assim:

0202,0603,0703,...

Não dá erro, mas não retorna corretamente pois o valor 0202 existe na tabela. E assim

´0202´,´0603´,´0703´,...

está gerando o seguinte erro:

Project SIPCAP.exe raised exception class EDBEngineError with message ´General SQL error.
[Microsoft][Driver ODBC para Microsoft Access]Índice de descritor inválido
[Microsoft][Driver ODBC para Microsoft Access]Valor de precisão inválido´. Process stopped. Use Step or Run to continue.

Alguém sabe como resolver isso:

Grato a todos que responderam!


GOSTEI 0
Peununes

Peununes

14/10/2005

Hum, detalhe, se passar apenas um parãmetro no IN funciona.
Por exemplo:

vrTXT = ´0202´;

SQL.Add(´ WHERE PLANO IN(:TXT)´);
ParamByName(´TXT´).AsString := vrTXT;


GOSTEI 0
POSTAR