[Delphi]_Przeszukiwanie baz danych

0

Mam w programie wczytaną bazę danych o klientach (imię,nazwisko,adres,kod_pocztowy itd), baza widnieje w dbgridzie i chodzi o to żeby poprzez odpowiednie rozwijane listy (chyba dbcombobox), przypisane do odpowiednich kolumn (imię,nazwisko ...) można było tak tego dbgrida edytować że po wyborze w liście rozwijanej imienia np. Paweł na liście zostaną dane dotyczące tylko pawła (których jest kilku), następnie po wyborze nazwiska np. Kowalski na dbgridzie zostaną tylko Pawłowie Kowalscy, potem z listy rozwijanej wybieramy ulice np. Powstańców i już zostanie na dbgridzie tylko ten Paweł Kowalski z ulicy Powstańców.

Szukam rozwiązanie tego problemu już parę godzin i nic nie mogę znaleźć, więc bardzo proszę o pomoc w miarę szybką.

0

a w czym tu problem? :)

najpierw zbudowac warunek w zaleznosci od wartosci pol..

  F := '';

  if DBComboBox1.Text <> '' then
    F := F + 'imie='+DBComboBox1.Text;

  if DBComboBox2.Text <> '' then begin
    if F <> '' then
      F := F + ' and ';
    F := F + 'nazwisko='+DBComboBox2.Text;
  end;

a potem zastosowac to na gridzie ..

np. przez wlasciwosc filter..

  DBGrid1.DataSource.DataSet.Filter := F;
  DBGrid1.DataSource.DataSet.Filtered := True;

albo przez modyfikacje zapytania do bazy jezeli to jakis komponent Query

powodzenia ;)

0

Takie filtrowanie działa jeśli dane są wczytane do bufora ClientDataSet, ale rzadko kiedy wczytuje się do niego cała tabelę, więc to by nie wyszukało prawie nic. Zdecydowanie lepiej jest złożyć zapytanie SQL filtrujące bazę (na te wszystkie warunki) w klauzuli "where". Dobrze jest dodatkowo ograniczyć maksymalną liczbę zwracanych rekordów, co się robi różnie w różnych bazach danych, bo jest to poza standardem SQL.

0

radio mógłbyś to troszkę dokładniej opisać?

0

"where" to jest część zapytania do bazy SQL i w tej części wypisujesz te wszystkie warunki ograniczające. W tym wypadku chyba najlepiej będzie złożyć to zapytanie programowo jako string i potem wysłać do serwera. Do łączenia z tymi bazami i wydawania zapytań stosuje się różne biblioteki jak DBExpress, IBExpress i tak dalej. Jeśli chodzi o ograniczenie liczby wierszy to przykładowo w interbase na końcu zapytania wpisujemy na przykład "rows 1 to 10" czyli zwróconych zostaje pierwsze dziesięć wierszy. Przy ograniczeniu maksymalnej liczby wyświetlonych wierszy można wydać osobno drugie zapytanie "select count" z tymi samymi warunkami bez ograniczania liczby wierszy i ono policzy ile faktycznie jest wierszy.

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