Fórum Pesquisa incremental em campo date #2288

28/01/2009

0

Bom dia...   Estou com uma tela padrão de manutenção onde eu tenho um edit chamado PESQUISA e de acordo com o campo selecionado na grid dessa tabela eu faço uma pesquisa incremental na tabela.   Coloquei no evento OnChange do componente edit o seguinte codigo..   procedure TTBasicaManutencao.PesquisaChange(Sender: TObject);
begin
  if Pesquisa.Text <> '*' then
   if not DSManutencao.DataSet.IsEmpty then
  DSManutencao.DataSet.Locate(PainelPesquisa.Caption,Pesquisa.Text,[loPartialKey]);
end;
  Esta funcionando quase tudo certinho (rsrsrsrsr)... pois a pesquisa incremental não funciona quando o campo for do tipo data (date).   Como faço para que a pesquisa funcione para campos do tipo data (Date)????   Fico no aguardo de uma resposta...   Obrigado
Evandro Silva

Evandro Silva

Responder

Posts

28/01/2009

Wesley Yamazack

Bom dia ,

 fiz uma modificação na sua estrutura, sendo assim irá funcionar sempre, para qualquer campo.
Faça as modificações necessárias para se adaptar a seu programa.
  procedure TTBasicaManutencao.PesquisaChange(Sender: TObject);
begin
  if Pesquisa.Text <> '*' then
   if not DSManutencao.DataSet.IsEmpty then
begin
  DSManutencao.DataSet.commandtext := 'SELECT * FROM TABELA WHERE '+ PainelPesquisa.Caption + ' LIKE '%'+QuotedStr(Pesquisa.Text)+'%';
  DSManutencao.DataSet.open;

end;
end;


Espero que ajude

Att,

Wesley Y

Responder

Gostei + 0

28/01/2009

Evandro Silva

Boa tarde... A alteração que você sujeriu funcionaria para qualquer tipo de campo sim (retornado os registros que satisfaçam o "SELECT" montado)... mas acho que não me expressei direito. Eu já tenho essa opção de montar um "SELECT" para qualquer campo desejado pelo usuário.   A rotina que lhe envie será executado apenas depois que tiver sido executado o comando "SELECT" para retornar os registros que satisfaçam a pesquisa solicitada e o que o mesmo tenha retornado algum registro (se não retornar nenhum registro apenas exibe uma mensagem avisando isso ao usuário).   Depois de retornar os registros que satisfaçam o comando "SELECT" executado preciso executar uma pesquisa incremental junto aos registros retornados.Para isso eu permito que o usuário selecione o campo que deseja pesquisar incrementalmente e conforme ele vai digitando o valor desejado no edit o ponteiro vai se deslocando junto aos registros selecionados.    Na rotina que lhe envie isso ocorre, mas quando o campo selecionado para realizar a pesquisa incremental é do tipo Data ele não exexuta a pesquisa incremental.   Espero ter me expressado melhor agora. Fico no aguardo de sua resposta.   Obrigado...
Responder

Gostei + 0

29/01/2009

Wesley Yamazack

Olá , Evandro

   Bom dia !!!

 Estive estudando a possibilidade da pesquisa parcial com o campo data, porém antes de executar a conversão, é feito um teste para ver se o valor digitado é uma data válida. Sendo assim não teria como você utilizar o mesmo. Não sei se isso te ajudaria. Você poderia fazer o seguinte.

procedure TForm1.Edit1Change(Sender: TObject);
Var
  DataLixo : TDateTime;
begin
  if Combobox1.Text = 'DATA' then
  begin
     if TryStrToDate(Edit1.Text,DataLixo) then
       if ClientDataSet1.Locate(ComboBox1.Text,Edit1.Text,[loPartialKey]) then
       begin
          ShowMessage('Data Localizado');
       end;
  end
  else
     if ClientDataSet1.Locate(ComboBox1.Text,Edit1.Text,[loPartialKey]) then
     begin
        ShowMessage('Localizado');
     end;
end;

a Função TryStrToDate vai ficar tentando converter o valor do Edit1 para data, quando ele conseguir ele vai e executa o locate, pois LopartialKey não funciona para campos Data, DateTime.

Espero que ajude.

Att,

Wesley Y

Responder

Gostei + 0

29/01/2009

Wesley Yamazack

Olá , Evandro

   Bom dia !!!

 Estive estudando a possibilidade da pesquisa parcial com o campo data, porém antes de executar a conversão, é feito um teste para ver se o valor digitado é uma data válida. Sendo assim não teria como você utilizar o mesmo. Não sei se isso te ajudaria. Você poderia fazer o seguinte.

procedure TForm1.Edit1Change(Sender: TObject);
Var
  DataLixo : TDateTime;
begin
  if Combobox1.Text = 'DATA' then
  begin
     if TryStrToDate(Edit1.Text,DataLixo) then
       if ClientDataSet1.Locate(ComboBox1.Text,Edit1.Text,[loPartialKey]) then
       begin
          ShowMessage('Data Localizado');
       end;
  end
  else
     if ClientDataSet1.Locate(ComboBox1.Text,Edit1.Text,[loPartialKey]) then
     begin
        ShowMessage('Localizado');
     end;
end;

a Função TryStrToDate vai ficar tentando converter o valor do Edit1 para data, quando ele conseguir ele vai e executa o locate, pois LopartialKey não funciona para campos Data, DateTime.

Espero que ajude.

Att,

Wesley Y

Responder

Gostei + 0

29/01/2009

Evandro Silva

Bom dia Wesley... Obrigado pela sua ajuda, mas eu acabei mudando o esquema quando o campo a ser pesquisado for do tipo Data, fiz uma rotina para verificar se a data informada é válida e se for eu faço um pesquisa com o comando locate mas usando a opção loCaseInsensitive. Não ficou como eu deseja a principio mas funciona. Vou deixar assim mesmo. Obrigado... Pode dar esse chamado como resolvido.
Responder

Gostei + 0

29/01/2009

Wesley Yamazack

Blz Evandro, o chamado foi concluido.

Se precisar de algo estamos ai.

Abraço

Att,

Wesley Y
Responder

Gostei + 0

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

Aceitar