Filtro com DateTimePicker não funciona!
Boa Tarde!
Estou com um problemão... estou tentando fazer uma filtragem com um DateTimePicker e o DBGrid fica vazio.
Gostaria de ao clicar na data do DTP fosse realizado o filtro por data na tabela e exibisse no dbGrid.
Já fiz N buscas no forum e não achei a solução, inclusive, estes códigos que usei foram coletados no forum.
Uso BD Access com ADOTable.
segue o código do procedimento OnClick do DateTimePicker:
Onde estou errando já que a filtragem do evento OnShow deste form funciona perfeitamente?
Toda Ajuda será bem vinda!
Obrigado desde Já,
Douglas.
Estou com um problemão... estou tentando fazer uma filtragem com um DateTimePicker e o DBGrid fica vazio.
Gostaria de ao clicar na data do DTP fosse realizado o filtro por data na tabela e exibisse no dbGrid.
Já fiz N buscas no forum e não achei a solução, inclusive, estes códigos que usei foram coletados no forum.
Uso BD Access com ADOTable.
segue o código do procedimento OnClick do DateTimePicker:
procedure TfrmExpediente.dtpDataEntradaClick(Sender: TObject);
begin
(* este código abaixo não dá nenhum erro e tb não realiza nada *)
dmExp.tblLancEntrada.Close;
dmExp.tblLancEntrada.Filtered:=True;
dmExp.tblLancEntrada.Filter:=´[DATA]=´+QuotedStr(DatetoStr(dtpDataEntrada.DateTime));
dmExp.tblLancEntrada.Open;
(*
já este ai em baixo NÃO aceita ´ParambyName´, diz que não reconhece
*)
{
with datamodule.Query do
begin
Close;
SQL.Clear;
SQL.Add(´Select * from tblLancEntrada´); //tabela de Access
SQL.Add(´Where DATA = :d´);
SQL.ParambyName(´d´).Value := DateTimePicker1.DateTime;
ExecSql;
end;
}
end;
Onde estou errando já que a filtragem do evento OnShow deste form funciona perfeitamente?
Toda Ajuda será bem vinda!
Obrigado desde Já,
Douglas.
Douglas Bitencourt
Curtidas 0
Respostas
Bampavao
28/11/2003
with datamodule.Query do
begin
Close;
SQL.Clear;
SQL.Add(´Select * from tblLancEntrada´); //tabela de Access
SQL.Add(´Where DATA = :d´);
Parameters.ParambyName(´d´).Value := DateTimePicker1.DateTime;
Open;
end;
begin
Close;
SQL.Clear;
SQL.Add(´Select * from tblLancEntrada´); //tabela de Access
SQL.Add(´Where DATA = :d´);
Parameters.ParambyName(´d´).Value := DateTimePicker1.DateTime;
Open;
end;
GOSTEI 0
Marcelo.c
28/11/2003
Você deve utilizar ExecSQL apenas com comandos que não retornam dados (Insert, Delete, Update). Com Select, que retorna dados, você deve utilizar Open.
GOSTEI 0
Douglas Bitencourt
28/11/2003
Caro BAMPavao, obrigado pela pronta resposta, aceitou legal o parâmetro, mas o dbgrig continua vazio!!!
E agora?
Que que eu faço!! Tô no laço!! Que embaraço!!
Se tiver alguma outra idéia...
Obrigado desde Já,
Douglas.
E agora?
Que que eu faço!! Tô no laço!! Que embaraço!!
Se tiver alguma outra idéia...
Obrigado desde Já,
Douglas.
GOSTEI 0
Rafael Heise
28/11/2003
Alguma vez já apareceu algum dado na sua DBGrid?
Verifique se o DataSource está setado Correto...
com que data você está testando?
verifique se não é porque deve ser usado o formato
mm/dd/yyyy ao invés de dd/mm/yyyy
para tal, use QuotedStr(FormatDateTime(´mm/dd/yyyy´,SuaData))
Verifique se o DataSource está setado Correto...
com que data você está testando?
verifique se não é porque deve ser usado o formato
mm/dd/yyyy ao invés de dd/mm/yyyy
para tal, use QuotedStr(FormatDateTime(´mm/dd/yyyy´,SuaData))
GOSTEI 0
Douglas Bitencourt
28/11/2003
Zernero
tentei a sua dica, mas tb não funcionou.
o dbgrid já teve valores sim, mas quando não usei query.
eis o código que deu certo, mas somente no evento OnFilterRecord do AdoTable:
tentei também este código para o evento change e click do DateTimePicker:
Quando uso AdoTable só funciona no evento OnFilterRecord do AdoTable.
E o OnClick do DTP não.
Agora o código que usei no evento OnFilterRecord do AdoQuery:
... e no evento OnChange do DTP...
Onde será que está o Wally??
Isso tá tirando meu sono mano...
Obrigado desde Já
Douglas
tentei a sua dica, mas tb não funcionou.
o dbgrid já teve valores sim, mas quando não usei query.
eis o código que deu certo, mas somente no evento OnFilterRecord do AdoTable:
procedure TdmExp.tblLancSaidaFilterRecord(DataSet: TDataSet;
var Accept: Boolean);
var
Dia, Mes, Ano: word;
Hoje : TDateTime;
begin
Hoje := Date;
Accept := false;
DecodeDate(Date,Ano,Mes,Dia);
if DMExp.tblLancSaida[´DATA´] = Hoje then
Accept := True;
end;
tentei também este código para o evento change e click do DateTimePicker:
procedure TfrmExpediente.dtpDataEntradaClick(Sender: TObject);
begin
dmExp.tblLancEntrada.Close;
dmExp.tblLancEntrada.Filtered:=True;
dmExp.tblLancEntrada.Filter:=´[DATA]=´+DatetoStr(dtpDataEntrada.Date);
dmExp.tblLancEntrada.Open;
end;
Quando uso AdoTable só funciona no evento OnFilterRecord do AdoTable.
E o OnClick do DTP não.
Agora o código que usei no evento OnFilterRecord do AdoQuery:
procedure TdmExp.QEntFilterRecord(DataSet: TDataSet; var Accept: Boolean);
var
Dia, Mes, Ano: word;
Hoje : TDateTime;
begin
Hoje := Date;
Accept := false;
DecodeDate(Date,Ano,Mes,Dia);
if DMExp.QEnt[´DATA´] = (FormatDateTime(´mm/dd/yyyy´,Hoje)) then
Accept := True;
end;
... e no evento OnChange do DTP...
procedure TfrmExpediente.dtpDataEntradaChange(Sender: TObject);
begin
with dmExp.QEnt do
begin
Close;
SQL.Clear;
SQL.Add(´Select * from LancEntrada´);
SQL.Add(´Where DATA =:DATA´);
Parameters.ParambyName(´DATA´).Value := dtpDataEntrada.Date;
Open;
end;
dbDataEntrada.SetFocus;
end;
Onde será que está o Wally??
Isso tá tirando meu sono mano...
Obrigado desde Já
Douglas
GOSTEI 0
Rafael Heise
28/11/2003
Eu olhei e talvez possa ser isso...
verifique se na sua tabela, tem dados com a data passada pelo TDateTimePicker.
Talvez, ele não esteja retornando a data correta, e não está trazendo registro nenhum no TADOQuery.Verifique a data que o datetimepicker está trazendo. Vá debugando seu código. Veja se está entrando no OnClick ou no OnChange do DataTimePicker. Experimente abrir a query comente com SELECT * FROM TABELA e veja se os registros aparecem. Faça alguns testes desse tipo e tente ver o que realmente pode estar acontecendo. Veja se a query está conseguindo abrir, essas coisas.
blz?
mas assim pelo código que você passou, aparenta não ter erros. Mas posso estar enganado também
valeu!
verifique se na sua tabela, tem dados com a data passada pelo TDateTimePicker.
Talvez, ele não esteja retornando a data correta, e não está trazendo registro nenhum no TADOQuery.Verifique a data que o datetimepicker está trazendo. Vá debugando seu código. Veja se está entrando no OnClick ou no OnChange do DataTimePicker. Experimente abrir a query comente com SELECT * FROM TABELA e veja se os registros aparecem. Faça alguns testes desse tipo e tente ver o que realmente pode estar acontecendo. Veja se a query está conseguindo abrir, essas coisas.
blz?
mas assim pelo código que você passou, aparenta não ter erros. Mas posso estar enganado também
valeu!
GOSTEI 0
Douglas Bitencourt
28/11/2003
Está funcionando agora! UFA!!!
como diz um companheiro aki do forum que não me lembro o nome:
´Parece dificil mas não é fácil não´
O problema era que ao clicar no DTP executava o código e também o que estava no evento OnFilterRecord da tabela.
Ou seja, executava 3 vs o filtro. A primeira ao abrir o form, a segunda no change do DTP e a terceira pelo fato de filtrar com o DTP ativar a tabela e o evento OnFilterRecord novamente, zerando o dbgrid.
A solução foi implementar no onShow do form o código e remover do OnFilterRecord. Desta forma roda belezinha.
Gostaria de agradecer a todos pelo apoio, pois, suas idéias me fizeram chegar a solução.
Segue o código que funcionou...
[b:4c92b0a776]
Estes códigos não funcionam desta maneira com QUERY, e sim com TABLE.
[/b:4c92b0a776]
Mais uma vez obrigado,
Douglas.
como diz um companheiro aki do forum que não me lembro o nome:
´Parece dificil mas não é fácil não´
O problema era que ao clicar no DTP executava o código e também o que estava no evento OnFilterRecord da tabela.
Ou seja, executava 3 vs o filtro. A primeira ao abrir o form, a segunda no change do DTP e a terceira pelo fato de filtrar com o DTP ativar a tabela e o evento OnFilterRecord novamente, zerando o dbgrid.
A solução foi implementar no onShow do form o código e remover do OnFilterRecord. Desta forma roda belezinha.
Gostaria de agradecer a todos pelo apoio, pois, suas idéias me fizeram chegar a solução.
Segue o código que funcionou...
(*
código que executa o FILTRO no evento OnShow do Form.
Neste caso, filtra pela data atual. Para filtrar por outras datas
implementar de acordo com a necessidade.
*)
procedure Formulario.FormShow(Sender: TObject);
var
...
begin
DateTimePiker.Date := Date; //DTP recebe data do sistema(data atual)
with TABELA do
begin
Filter:=´[CAMPODATA]=´ + DatetoStr(DateTimePicker.Date);
Filtered := true;
end;
(*
Código associado ao evento OnChange do DateTimePicker.
Quando selecionar a data o filtro é executado e o resultado aparece no dbgrid associado a tabela. Escolhi um dbgrid por atender as minhas necessidades, mas pode ser qualquer outro componente de saída.
*)
procedure Formulario.DateTimePickerChange(Sender: TObject);
begin
with TABELA do
begin
Filter:=´[CAMPODATA]=´ + DatetoStr(DateTimePicker.Date);
Filtered := true;
end;
[b:4c92b0a776]
Estes códigos não funcionam desta maneira com QUERY, e sim com TABLE.
[/b:4c92b0a776]
Mais uma vez obrigado,
Douglas.
GOSTEI 0
Carlos Filho
28/11/2003
experimenta assim que da certo , sempre faço assiim , utilizo a classe Midas.
Dm.tbvenda.Filter:='Data_Venda >='+QuotedStr(datetostr(datainicial.date))+' and Data_Venda <='+QuotedStr(datetostr(datafinal.date));
dm.tbvenda.Filtered:=true;
Dm.tbvenda.Filter:='Data_Venda >='+QuotedStr(datetostr(datainicial.date))+' and Data_Venda <='+QuotedStr(datetostr(datafinal.date));
dm.tbvenda.Filtered:=true;
GOSTEI 0