Código
Bom, essa dica se destina a quem estiver tendo problemas na hora de fazer consultas SQL entre datas.
Quem nunca recebeu a mensagem "EDataBase Error: Unassigned Code" quando fez essa pesquisa? O que acontece é que mesmo que utilizemos funções de conversão de data como StrToDate, StrToDateTime e similares, ainda assim não estaremos no mesmo formato de data utilizado nos SGBDs (eu uso o Interbase 7.5).
Acontece que mesmo para os campos de data simples "Date", quando vamos nos relacionar com esses dados devemos estar no tipo primário do BD, que é SqlTimeStamp. Assim sendo, devemos incluir na cláusula "uses" da nossa unit que contém a consulta a unit "SqlTimSt", que nos proporcionará o uso do tipo de dados referido acima.
Devemos então realizar duas conversões:
1 - Converter o tipo de dados DateTime nativo do Delphi em SqlTimeStamp
2 - Passar esse dado convertido como parâmetro da busca.
Eu utilizei dois DateTimePickers do Delphi, pra quem não conhece é "aquele calendariozinho" utilizado para que o usuário selecione a data como se estivesse acertando a data no calendário do Windows, pois ele já nos fornece os dados no formato DateTime nativo do Delphi e nos poupa linhas de código adicionais para ter informação convertida nesse formato, por[em quem quiser fazer isso a partir de um Edit por exemplo, que fique à vontade.
Bom, segue o código que eu usei e funcionou direitinho:
procedure TForm_Planilha.SpeedButton5Click(Sender: TObject);
var
D1,D2 : TDateTime;
begin
D1 := DateTimePicker_Inicial.DateTime;
D2 := DateTimePicker_Final.DateTime;
DM.Query_Geral.Close;
DM.Query_Geral.CommandText := 'Select * from GERAL Where DATA_FATURA >= :D1 and DATA_FATURA <= :D2';
DM.Query_Geral.ParamByName('D1').AsSQLTimeStamp := DateTimeToSQLTimeStamp (D1);
DM.Query_Geral.ParamByName('D2').AsSQLTimeStamp := DateTimeToSQLTimeStamp (D2);
DM.Query_Geral.Open;
end;
Assim não dá pau na consulta e nem gera mensagem de erro para o BD.
Abração a todos.
Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009