Como fazer uma busca caracter a caracter

21/12/2005

1

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?


Responder

Posts

21/12/2005

Franthesco

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!


Responder

21/12/2005

Martins

Olha só, se vc tá usando Query então dá para fazer +/- assim:

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!!!


Responder

21/12/2005

Chip_set

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;


Responder

21/12/2005

Martins

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.


Responder

21/12/2005

Chip_set

O problema é que uso o IbTable da aba interbase, mas vou dar mais uma olhada.


Responder

21/12/2005

Martins

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!!


Responder

21/12/2005

Chip_set

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. :(


Responder

21/12/2005

Martins

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.


Responder

21/12/2005

Chip_set

begin
if key=13 then
begin
bancos.IBT_agenda.Locate(´nome´, edit1.text,[loPartialKey]);
end;
end;
:cry: :cry: :cry:


Responder

22/12/2005

Martins

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!!


Responder

22/12/2005

Chip_set

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:


Responder

22/12/2005

Martins

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.

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,   Forms,
  Dialogs, DB, IBTable,  StdCtrls;


Boa Sorte!!!


Responder

22/12/2005

Chip_set

Ai agora funcionou, poxa iniciante da trabalho né rsrsrsrs gente valeu mesmo eu ja estava pra ficar doido hahahaha. Agora tudo clareou. valeu!!!!



Responder

22/12/2005

Martins

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.


Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira