Fórum filtrar por entre datas #454457

07/09/2013

0

tenho programinha de cadastro com ADOConnection, ADOQuery e BD Access, com os campos NOME, RG, CPF, DATA_CADASTRO;

gostaria de saber como implementar uma pesquisa entre datas. Por exemplo:

filtrar: todos os cadastros do mês de julho ou de uma data até outra data.
Paulo

Paulo

Responder

Posts

07/09/2013

Silas Santos

Olá paulo sergio, é evidente que existe muitas formas de fazer esse filtro, vou mostrar como eu faço em meus projetos:

Considerando que você já saiba ligar os componentes de acesso ao banco de dados access(ADOConnection, ADOQuery, DBGrid, DataSource) vamos lá:

Adicione no form dois componentes DateTimePicker, um Button, um DBGrid.

Adicione também um componente ADOQuery e um DataSource

Marque true a propriedade Prepared do ADOQuery

Na propriedade SQL do ADOQuery digite:

select NOME, RG, CPF, DATA_CADASTRO
from SUA_TABELA
where DATA_CADASTRO between :pDtIni and :pDtFim
order by DATA_CADASTRO

e apos isso selecione a propriedade Parameters do ADOQuery e selecione os dois parametros (pDtIni e pDtFim) e na propriedade DataType selecione ftDateTime

Agora no evento onClick do button digite:
with ADOQuery1 do
begin
Close;
Parameters.ParamByName('pDtIni').Value:= DateTimePicker1.DateTime;
Parameters.ParamByName('pDtFim').Value:= DateTimePicker2.DateTime;
Open;
end;

Uma coisa importante:
Eu tive alguns problemas ao usar os componentes DateTimePicker, pois eles não traziam os dados quando eu selecionava a mesma data em ambos. Problema este que resolvi colocando na propriedade Time do DateTimePicker1 00:00:00 e do DateTimePicker1 23:59:59

Espero que tenha ajudado!
Responder

Gostei + 0

07/09/2013

Paulo

Olá paulo sergio, é evidente que existe muitas formas de fazer esse filtro, vou mostrar como eu faço em meus projetos:

Considerando que você já saiba ligar os componentes de acesso ao banco de dados access(ADOConnection, ADOQuery, DBGrid, DataSource) vamos lá:

Adicione no form dois componentes DateTimePicker, um Button, um DBGrid.

Adicione também um componente ADOQuery e um DataSource

Marque true a propriedade Prepared do ADOQuery

Na propriedade SQL do ADOQuery digite:

select NOME, RG, CPF, DATA_CADASTRO
from SUA_TABELA
where DATA_CADASTRO between :pDtIni and :pDtFim
order by DATA_CADASTRO

e apos isso selecione a propriedade Parameters do ADOQuery e selecione os dois parametros (pDtIni e pDtFim) e na propriedade DataType selecione ftDateTime

Agora no evento onClick do button digite:
with ADOQuery1 do
begin
Close;
Parameters.ParamByName('pDtIni').Value:= DateTimePicker1.DateTime;
Parameters.ParamByName('pDtFim').Value:= DateTimePicker2.DateTime;
Open;
end;

Uma coisa importante:
Eu tive alguns problemas ao usar os componentes DateTimePicker, pois eles não traziam os dados quando eu selecionava a mesma data em ambos. Problema este que resolvi colocando na propriedade Time do DateTimePicker1 00:00:00 e do DateTimePicker1 23:59:59

Espero que tenha ajudado!


Ajudou e muito! o filtro deu certo, eu criei um outro só pra esse filtro, porém os registro ficam ocultos no DBGRID, só aparecem quando eu clico no button para filtrar entre datas. Tem como os registro ficarem visíveis sempre e no momento na filtragem permancer no DBGRID só as datas que eu selecionei?
Responder

Gostei + 0

08/09/2013

Paulo

Olá paulo sergio, é evidente que existe muitas formas de fazer esse filtro, vou mostrar como eu faço em meus projetos:

Considerando que você já saiba ligar os componentes de acesso ao banco de dados access(ADOConnection, ADOQuery, DBGrid, DataSource) vamos lá:

Adicione no form dois componentes DateTimePicker, um Button, um DBGrid.

Adicione também um componente ADOQuery e um DataSource

Marque true a propriedade Prepared do ADOQuery

Na propriedade SQL do ADOQuery digite:

select NOME, RG, CPF, DATA_CADASTRO
from SUA_TABELA
where DATA_CADASTRO between :pDtIni and :pDtFim
order by DATA_CADASTRO

e apos isso selecione a propriedade Parameters do ADOQuery e selecione os dois parametros (pDtIni e pDtFim) e na propriedade DataType selecione ftDateTime

Agora no evento onClick do button digite:
with ADOQuery1 do
begin
Close;
Parameters.ParamByName('pDtIni').Value:= DateTimePicker1.DateTime;
Parameters.ParamByName('pDtFim').Value:= DateTimePicker2.DateTime;
Open;
end;

Uma coisa importante:
Eu tive alguns problemas ao usar os componentes DateTimePicker, pois eles não traziam os dados quando eu selecionava a mesma data em ambos. Problema este que resolvi colocando na propriedade Time do DateTimePicker1 00:00:00 e do DateTimePicker1 23:59:59

Espero que tenha ajudado!


Ajudou e muito! o filtro deu certo, eu criei um outro só pra esse filtro, porém os registro ficam ocultos no DBGRID, só aparecem quando eu clico no button para filtrar entre datas. Tem como os registro ficarem visíveis sempre e no momento na filtragem permancer no DBGRID só as datas que eu selecionei?


Eu me enganei tambem nos filtros, quando eu peço para filtrar por ex: os registros cadastrados de 01/07/2013 a 10/07/2013, está vindo registro do mes 08 tambem.
Responder

Gostei + 0

09/09/2013

Paulo

Olá paulo sergio, é evidente que existe muitas formas de fazer esse filtro, vou mostrar como eu faço em meus projetos:

Considerando que você já saiba ligar os componentes de acesso ao banco de dados access(ADOConnection, ADOQuery, DBGrid, DataSource) vamos lá:

Adicione no form dois componentes DateTimePicker, um Button, um DBGrid.

Adicione também um componente ADOQuery e um DataSource

Marque true a propriedade Prepared do ADOQuery

Na propriedade SQL do ADOQuery digite:

select NOME, RG, CPF, DATA_CADASTRO
from SUA_TABELA
where DATA_CADASTRO between :pDtIni and :pDtFim
order by DATA_CADASTRO

e apos isso selecione a propriedade Parameters do ADOQuery e selecione os dois parametros (pDtIni e pDtFim) e na propriedade DataType selecione ftDateTime

Agora no evento onClick do button digite:
with ADOQuery1 do
begin
Close;
Parameters.ParamByName('pDtIni').Value:= DateTimePicker1.DateTime;
Parameters.ParamByName('pDtFim').Value:= DateTimePicker2.DateTime;
Open;
end;

Uma coisa importante:
Eu tive alguns problemas ao usar os componentes DateTimePicker, pois eles não traziam os dados quando eu selecionava a mesma data em ambos. Problema este que resolvi colocando na propriedade Time do DateTimePicker1 00:00:00 e do DateTimePicker1 23:59:59

Espero que tenha ajudado!


Ajudou e muito! o filtro deu certo, eu criei um outro só pra esse filtro, porém os registro ficam ocultos no DBGRID, só aparecem quando eu clico no button para filtrar entre datas. Tem como os registro ficarem visíveis sempre e no momento na filtragem permancer no DBGRID só as datas que eu selecionei?


Eu me enganei tambem nos filtros, quando eu peço para filtrar por ex: os registros cadastrados de 01/07/2013 a 10/07/2013, está vindo registro do mes 08 tambem.



ainda estou precisando de ajuda.
Responder

Gostei + 0

10/09/2013

Silas Santos

intrigante...

tem como mostrar o seu código?
Responder

Gostei + 0

10/09/2013

Paulo

intrigante...

tem como mostrar o seu código?



O código todo do form é:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, DBGrids, DB, DBTables, ADODB, Mask, DBCtrls,
Buttons, ComCtrls, DateUtils;

type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
ADOConnection1: TADOConnection;
Query1: TADOQuery;
DataSource2: TDataSource;
Query1NOME: TWideStringField;
Query1RG: TWideStringField;
Query1CPF: TWideStringField;
Query1DATA_CADASTRO: TWideStringField;
Label1: TLabel;
DBEdit1: TDBEdit;
Label2: TLabel;
DBEdit2: TDBEdit;
Label3: TLabel;
DBEdit3: TDBEdit;
Label4: TLabel;
DBEdit4: TDBEdit;
Button1: TButton;
Button2: TButton;
DateTimePicker1: TDateTimePicker;
DateTimePicker2: TDateTimePicker;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Query1.Append;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Query1.Post;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
with Query1 do
begin
Close;
Parameters.ParamByName('pDtIni').Value:= DateTimePicker1.DateTime;
Parameters.ParamByName('pDtFim').Value:= DateTimePicker2.DateTime;
Open;
end;

end;

end.

por enquanto só tem esse form.
Responder

Gostei + 0

12/09/2013

Silas Santos

Olá paulo sergio...

você está utilizando o mesmo componente ADOQuery1 pra cadastrar e filtrar... nesse caso temos que fazer alguns ajustes...

Não é recomendado em tabelas grandes, mas para fins didáticos lá vai:

1) Para mostrar os dados assim que abrir o formulário

a- Na propriedade SQL do ADOQuery1 coloque assim: Select * from SUA_TABELA
b- No evento onCreate do formulário: ADOQuery1 .Open;


2) Para filtrar os dados conforme fizemos anteriormente

a- No evento onClick do botao filtrar coloque assim:
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('SELECT * FROM SUA_TABELA');
SQL.Add('WHERE DTCADASTRO BETWEEN :pINI AND :pFIM');
SQL.Add('ORDER BY DTCADASTRO');
Parameters.ParamByName('pINI').Value:= DateTimePicker1.DateTime;
Parameters.ParamByName('pFIM').Value:= DateTimePicker2.DateTime;
Open;
end;


Espero ter ajudado...
Responder

Gostei + 0

14/09/2013

Paulo

Olá paulo sergio...

você está utilizando o mesmo componente ADOQuery1 pra cadastrar e filtrar... nesse caso temos que fazer alguns ajustes...

Não é recomendado em tabelas grandes, mas para fins didáticos lá vai:

1) Para mostrar os dados assim que abrir o formulário

a- Na propriedade SQL do ADOQuery1 coloque assim: Select * from SUA_TABELA
b- No evento onCreate do formulário: ADOQuery1 .Open;


2) Para filtrar os dados conforme fizemos anteriormente

a- No evento onClick do botao filtrar coloque assim:
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('SELECT * FROM SUA_TABELA');
SQL.Add('WHERE DTCADASTRO BETWEEN :pINI AND :pFIM');
SQL.Add('ORDER BY DTCADASTRO');
Parameters.ParamByName('pINI').Value:= DateTimePicker1.DateTime;
Parameters.ParamByName('pFIM').Value:= DateTimePicker2.DateTime;
Open;
end;


Espero ter ajudado...




Pô Silas, e como ajudou! muito obrigado. Deus te abençoe e sempre preserve seus conhecimentos e sua generosidade.
Responder

Gostei + 0

15/10/2013

José

Como a duvida foi sanada, estou marcando o tópico como concluído.
Responder

Gostei + 0

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

Aceitar