Consultas entre datas utilizado dbexpress
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
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
Ghsol
Curtidas 0
Respostas
Eltoncarbo
19/06/2008
experimente colocar um sql.close antes do sql.clear e veja o que dá.
GOSTEI 0
Paullsoftware
19/06/2008
experimente....
você também pode substituir o [b:22a07c8229]Sql.add[/b:22a07c8229] pelo [b:22a07c8229]Sql.Text[/b:22a07c8229] espero ter ajudado! :wink:
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:
GOSTEI 0
Paullsoftware
19/06/2008
experimente....
você também pode substituir o [b:b363ede56e]Sql.add[/b:b363ede56e] pelo [b:b363ede56e]Sql.Text[/b:b363ede56e] espero ter ajudado! :wink:
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:
GOSTEI 0
Ghsol
19/06/2008
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
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
GOSTEI 0
Martins
19/06/2008
Caro colega tente dessa maneira.
Caso apresente o mesmo erro, coloque a estrutura de sua tabela para q possamos analisar.
Boa sorte.
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.
GOSTEI 0
Emerson Nascimento
19/06/2008
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.
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.
GOSTEI 0