Fórum Filtro com Data como? #340043

07/04/2007

0

Olá pessoal.

Estou com um grande problema.
Não consigo filtrar campos data com a Query.

Eu sei usar a confição IF para verificar qual é a maior ou menor data.
A minnha tabela1 a data de recadastramento: Query1.fieldbyName(´Data´).AsString:= formatdatatime(´dd/mm/yyy´,now);

A minnha tabela2, fica as possoas cadastradas.
Nesta minha tabela2 tem o campo de recadastramento.
E eu coloquei uma instrução SQL para serem selecionadas toda as pessoas que tiverem data igual ou maior da data de recadastramento.
Sendo que eu mando para uma variável e esta variável eu coloco no comando SQL...

Mas oque está faltando...

Eis o comando SQL: select * from DOCUMENTACAO WHERE DATA_RECADASTRAMENTO >= DATA_RECADASTRAMENTO ORDER BY NOME_PESSOA;


Max2006

Max2006

Responder

Posts

08/04/2007

Adriano Santos

Não entendi sua dúvida, mas eis um exemplo de filtro por datas em SQL:

procedure TForm1.Button1Click(Sender: TObject);
var
  DataInicial : TDatetime;
  DataFinal : TDatetime;
begin
  DataInicial := DateTimePicker_1.Date;
  DataFinal := DateTimePicker_2.Date;
  
  with Query1 do
  begin
    Close;
    Sql.Clear;
    Sql.Add(´SELECT * FROM MINHA_TABELA WHERE DATA_RECADASTRO BETWEEN :pDataInicial AND :pDataFinal´);
    ParamByName(´pDataInicial´).AsDateTime := DataInicial;
    ParamByName(´pDataFinal´).AsDateTime := DataFinal;
    Open;
    if IsEmpty then
      MessageDlg(´Não existem dados.´, mtInformation, [mbOk], 0);
  end;
end;


Aqui usei um BETWEEN para filtrar entre duas datas, mas poderia usar o seu exemplo, mais ou menos assim:


procedure TForm1.Button1Click(Sender: TObject);
var
  Data : TDatetime;
begin
  Data := DateTimePicker_1.Date;
 
  with Query1 do
  begin
    Close;
    Sql.Clear;
    Sql.Add(´SELECT * FROM MINHA_TABELA WHERE DATA_RECADASTRO >= :pDataFiltro´);
    ParamByName(´pDataFiltro´).AsDateTime := Data;
    Open;
    if IsEmpty then
      MessageDlg(´Não existem dados.´, mtInformation, [mbOk], 0);
  end;
end;



Responder

Gostei + 0

08/04/2007

Richard Lima

1 - modifica o campo DATA_RECADASTRAMENTO na tabela para o tipo correto de armazenar datas de acordo com seu sgbd, nao grave data como string...

2 - na hora de cadastrar, tenta:
Query1.fieldbyName(´Data´).AsDateTime:= now; 


quando for selecionar, utilize parametros como mostrado pelo Adriano..

outra coisa, quando você iguala um campo a ele mesmo, isso retorna true, portanto essa tua pesquisa está trazendo todo mundo..

select * from DOCUMENTACAO WHERE DATA_RECADASTRAMENTO >= DATA_RECADASTRAMENTO ORDER BY NOME_PESSOA


para uma pesquisa, compare um campo a um valor ou um campo a outro campo do mesmo tipo, nunca um campo com ele mesmo... novamente, veja o 2º exemplo do Adriano..

um abraço!


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar