Consulta SQL
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á
Agradeço desde já
_celo
Curtidas 0
Respostas
Peninha
14/12/2004
Amigo _celo, é + ou - assim.
No evento OnkeyUp do seu edit use seguinte código:
No evento OnkeyDown do seu form declare este código:
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.
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
14/12/2004
Amigo _celo, é + ou - assim.
No evento OnkeyUp do seu edit use seguinte código:
No evento OnkeyDown do seu form declare este código:
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.
DmBasedados.IBTab_Cliente.Locate(´Nome_cliente´,varArrayOf([EdtPesquisa.Text]),[LopartialKey])
If (Key = VK_RETURN) Then Perform(WM_NEXTDLGCTL,0,0);
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
14/12/2004
Está dando o seguinte erro:
SQLTable1: Cannot Perform this operation on a closed dataset.
Emerson como é que faço por SQL?
SQLTable1: Cannot Perform this operation on a closed dataset.
Emerson como é que faço por SQL?
GOSTEI 0
Gandalf.nho
14/12/2004
Você está com o Table aberto?
GOSTEI 0
_celo
14/12/2004
Como faço para abri-lo?
GOSTEI 0
Gandalf.nho
14/12/2004
SQLTable1.Active = True
ou
SQLTable1.Open;
ou
SQLTable1.Open;
GOSTEI 0
_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 ?
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
14/12/2004
Olá
Antes de qualquer desses eventos. Talvez no FormShow...
Ou então, nesses eventos mesmo, com o código
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
14/12/2004
Paulo, gostei da sua dica irei trocar os códigos das minhas pesquisas.
Obrigado, Erivan.
Obrigado, Erivan.
GOSTEI 0
_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 :(
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