Access SQL
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!
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
Curtidas 0
Respostas
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.
T+
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
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.
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
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!
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
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;
Por exemplo:
vrTXT = ´0202´;
SQL.Add(´ WHERE PLANO IN(:TXT)´);
ParamByName(´TXT´).AsString := vrTXT;
GOSTEI 0