Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Pesquisa com intervalo de datas


anabon

Pergunta

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 para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...