Como fazer uma busca caracter a caracter
To precisando fazer uma busca, tipo assim quando estou fazendo um cadastro de produtos, por exemplo, tenho que selecionar o fornecedor, que são diversos, então eu chamo um form que contem um dbgrid com a relação mas .., eu tenho que ir procurando um a um, então pensei se não havia uma maneira de colocar um edit e quando eu fosse teclado o nome do fornecedor desejado ele fosse sendo filtrado no dbgrid deste form, ou seja quendo eu teclar ´M´ vai me aparece todos os fornecedores que iniciam com a letra M, ai eu digito a então me mostrará os fornecedores com ´Ma´ é isso ai. tem como?
Chip_set
Curtidas 0
Respostas
Franthesco
21/12/2005
Bem,
eu uso um sql e faço assim:
var a,b,c: String;
begin
Query1.SQL.Clear;
a:=´Select * From TABELA ´;
b:=´Where CAMPO Like:Consulta ´;
c:=´Order By CAMPO´;
Query1.SQL.Add(a+b+c);
Query1.Params[0].AsString;
Query1.ParamByName(´Consulta´).AsString:=´´+´¬´+Edit1.Text+´¬´;
Query1.Close;
Query1.Open;
end;
É isso. Coloca no onchange, ou no onkeydown...
Vlw!
eu uso um sql e faço assim:
var a,b,c: String;
begin
Query1.SQL.Clear;
a:=´Select * From TABELA ´;
b:=´Where CAMPO Like:Consulta ´;
c:=´Order By CAMPO´;
Query1.SQL.Add(a+b+c);
Query1.Params[0].AsString;
Query1.ParamByName(´Consulta´).AsString:=´´+´¬´+Edit1.Text+´¬´;
Query1.Close;
Query1.Open;
end;
É isso. Coloca no onchange, ou no onkeydown...
Vlw!
GOSTEI 0
Martins
21/12/2005
Olha só, se vc tá usando Query então dá para fazer +/- assim:
Agora se vc tá usando table então tente assim no OnChange do Edit.
Boa Sorte!!!
begin Queryx.Close; Queryx.SQL.Clear; Queryx.Sql.Add(´Select * From TABELA Where CAMPO Like:Consulta Order By CAMPO´); Queryx.SQL.ParamByName(´Consulta´).AsString := ´¬´ + Editx.Text +´¬´ ; Queryx.Open; end;
Agora se vc tá usando table então tente assim no OnChange do Edit.
Tablex.FindNearest([Editx.Text]);
Boa Sorte!!!
GOSTEI 0
Chip_set
21/12/2005
o que eu quero é um código assim só que esse código funciona com paradox com firebird eu não consigo fazer funcionar.
procedure TForm_agenda.Edit1Change(Sender: TObject);
var
OldStart : Integer;
begin
With Edit1 do
if Text <> ´´ then
begin
OnChange := NIL;
OldStart := SelStart;
Text := UpperCase(Copy(Text,1,1))+LowerCase(Copy(Text,2,Length(Text)));
SelStart := OldStart;
OnChange := Edit1Change;
end;
bancos.IBT_agenda.FindNearest([edit1.text]); <<<< ta aqui o erro eu acho.
end;
procedure TForm_agenda.Edit1Change(Sender: TObject);
var
OldStart : Integer;
begin
With Edit1 do
if Text <> ´´ then
begin
OnChange := NIL;
OldStart := SelStart;
Text := UpperCase(Copy(Text,1,1))+LowerCase(Copy(Text,2,Length(Text)));
SelStart := OldStart;
OnChange := Edit1Change;
end;
bancos.IBT_agenda.FindNearest([edit1.text]); <<<< ta aqui o erro eu acho.
end;
GOSTEI 0
Martins
21/12/2005
o que eu quero é um código assim só que esse código funciona com paradox com firebird eu não consigo fazer funcionar.
procedure TForm_agenda.Edit1Change(Sender: TObject);
var
OldStart : Integer;
begin
With Edit1 do
if Text <> ´´ then
begin
OnChange := NIL;
OldStart := SelStart;
Text := UpperCase(Copy(Text,1,1))+LowerCase(Copy(Text,2,Length(Text)));
SelStart := OldStart;
OnChange := Edit1Change;
end;
bancos.IBT_agenda.FindNearest([edit1.text]); <<<< ta aqui o erro eu acho.
end;
Com paradox pode funcionar na boa, mas se vc tá usando o IB, olhe o código em SQL que eu postei logo acima.
GOSTEI 0
Chip_set
21/12/2005
O problema é que uso o IbTable da aba interbase, mas vou dar mais uma olhada.
GOSTEI 0
Martins
21/12/2005
O problema é que uso o IbTable da aba interbase, mas vou dar mais uma olhada.
Sendo assim vc poderá usar então o código abaixo, veja.
IBTable1.Locate( ´Nome´, Edit1.Text, []);
ou
IBTable1.Locate( ´Nome´, Edit1.Text, [loPartialKey]);
O Locate vc poderá usar em qualquer campo (String, Inteiros, Float, Date) mesmo que estes não sejam campos chave ou indexados.
Boa Sorte!!
GOSTEI 0
Chip_set
21/12/2005
erro
[Error] fbm_agenda.pas(99): Undeclared identifier: ´loPartialKey´
eu ja havia tentado o locate só na sabia sobre lopartialkey o que significa ele apesar que deu erro. :(
[Error] fbm_agenda.pas(99): Undeclared identifier: ´loPartialKey´
eu ja havia tentado o locate só na sabia sobre lopartialkey o que significa ele apesar que deu erro. :(
GOSTEI 0
Martins
21/12/2005
erro
[Error] fbm_agenda.pas(99): Undeclared identifier: ´loPartialKey´
eu ja havia tentado o locate só na sabia sobre lopartialkey o que significa ele apesar que deu erro. :(
[code]
//Faz diferença se está em maiuscula ou minuscula
IBTable.Locate( ´nome´, edit1.text , [loCaseInsensitive] );
//Localiza por aproximação
IbTable.Locate( ´nome´, edit1.text , [loPartialKey] );
[code]
Posta o código q vc colocou aqui para eu ver.
GOSTEI 0
Chip_set
21/12/2005
begin
if key=13 then
begin
bancos.IBT_agenda.Locate(´nome´, edit1.text,[loPartialKey]);
end;
end;
:cry: :cry: :cry:
if key=13 then
begin
bancos.IBT_agenda.Locate(´nome´, edit1.text,[loPartialKey]);
end;
end;
:cry: :cry: :cry:
GOSTEI 0
Martins
21/12/2005
begin
if key=13 then
begin
bancos.IBT_agenda.Locate(´nome´, edit1.text,[loPartialKey]);
end;
end;
:cry: :cry: :cry:
:shock:
Nobre colega, tente com o código abaixo por favor!.
Esse código deve ser colocado no OnChange do Edit, assim quando vc começar a digitar o nome q deseja encontrar, não importa se em maiúscula ou minúscula ele te levará até o registro q satisfaça sua condição.
procedure TForm1.Edit1Change(Sender: TObject); begin //Localiza por aproximação sem fazer diferença se está em maiúscula ou minúscula IbTable1.Locate(´Nome´, Edit1.Text, [loPartialKey, loCaseInSensitive]); end;
Se com o código acima não funcionar como vc quer, então não entendi o q vc deseja.
Boa sorte!!
GOSTEI 0
Chip_set
21/12/2005
eu ja havia tentando mas me retorna erro olhe eles ai em baixo.
[Error] fbm_agenda.pas(116): Undeclared identifier: ´loPartialKey´
[Error] fbm_agenda.pas(116): Undeclared identifier: ´loCaseInSensitive´
o código usado foi esse:
procedure TForm_agenda.Edit1Change(Sender: TObject);
begin
bancos.IBT_agenda.Locate(´Nome´, Edit1.Text, [loPartialKey, loCaseInSensitive]);
end;
eu ja olhei la no help do delphi e localizei as opções acima (lopartialkey) não consigo entender pq o erro retornado é undecared indentifier sendo que o mesmo é nativo do delphi. :cry: :cry: :cry:
[Error] fbm_agenda.pas(116): Undeclared identifier: ´loPartialKey´
[Error] fbm_agenda.pas(116): Undeclared identifier: ´loCaseInSensitive´
o código usado foi esse:
procedure TForm_agenda.Edit1Change(Sender: TObject);
begin
bancos.IBT_agenda.Locate(´Nome´, Edit1.Text, [loPartialKey, loCaseInSensitive]);
end;
eu ja olhei la no help do delphi e localizei as opções acima (lopartialkey) não consigo entender pq o erro retornado é undecared indentifier sendo que o mesmo é nativo do delphi. :cry: :cry: :cry:
GOSTEI 0
Martins
21/12/2005
E aê!!
Nobre colega, coloque na Uses do seu form a seguinte unit [b:54c53fcc84]IBTable[/b:54c53fcc84], pois ela não existe em seu form, ao colocá-la, tudo funcionará perfeitamente.
Boa Sorte!!!
Nobre colega, coloque na Uses do seu form a seguinte unit [b:54c53fcc84]IBTable[/b:54c53fcc84], pois ela não existe em seu form, ao colocá-la, tudo funcionará perfeitamente.
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, IBTable, StdCtrls;
Boa Sorte!!!
GOSTEI 0
Chip_set
21/12/2005
Ai agora funcionou, poxa iniciante da trabalho né rsrsrsrs gente valeu mesmo eu ja estava pra ficar doido hahahaha. Agora tudo clareou. valeu!!!!
GOSTEI 0
Martins
21/12/2005
Ai agora funcionou, poxa iniciante da trabalho né rsrsrsrs gente valeu mesmo eu ja estava pra ficar doido hahahaha. Agora tudo clareou. valeu!!!!
:D
Relaxa!
Já poderiamos ter resolvido isso antes.
GOSTEI 0