Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Pesquisa com intervalo de datas


anabon

Question

Boa tarde pessoal é o seguinte .. tenho um form com 2 DateTimePicker, um DataSource e um ADOQuery oque quero fazer é uma pesquisa com intervalo entre duas datas, não da nenhum erro mas a pesquisa me retorna vazia, só com o nome dos campos.

Uso o banco acess 2003 na SQL da ADOQUERY estou usando o seguinte codi:

SELECT * FROM a_receber 
WHERE data_vencimento between :dtini and :dtfin
em um SpeedButton no evento onclick coloquei assim:
procedure Tfrmcontas_areceber.SpeedButton5Click(Sender: TObject);
begin
begin
  With Query_Receber do
    begin
      Close;
      SQL.Clear;
      SQL.Add('SELECT * FROM a_receber WHERE data_vencimento between :dtini and :dtfin');
      Parameters.ParamByName('dtini').Value := DateTimePicker1.date;
      Parameters.ParamByName('dtini').Value := DateTimePicker2.date;
      Open;
    end;
  end;


end;

Liguei o DataSource no ADOQuery e o DBGrid no DataSource

Desde já agradeço quem poder me ajudar....

Forte Abraço

Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 0

Estou usando assim e funciona

var
  D1,D2 : TDateTime;
begin

  D1 := PlannerDatePicker1.Date;
  D2 := PlannerDatePicker2.Date;

    with AdoQuery1 do
      begin
        Close;
        SQL.Text := 'SELECT * FROM Tabela WHERE Data BETWEEN :D1 AND :D2 ';
        Parameters.ParamByName('D1').Value := D1;
        Parameters.ParamByName('D2').Value := D2;
        ExecSQL;
        Open;
      end;

Link to comment
Share on other sites

  • 0
Estou usando assim e funciona

var
  D1,D2 : TDateTime;
begin

  D1 := PlannerDatePicker1.Date;
  D2 := PlannerDatePicker2.Date;

    with AdoQuery1 do
      begin
        Close;
        SQL.Text := 'SELECT * FROM Tabela WHERE Data BETWEEN :D1 AND :D2 ';
        Parameters.ParamByName('D1').Value := D1;
        Parameters.ParamByName('D2').Value := D2;
        ExecSQL;
        Open;
      end;

Amigo muito obrigada, agora ele me dá o resultado, só não entendo porque ele me dá um resultado só

tipo tenho dois resultados 26/10/11 e 01/03/2012, mas ele só me mostra o 26/10/11 porque?

meu codigo fico assim:

procedure Tfrma_receber.SpeedButton5Click(Sender: TObject);

var

D1,D2 : TDateTime;

begin

D1 := DateTimePicker1.Date;

D2 := DateTimePicker2.Date;

With Query_Receber do

begin

Close;

SQL.Text := 'SELECT * FROM a_receber WHERE data_vencimento BETWEEN :D1 AND :D2 ';

Parameters.ParamByName('D1').Value := D1;

Parameters.ParamByName('D2').Value := D2;

ExecSQL;

Open;

end;

Desde já agradeço quem puder me ajudar ...

Link to comment
Share on other sites

  • 0
tipo tenho dois resultados 26/10/11 e 01/03/2012, mas ele só me mostra o 26/10/11 porque?

veja se a instrução SQL esta recebendo realmente os valores

D1 := DateTimePicker1.Date;  // 26/01/2011
D2 := DateTimePicker2.Date;  //  01/03/2012

SQL.Text := 'SELECT * FROM a_receber WHERE data_vencimento BETWEEN D1 AND D2 ';

Atente: para as configurações regionais do seu windows com relação a data

26/10/11 é direferente de 26/10/2011

abraço

Link to comment
Share on other sites

  • 0

Obrigada amigo pela dica, imagino que seja isso mesmo que esteja acontecendo o problema é que não sei como criar a rotina para resolver isso .... em vb eu fazia mais ou menos assim:

Dim data_inicial As String

Dim data_final As String

data_inicial = Format(DTPicker1.Value, "MM/DD/YYYY")

data_final = Format(DTPicker2.Value, "MM/DD/YYYY")

Criterio = "#" & Format(DTPicker1, "mm/dd/yyy") & "# And #" & Format(DTPicker2, "mm/dd/yyyy") & "#"

SQL = "SELECT data_vencimento FROM a_receber WHERE a_receber.data_vencimento >= #" + data_inicial + "# and cliente.DataCad <=#" + data_final + "# ORDER BY DataCad"

Não vejo como fazer a mesma coisa em delphi...

tentei o seguinte codigo:

Query_Receber.Close;

Query_Receber.SQL.Clear;

Query_Receber.SQL.Add(' Select * from a_receber where data_vencimento between ''' +MaskEdit1.Text+''' and '''+MaskEdit2.Text+'''');

Query_Receber.Open;

Mas ele só me mostra as data que estão digitadas no maskedit e não todas as datas desda data inicial até a final.....

sei que é por causa da seleção não tem nehuma parte no codigo que mande ele pegar todas as datas >= a data inicial e <=# da data final....

como fazer isso em delphi?

Uso o banco acess 2003, e como já dissi faço a consulta atraves de uma ADOQuery, desde já agradeço quem puder me ajudar....

Link to comment
Share on other sites

  • 0

pode-se fazer assim

procedure Tfrma_receber.SpeedButton5Click(Sender: TObject);
var
   D1,D2 : TDateTime;
begin
   D1 := DateTimePicker1.Date;
   D2 := DateTimePicker2.Date;
   With Query_Receber do
   begin
     Close;
     SQL.Text := 'SELECT * FROM a_receber WHERE data_vencimento >= :D1 AND data_vencimento <= :D2 ';
     Parameters.ParamByName('D1').Value := D1;
     Parameters.ParamByName('D2').Value := D2;
     ExecSQL;
     Open;
   end;
end;

Obs: tem outros exemplos no forum

abraço

Link to comment
Share on other sites

  • 0
pode-se fazer assim

procedure Tfrma_receber.SpeedButton5Click(Sender: TObject);
var
   D1,D2 : TDateTime;
begin
   D1 := DateTimePicker1.Date;
   D2 := DateTimePicker2.Date;
   With Query_Receber do
   begin
     Close;
     SQL.Text := 'SELECT * FROM a_receber WHERE data_vencimento >= :D1 AND data_vencimento <= :D2 ';
     Parameters.ParamByName('D1').Value := D1;
     Parameters.ParamByName('D2').Value := D2;
     ExecSQL;
     Open;
   end;
end;

Obs: tem outros exemplos no forum

abraço

OBRIGADA AMIGO ... PROBLEMA RESOLVIDO....

TINHA TENTADO ALGO PARECIDO MAS ESTAVA FAZENDO ASSIM:

var

D1,D2 : TDateTime;

begin

D1 := DateTimePicker1.Date;

D2 := DateTimePicker2.Date;

With Query_Receber do

begin

Close;

SQL.Text := 'SELECT * FROM a_receber WHERE Table_areceberdata_vencimento >= :D1 AND Table_areceberdata_vencimento <= :D2 ';

Parameters.ParamByName('D1').Value := D1;

Parameters.ParamByName('D2').Value := D2;

ExecSQL;

Open;

drrrrrrrrrr.... :blush:

mais uma x muito obrigada

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...