![]() |
SQL Abfrage: 2 Wörter in 2 Suchbegriffe wandeln
Hallo,
ich habe ein Programm geschrieben bei dem ich eine MySQL Datenbank abfrage. Bei einem Begriff (wie einem Vornamen) klappt es, wenn ich jetzt aber sowohl Vorname und Nachname in die Suche eingebe, findet das Programm nichts, weil es in der SQL Tabelle sowohl eine Spalte für Vorname als auch Nachname gibt. Gibt es eine Möglichkeit, das zu ändern? Das heißt, dass ich theoretisch 10 Wörter eingeben kann und alle Ergebnisse auf die alle 10 Vorgaben zutreffen (auch wenn es unterschiedliche Spalten sind) ausgegeben werden. Danke Thomas |
Re: SQL Abfrage: 2 Wörter in 2 Suchbegriffe wandeln
SQL-Code:
So? Dann müsstest Du den String halt gemäß Deinen Infos zusammenbauen.
SELECT * FROM users
WHERE (vorname LIKE "petra") AND (nachname LIKE "krautwickel") AND (wohnort LIKE "hamburg") |
Re: SQL Abfrage: 2 Wörter in 2 Suchbegriffe wandeln
TQuery auf Form (oder TADOQuery o.ä.), dessen SQL-Eigenschaft folgende Abfrage enthält:
SQL-Code:
Mit folgendem Code kannst Du Dir die Suche komfortabler machen:
SELECT *
FROM user WHERE ( vorname like :vorname OR :vorname IS NULL) AND ( name like :name OR :name IS NULL) AND ( plz = :plz OR :plz IS NULL) AND ( geburtstag = :geburtstag OR :geburtstag IS NULL) Such-Edits auf das Form für jedes durchsuchbare Feld und einen Suchen-Button, dessen Onclick auf "SuchenClick" verweist.
Delphi-Quellcode:
Nun kannst Du ein und die selbe Query für verschiedene Varianten benutzen (1-x Suchworte). Du mußt nur noch dafür sorgen, das der Suchen-Button nur "Enabled" ist, wenn mindestens ein Suchkriterium angegeben wurde (ein Suchedit.Text <> ''), wenn Du nicht auch die Möglichkeit haben möchtest, alle Datensätze anzuzeigen.
Procedure TForm1.SuchenClick(Sender: TObject);
begin DeineQuery.DisableControls; // damit der Suchvorgang nicht in den // DataAwareControls auf Form sichtbar wird if DeineQuery.Active then DeineQuery.Close; DeineQuery.Prepare; if EditVorname.Text = '' then DeineQuery.ParamByName('vorname').Clear // wenn kein Suchbegriff in SuchEdit // dann Parameter auf NULL setzen else DeineQuery.ParamByName('vorname').AsString := '''%'+EditVorname.Text+'%'''; if EditName.Text = '' then DeineQuery.ParamByName('name').Clear else DeineQuery.ParamByName('name').AsString := '''%'+EditNorname.Text+'%'''; if EditPLZ.Text = '' then DeineQuery.ParamByName('plz').Clear else DeineQuery.ParamByName('plz').AsInteger := StrToInt(EditPlz.Text); if EditGeburtstag.Text = '' then DeineQuery.ParamByName('geburtstag').Clear else DeineQuery.ParamByName('geburtstag').AsDateTime := StrToDate(EditGeburtstag.Text); DeineQuery.Open; DeineQuery.EnableControls; // Anzeige in Form wieder aktivieren end; Gruß |
Re: SQL Abfrage: 2 Wörter in 2 Suchbegriffe wandeln
und dann würde ich noch case benutzen. 8) Der Übersichtlichkeit wegen.
|
Re: SQL Abfrage: 2 Wörter in 2 Suchbegriffe wandeln
im SQL-Statement kein case, weil MySQL AFAIK kein Case unterstützt, im Delphi-Code kein case, da case immer nur einen "Ast" ausführt - es sollen aber alle parameter entweder "genullt" oder gesetzt werden.
Gruß |
Re: SQL Abfrage: 2 Wörter in 2 Suchbegriffe wandeln
Da sind wohl ein paar Semikolon zuviel...
Ob das AsInteger := Date wirklich immer funktioniert, ... hmmm :gruebel: . Zum Beispiel werden in Oracle Datumsfelder nicht als fortlaufende Zahl, sondern in mehreren Bytes gespeichert. Ich werd's gleich mal testen... |
Re: SQL Abfrage: 2 Wörter in 2 Suchbegriffe wandeln
War wohl doch schon ein bisserl spät Gestern :oops:.
Hab's editiert - sollte nun so gehen. Gruß |
Re: SQL Abfrage: 2 Wörter in 2 Suchbegriffe wandeln
Es gibt auch "Query.Parameters.Clear" danach ein "Prepared := True;" und du kannst die Werte ohne Altlasten vergeben.
|
Re: SQL Abfrage: 2 Wörter in 2 Suchbegriffe wandeln
@ Daniel und Leuselator
Beide Codes funktionieren leider nicht. Das Programm wird zwar compilt aber es kommt (egal was man sucht) kein Ergebnis. Auch ein SQL-Fehler tritt nicht auf. Gruß Thomas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz