Hi,
also bei mir hat es folgendermaßen funktioniert.
1) Erstelle eine Query und verbinde sie mit deinem Connector mit der Access-Datenbank
2) Füge im Wide-String-Listen-Editor folgende SQL-Anweisung ein:
SELECT name_der_tabelle.Firma, name_der_tabelle.Feld2, ......usw (je nachdem welche Felder du in deinem Grid darstellen willst)
FROM name_der_tabelle
WHERE (((name_der_tabelle.Firma)
LIKE (:searchname)))
GROUP BY patientenstamm.Firma;
searchname gibst du in die Eigenschaft Parameters ein.
3) Erstelle eine DataSource und verbinde sie mit der Query und verbinde dein DataGrid mit der DataSource
4) Schreibe folgende Anweisung für das OnChange-Ereignis: (Ich habe es allerdings einem Button-Click-Ereignis zugeordnet
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TLagermain.suchelieferEditChange(Sender: TObject); var SearchOptions: TLocateOptions; suche: string; begin SearchOptions := [loPartialKey]; suche := suchelieferedit.Text; if Dein_Datenmodul.name_der_tabelle.Locate('Firma', suche, SearchOptions) = true then begin Dein_Datenmodul.name_deiner_query.Close; Dein_Datenmodul.name_deiner_query.Parameters.Items[0].Value := suche + '%'; Dein_Datenmodul.name_deiner_query.Open; end; if not Datenmodul.name_der_tabelle.Locate('Firma', SearchValue, SearchOptions) = true then begin Datenmodul.name_deiner_query.Close; Dein_Grid.Refresh; end; end; |
Ein paar Erklärungen dazu. Ich habe die Methode Locate vorgeschaltet, da der Filterstring in der Tabelle vorhanden sein muss. Gibst du ein X in das Suchfeld ein, und es beginnt in deiner Datenbank keine Firma mit X, gibt es eine Exception, wenn es direkt in den Filter eingetragen wird. Da Locate aber nur auf den ersten Datensatz der Übereinstimmung positioniert, reicht dies nicht aus (Wichtig sind die SearchOptions, damit auch Teilstrings gesucht werden).
Gibst du nun ein A ein und es werden Datensätze gefunden, die mit A beginnen, dann wird der Inhalt deines Suchfeldes als Parameter in die Query eingetragen. Natürlich plus Wildcard %. Du kannst zwar in Access selbst auch als Wildcard * verwenden. Bei Zugriffen über ADO ist aber nur das %-Zeichen erlaubt. Ja und dann muss nur noch die Query geöffnet werden. Das mit der dazugehörigen DataSource verbundene Grid zeigt dann alle Datensätze an, die dem Filterkriterium entsprechen. Du musst nur beachten, dass dann auch jedesmal der Datensatzzeiger deiner Firmentabelle bewegt wird.
Wird gar nichts gefunden, bleibt die Query zu oder wird geschlossen und das Datengitter geleert.
Ich hoffe, ich habe keine Fehler gemacht und konnte dir helfen.