Consultas entre datas utilizado dbexpress

19/06/2008

2

Caros Parceiros,

Tenho um sistema em delphi 7 com interbase e utilizo componente dbxpress. Estou tendo problemas ao realizar consultas entre datas. Qual o componente devo utilizar. Tentei SIMPLEDATASET, SQLDATASET e SQLQUERY mas ao executar o comando OPEN aparece a seguinte mensagem de erro:

unassigned code.

Segue abaixo o código:

with SQLQuery_aniversariantes do
begin
sql.Clear;
sql.Add(´select * from clientes where dtnasc BETWEEN :data1 and :data2´);
ParamByName(´data1´).AsDateTime := de_inicial.Date;
parambyname(´data2´).AsDateTime := de_final.Date;
open;
end;


Sem mais agradeço antecipadamente,

Gilson Heleno


Responder

Posts

19/06/2008

Eltoncarbo

experimente colocar um sql.close antes do sql.clear e veja o que dá.


Responder

19/06/2008

Paullsoftware

experimente....
with SQLQuery_aniversariantes do 
begin 
close;
sql.Clear; 
sql.Add(´select * from clientes where dtnasc BETWEEN :data1 and :data2´); 
ParamByName(´data1´).AsDateTime := de_inicial.Date; 
parambyname(´data2´).AsDateTime := de_final.Date; 
open; 
end; 


você também pode substituir o [b:22a07c8229]Sql.add[/b:22a07c8229] pelo [b:22a07c8229]Sql.Text[/b:22a07c8229] espero ter ajudado! :wink:


Responder

19/06/2008

Paullsoftware

experimente....
with SQLQuery_aniversariantes do 
begin 
close;
sql.Clear; 
sql.Add(´select * from clientes where dtnasc BETWEEN :data1 and :data2´); 
ParamByName(´data1´).AsDateTime := de_inicial.Date; 
parambyname(´data2´).AsDateTime := de_final.Date; 
open; 
end; 


você também pode substituir o [b:b363ede56e]Sql.add[/b:b363ede56e] pelo [b:b363ede56e]Sql.Text[/b:b363ede56e] espero ter ajudado! :wink:


Responder

25/06/2008

Ghsol

Caro Paulo,

Mais uma vez obrigado pela atenção! O problema permanece, inclusive já tinha tentado dessa forma que vc mencionou. Tentei também usando os parametros como string conforme abaixo mas dá erro de conversão de string.

ParamByName(´data1´.asstring:= de_inicial.text
parambyname(´data2´).AsString := de_final.text;

O campo na base interbase que fica armazenada as é do tipo Date. Devido a esse problema seria o caso de usando o tipo VARCHAR para armazenar as datas para evitar esse problema?

Sem mais fico no aguardo de mais uma dica.

Obrigado

Gilson Heleno


Responder

25/06/2008

Martins

Caro colega tente dessa maneira.

with SQLQuery_aniversariantes do 
begin 
close; 
sql.Clear; 
sql.Add(´select * from clientes where dtnasc BETWEEN :data1 and :data2´); 
ParamByName(´data1´).AsDate := de_inicial.Date; 
parambyname(´data2´).AsDate := de_final.Date; 
open; 
end; 


Caso apresente o mesmo erro, coloque a estrutura de sua tabela para q possamos analisar.

Boa sorte.


Responder
se nenhuma das alternativas acima funcionar, tente usar AsSQLTimeStamp em conjunto com a função DateTimeToSQLTimeStamp().

assim:
ParamByName(´data1´).AsSQLTimeStamp := DateTimeToSQLTimeStamp( de_inicial.Date );
parambyname(´data2´).AsSQLTimeStamp := DateTimeToSQLTimeStamp( de_final.Date );

para usar a função DateTimeToSQLTimeStamp() é necessário adicionar a unit SQLTimSt à cláusula uses.


Responder