filtrar por entre datas
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.
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
Curtidas 0
Respostas
Silas Santos
07/09/2013
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!
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!
GOSTEI 0
Paulo
07/09/2013
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!
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?
GOSTEI 0
Paulo
07/09/2013
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!
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.
GOSTEI 0
Paulo
07/09/2013
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!
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.
GOSTEI 0
Silas Santos
07/09/2013
intrigante...
tem como mostrar o seu código?
tem como mostrar o seu código?
GOSTEI 0
Paulo
07/09/2013
intrigante...
tem como mostrar o seu código?
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.
GOSTEI 0
Silas Santos
07/09/2013
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...
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...
GOSTEI 0
Paulo
07/09/2013
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...
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.
GOSTEI 0
José
07/09/2013
Como a duvida foi sanada, estou marcando o tópico como concluído.
GOSTEI 0