Pa OK, ako ti je to preglednije radi tako... Ja sam iz prvog posta zakljucio da tebi ne odgovara da ti DBGrid ostane prazan ako nema lica koje je trazeno, pa sam ti zato napisao ovako kako sam napisao
. Moras malo jasnije da opisujes problem
.
Eto, tebi onda treba ovo ako sam opet dobro razumeo ( ako bas hoces preko filtera da radis ):
Code:
if Edit1.Text <> '' then
ADOQuery1.Filter:= 'WHERE IME LIKE ' + QuotedStr(Edit1.Text + '%') + ';';
ADOQuery1.Filtered:= True;
Mada je meni ovo bez veze
... Pa i sam si napisao u nekoliko postova gore ovaj kod:
Code:
.....
else
filter:='';
ADOQuery.Close;
ADOQuery.SQL.Clear;
ADOQuery.SQL.Add('SELECT * FROM CLANOVI');
if Edit1.Text<>'' then
if filter='' then
filter:='WHERE SIFRA LIKE ''' + Edit1.Text + '%'' '
else
filter:='WHERE SIFRA LIKE ''' + Edit1.Text + '%'' ';
ADOQuery.SQL.Add(filter);
ADOQuery.Open;
A to ti nije nista drugo do
Code:
ADOQuery1.SQL.Add('SELECT * FROM CLANOVI WHERE SIFRA LIKE '+QuotedStr(Edit1.Text + '%')+';');
Tako da tu nisi uradio nista sa samim filterom nego si samo poslao novi SQL upit bazi, a to ce ti nepotrebno opteretiti bazu posto podatke vec imas u njoj i mozes jednostavno da ih pretrazis sa Locate. Ovako samo imas jedan upit vise...
I na kraju ako bas hoces da ti se selektuju samo oni rekordi koji odgovaraju pretrazi onda ti treba ovako nesto:
Code:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = VK_RETURN) and (Edit1.Text <> '') then
begin
if not ADOQuery.Locate('SIFRA', Edit1.Text, [loPartialKey]) then
begin
ShowMessage('Nema Lica!');
Edit1.Clear;
Edit1.SetFocus;
end
else
begin
ADOQuery1.Close;
ADOQUery1.SQL.Clear;
ADOQUery1.SQL.Add('SELECT * FROM CLANOVI WHERE SIFRA LIKE '+QuotedStr(Edit1.Text + '%')+';');
ADOQuery1.Open;
end;
end;
end;
Vrlo verovatno sam napravio koju gresku u kodu posto sam tek ustao, tako da jos ne razmisljam bistro
.
[Ovu poruku je menjao Strog dana 21.06.2006. u 09:53 GMT+1]