Fórum Localizar registros por data no delphi #177169
24/08/2003
0
já tentei o strtodate e vice-versa, mas não consegui fazer a busca funcionar.
Grato pela atenção!
Jean. :roll:
Jeancarlos
Curtir tópico
+ 0Posts
24/08/2003
Mmtoor
Var
Data: String;
begin
Data := Edit1.text;
query1.Close;
query1.SQL.Clear;
query1.SQL.Text := ´SELECT * FROM nome_da_tabela WHERE data =:pData´;
query1.ParamByName(´pData´).AsDateTime := StrToDate(Data);
query1.Prepare;
query1.Open;
dbgrid1.SetFocus;
ShowMessage(´Total de registros encontrados na pesquisa: ´ + IntToStr(query1.RecordCount));
Sem mais;
mmtoor2003
mmtoor2003@yahoo.com.br
Gostei + 0
24/08/2003
Jeancarlos
Mas ainda nao consegui mostrar os registros por data no DBGrid. pois o DBGrid deveria mostrar o nome dos campos da tabela e seus registros e quando digitada uma data no EditMask, clicando no botao ok deveria ser selecionado o registro que contivesse a respectiva data. Quando substitui a Table por um Query o DBGrid deixou de exibir os campos da tabela. Da o seguinte erro :EDBE Engine error with message invalid field name Data´ mas o nome do campo está correto, na tabela é ´Agn_data´ o codigo ficou assim:
procedure TFrm_AgendaVirtual.bbtnOKClick(Sender: TObject);
Var
Data: String;
begin
Data := meBuscaData.text;
DM_Data.qr_Agenda.Close;
DM_Data.qr_Agenda.SQL.Clear;
DM_Data.qr_Agenda.SQL.Text := ´SELECT * FROM Agenda.db WHERE data =:Agn_data´;
DM_Data.qr_Agenda.ParamByName(´Agn_data´).AsDateTime := StrToDate(Data);
DM_Data.qr_Agenda.Prepare;
DM_Data.qr_Agenda.Open;
dbgAgendaVirtual.SetFocus; {(Obs:DBGrid recebe texto?)(antes eu usava um Table.locate e um bookmark para selecionar os registros no DBGrid)}
ShowMessage(´Total de registros encontrados na pesquisa: ´ + IntToStr(DM_Data.qr_Agenda.RecordCount));
end;
Não entendi poque do texto showMessage, pois minha intenção era de somente apontar e selecionar um registro da tabela mostrado no dbgrid
que fosse selecionado pelo campo data.
Agradeço mais uma vez pela sua atenção mmtoor, fiquei muito agradecido pela ajuda.
Gostei + 0
25/08/2003
Bacalhau
A solução sem query para um registo é criares um indice secundário da tabela tb_eventos, do campo Data (por exemplo TB_DATA).
Após escolheres a data escre o seguinte código:
tb_eventos.indexname := ´TB_DATA´;
tb_eventos.setkey;
tb_eventos.fieldbyname(´Data´).asdatetime := <data que pretendo>;
tb_eventos.gotokey; // ou gotonearest
Para mostrar os eventos na data o código é o seguinte:
tb_eventos.cancelrange; // para retirar filtragens anteriores
tb_eventos.indexname := ´TB_DATA´;
tb_eventos.setrangestart;
tb_eventos.fieldbyname(´Data´).asdatetime := <data que pretendo>;
tb_eventos.setrangeend;
tb_eventos.fieldbyname(´Data´).asdatetime := <data que pretendo>;
tb_eventos.applyrange;
O grid vai mostrar só os eventos daquela data.
abraço
bacalhau
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)