Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Abfrage: 2 Wörter in 2 Suchbegriffe wandeln (https://www.delphipraxis.net/18654-sql-abfrage-2-woerter-2-suchbegriffe-wandeln.html)

Plague 22. Mär 2004 20:05


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

Daniel 22. Mär 2004 20:25

Re: SQL Abfrage: 2 Wörter in 2 Suchbegriffe wandeln
 
SQL-Code:
SELECT * FROM users
WHERE (vorname LIKE "petra")
AND (nachname LIKE "krautwickel")
AND (wohnort LIKE "hamburg")
So? Dann müsstest Du den String halt gemäß Deinen Infos zusammenbauen.

Leuselator 23. Mär 2004 00:38

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:
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)
Mit folgendem Code kannst Du Dir die Suche komfortabler machen:
Such-Edits auf das Form für jedes durchsuchbare Feld
und einen Suchen-Button, dessen Onclick auf "SuchenClick" verweist.
Delphi-Quellcode:
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;
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.
Gruß

Hansa 23. Mär 2004 00:49

Re: SQL Abfrage: 2 Wörter in 2 Suchbegriffe wandeln
 
und dann würde ich noch case benutzen. 8) Der Übersichtlichkeit wegen.

Leuselator 23. Mär 2004 02:01

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ß

Robert_G 23. Mär 2004 07:34

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...

Leuselator 23. Mär 2004 14:03

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ß

Robert_G 23. Mär 2004 14:08

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.

Plague 5. Apr 2004 13:13

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 02:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz