Wyszukiwanie w rekordach DB...

0

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

Na pewno nie probowales wszystkiego, bo da sie to zrobic na kilka(nascie?) sposobow.

  1. Filtrowanie TTable.
  2. Zapytanie w TQuery z operatorem like.
  3. Wlasna obsuga zdarzen OnKeyDown w DBGridzie - QuickSearch.
  4. Locate na TTable.
  5. 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.
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1