Criar consulta utilizando Data inicial e final

Delphi

05/02/2012

Pessoal estou precisando fazer uma consulta entre dois intervalos, por data.

ex.: quando gravo um registro na tabela gravo também a data que foi feito esse cadastro.
gostaria de fazer uma consulta utilizando uma data inicial e uma data final

estou utilizando o Delphi 7 e banco de dados SQL Server 2008.
tentei fazer assim mas está dando erro:

procedure TForm1.Button1Click(Sender: TObject);
var
dtini, dtfin: TDate;
begin
dtini:=DateTimePicker1.date;
dtfin:=DateTimePicker2.date;
With ADOQuery1 do
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(SELECT * FROM clientes WHERE cli_data >= +(dtini) and cli_data <= +(dtfin));
ADOQuery1.Open;
end;

end.

ele me retorna o seguinte erro:

missing operator or semicolon
incompatible types string and tdate

desde já agradeço a todos
Alessandro

Alessandro

Curtidas 0

Respostas

Alan Souza

Alan Souza

05/02/2012

ADOQuery1.SQL.Add(SELECT * FROM clientes WHERE cli_data >= :dtini and cli_data <= :dtfin); 
ADOQuery1.Prepare;
ADOQuery1.Parameters.ParamByName(dtini).AsDateTime := dtini;
ADOQuery1.Parameters.ParamByName(dtfin).AsDateTime := dtfin;
ADOQuery1.Open;


é possível utilizar o between para comparar intervalos, ficaria WHERE cli_data between :dtini and :dtfin
GOSTEI 0
Nilson Alvernaz

Nilson Alvernaz

05/02/2012

...
SQL1 := SQL1 + and Reincidente = 1 +#13;
SQL1 := SQL1 + and DtReincidente >= :DtInicial+#13;
SQL1 := SQL1 + and DtReincidente <= :DtFinal +#13;

esse é o final da pedaço da query.


cdsPadrao.Params[0].AsDateTime := StrToDate(meDtInicial.Text);
cdsPadrao.Params[1].AsDateTime := StrToDate(meDtFinal.Text);
cdsPadrao.Close;
cdsPadrao.CommandText := (SQL1);
cdsPadrao.Open;

uso esses paramentros para puchar relatórios... e trás as datas certinho
GOSTEI 0
Marcus Cordeiro

Marcus Cordeiro

05/02/2012


procedure TForm1.Button1Click(Sender: TObject);
var
dtini, dtfin: TDate;
begin
dtini:=DateTimePicker1.date;
dtfin:=DateTimePicker2.date;
With ADOQuery1 do
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(SELECT * FROM clientes WHERE cli_data >= +(dtini) and cli_data <= +(dtfin));
ADOQuery1.Open;
end; 


Você usa o comando Between para filtra essa data, assim:
var
dtini, dtfin: TDate;

begin
dtini:=DateTimePicker1.date;
dtfin:=DateTimePicker2.date;
//aqui eu sempre coloco clientedataset.close
With ADOQuery1 do
begin
sql.clear;
SQL.Add(SELECT * FROM clientes WHERE cli_data between :datini and :datfim);
SQL.Add(order by cli_data);
Parameters.Parambyname(datini).value := dtini;
Parameters.Parambyname(datfim).value := dtfim;
end;
//aqui eu sempre coloco clientedataset.Open;

end;


GOSTEI 0
Marco Salles

Marco Salles

05/02/2012

Ja foi resolvido em

http://www.activedelphi.com.br/forum/viewtopic.php?t=71035&highlight=data&sid=0862be95351364b5f60da71153001693

Basicamente foi a linha de raciocineo colocado pelos colaboradores do DevMadia tb
GOSTEI 0
POSTAR