Pesquisa incremental em campo date
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
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
Curtidas 0
Respostas
Wesley Yamazack
28/01/2009
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
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
GOSTEI 0
Evandro Silva
28/01/2009
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...
GOSTEI 0
Wesley Yamazack
28/01/2009
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
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
GOSTEI 0
Wesley Yamazack
28/01/2009
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
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
GOSTEI 0
Evandro Silva
28/01/2009
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.
GOSTEI 0
Wesley Yamazack
28/01/2009
Blz Evandro, o chamado foi concluido.
Se precisar de algo estamos ai.
Abraço
Att,
Wesley Y
Se precisar de algo estamos ai.
Abraço
Att,
Wesley Y
GOSTEI 0