GARANTIR DESCONTO

Fórum Localizar registros por data no delphi #177169

24/08/2003

0

Preciso de ajuda para localizar eventos por data no delphi, tenho um MaskEdit onde o usuario deve digitar a data do evento procurado, e esta data devera ser localizada em uma tabela de eventos(tb_eventos) em formato paradox, e mostrada em um DBGrid. Usei o comando Locate(<tabela>.Locate) porem a data é incompativel com string,
já tentei o strtodate e vice-versa, mas não consegui fazer a busca funcionar.
Grato pela atenção!
Jean. :roll:


Jeancarlos

Jeancarlos

Responder

Posts

24/08/2003

Mmtoor

Esqueça a table e use query.

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


Responder

Gostei + 0

24/08/2003

Jeancarlos

Ok mmtoor, Obrigado pela dica valeu!
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.


Responder

Gostei + 0

25/08/2003

Bacalhau

Queres ir para um registo específico ou mostrar os registos que contém a data pretendida?

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


Responder

Gostei + 0

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

Aceitar