Consulta SQL

Delphi

14/12/2004

Gostaria de saber como faço para fazer uma consulta ´incremental´ ou seja o cara vai digitando no Edit e vai aparecendo no BDGrid conforme as letras que ele for digitando. Estou usando o banco InterBase e para fazer o conexao com o delphi estou usando os componentes da paleta DBExpress.


Agradeço desde já


_celo

_celo

Curtidas 0

Respostas

Peninha

Peninha

14/12/2004

Amigo _celo, é + ou - assim.
No evento OnkeyUp do seu edit use seguinte código:
   DmBasedados.IBTab_Cliente.Locate(´Nome_cliente´,varArrayOf([EdtPesquisa.Text]),[LopartialKey])


No evento OnkeyDown do seu form declare este código:
 If (Key = VK_RETURN) Then
      Perform(WM_NEXTDLGCTL,0,0);

Coloque na clausula Uses da Unit ´DB´ que é para vc poder usar o lopartialkey.
No primeiro código peguei um código completo do meu programa, é so vc adptar para o seu.
Qualquer coisa me envie um e-mail que eu te ajudo.
Erivan.


GOSTEI 0
Emersonclubedelphi

Emersonclubedelphi

14/12/2004

Amigo _celo, é + ou - assim. No evento OnkeyUp do seu edit use seguinte código:
   DmBasedados.IBTab_Cliente.Locate(´Nome_cliente´,varArrayOf([EdtPesquisa.Text]),[LopartialKey])
No evento OnkeyDown do seu form declare este código:
 If (Key = VK_RETURN) Then
      Perform(WM_NEXTDLGCTL,0,0);
Coloque na clausula Uses da Unit ´DB´ que é para vc poder usar o lopartialkey. No primeiro código peguei um código completo do meu programa, é so vc adptar para o seu. Qualquer coisa me envie um e-mail que eu te ajudo. Erivan.


Muito embora esta resposta esteja correta, não acho muito viável você fazer isso, pois terá um queda muito grande de performance na rede como um todo, principalmente se for banco de dados muito grande, o correto é vc usar sql e fazer uma pesquisar exata.

t+


GOSTEI 0
_celo

_celo

14/12/2004

Está dando o seguinte erro:

SQLTable1: Cannot Perform this operation on a closed dataset.


Emerson como é que faço por SQL?


GOSTEI 0
Gandalf.nho

Gandalf.nho

14/12/2004

Você está com o Table aberto?


GOSTEI 0
_celo

_celo

14/12/2004

Como faço para abri-lo?


GOSTEI 0
Gandalf.nho

Gandalf.nho

14/12/2004

SQLTable1.Active = True
ou
SQLTable1.Open;


GOSTEI 0
_celo

_celo

14/12/2004

procedure TForm2.Edit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
DM.SQLTable1.Locate(´Nome´,varArrayof([Edit1.Text]),[LopartialKey])
end;

procedure TForm2.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If (Key = VK_RETURN) Then
Perform(WM_NEXTDLGCTL,0,0);
end;

procedure TForm2.Edit1Change(Sender: TObject);
begin
Consulta.Locate(´Nome´, Edit1.Text, [loCaseInsensitive, loPartialKey]);
end;


Onde Colocaria o SQLTable1.open ?


GOSTEI 0
Paulo_amorim

Paulo_amorim

14/12/2004

Olá

Antes de qualquer desses eventos. Talvez no FormShow...

Ou então, nesses eventos mesmo, com o código

if not Table.Active then
begin
try
  Table.Open;
except
  ShowMessage(´Oops´);
end;
end;



GOSTEI 0
Peninha

Peninha

14/12/2004

Paulo, gostei da sua dica irei trocar os códigos das minhas pesquisas.
Obrigado, Erivan.


GOSTEI 0
_celo

_celo

14/12/2004

Já tentei de tudo q é jeito mas num to conseguindo. Fazer a pesquisa Incremental

No evento OnKeyUp coloquei esse procedimento:

begin
if not DM.SQLTable1.Active then
begin
try
DM.SQLTable1.Open;
DM.SQLTable1.Locate(´Nome´,varArrayof([EdtConsultaNome.Text]),[LopartialKey]);
except
ShowMessage(´Oops´);
end;
end;
end;

No evento OnKeyDown do form coloquei esse procedimento:

begin
If (Key = VK_RETURN) Then
Perform(WM_NEXTDLGCTL,0,0);
end;
end.

Mas na execucao na hora da que digito no Edt nao aparece nada. Estou ligando o DBGrid no DataSource, O DataSouce no ClienteDataSet o ClienteDataSet no DataSetProvider e o DataSetProviner no SQLQuery

O que tem de errado? Agradeço desde já Marcelo :(


GOSTEI 0
POSTAR