Witam!
MAM DOSYĆ! Obleciałem całe te 4p forum i znalazłem 8 stron z wyszukiwaniem w dbgridzie jakiejś wartości, ale niczego nie znalazłem co potrzebuję!!!
Mam na formie DBGrid, Tdatasource, TTable. Jest też przygotowany plik telefony.dbf (kolumny: Nazwisko, Telefony) w dBASEIV, którego odczytuję w DBGridzie. Próbowałem już wszystkiego i dalej nie potrafię zrobić wyszukiwania po Nazwisku.
Czy ktoś ma napisaną procedurę do tego? Nie wskazówek opisowaych bo czytałem je dziś pół dnia, takie mizerne że głowa boli. Potrzebuję gotowy kod do szukania w kolumnie Nazwisko. :( Czy w Table1 trzeba coś ustawiać w Indexach?
Prosze o kodzik (bo już tylko on mnie ratuje) do wyszukiwania wartości jakiejś w zadanej kolumnie :(
p.s. nieraz mi wyskakuje błąd że Table1 is busy. No, ale mi się wydaje że ona tylko w Delphi jest używana a nie poza kompilatorem jeszcze. O co w tym chodzi?
ZA WSZYSTKIE ODPOWIEDZI Z GÓRY BARDZO DZIĘKUJĘ!! :)
0
0
Na pewno nie probowales wszystkiego, bo da sie to zrobic na kilka(nascie?) sposobow.
- Filtrowanie TTable.
- Zapytanie w TQuery z operatorem like.
- Wlasna obsuga zdarzen OnKeyDown w DBGridzie - QuickSearch.
- Locate na TTable.
- Lookup na TTable.
0
Można to zrobić na wiele sposobów (jak napisał hamster(TM)).
Poniżej masz dwa przykładziki "z życia wzięte":
Tabela - katalog książek.
Pola: AUTOR, TYTUL, WYDANIE, WYDAWNICTWO....
Szukamy książek, których autorem jest Leitner Roman.
procedure TForm1.Button1Click(Sender: TObject);
begin
if Table1.Locate('Autor', 'Leitner Roman', [loCaseInsensitive, loPartialKey]) then
ShowMessage(Table1.FieldByName('Tytul').AsString)
else
ShowMessage('Nie znaleziono !');
end;
{
Locate zatrzyma się na pierwszym rekordzie spełniającym podane warunki. Czyli, inaczej mówiąc, znajdzie tylko pierwszą książkę, której autorem jest Leitner Roman.
Jeśli istniałaby potrzeba wyszukania wszystkich książek danego autora, zamiast Locate można zastosować funkcję Lookup, która zwraca tabelę variantów (variant array) (szczegóły w Helpie).
}
procedure TForm1.Button2Click(Sender: TObject);
var
rno: integer;
s: string;
begin
rno := Table1.RecNo;
Table1.DisableControls;
try
s := '';
with Table1 do
begin
First;
while not Eof do
begin
if Pos('Leitner Roman', FieldByName('Autor').AsString) > 0 then
s := s + FieldByName('Tytul').AsString + #13#10;
Next;
end;
end;
Table1.RecNo := rno;
if s = '' then
ShowMessage('Nie znaleziono !')
else
ShowMessage(s);
finally
Table1.EnableControls;
end;
end;
{
Przeszukiwanie całej tabeli. Rekord, po rekordzie.
Ta metoda daje dużo więcej możliwości, ale jest troszkę bardziej (niewiele) skomplikowana.
}