![]() |
Mehrere Suchbegriffe in einem Datensatz suchen
Ich möchte eine Suche durchführen. Das besondere daran(oder vielleicht auch nicht) ist, dass man drei Suchbegriffe eingeben kann. Also...er soll nachschauen, ob alle drei Suchbegriffe in einem Datensatz vorhanden ist. Ich habe folgenden Code von MrSpock erhalten:
Delphi-Quellcode:
SELECT * from personen
WHERE (abteilung = :abteilung) AND (reihe = :reihe) AND (nr = :nummer) Ich muss irgendwie mit den erzeugten Parametern auf ParamByName('abteilung').Value zugreifen. Vor dem Open muss ich dann alle 3 Parameter besetzen und schon bekommst ich nur die Sätze, die alle 3 Werte enthalten. Das ist das, welches ich nicht verstehe :freak: Vielen Dank nochmal an MrSpock :mrgreen: |
Hallo Flo,
da bin ich schon wieder :mrgreen: . Ziehe einmal eine TQuery Komponente auf das Formular und setze die Eigenschaft DatabaseName auf den Alias, den du auch für die Tabelle benutzt hast. Dann klicke die SQL Eigenschaft an und schreibe dort das oben gezeigte SQL Statement rein. Dabei musst du natürlich den Tabellennamen, der hinter from steht durch den echten Tabellennamen ersetzen (ohne die Endung .DB), außerdem musst du die drei Felder in der where Klausel durch die korrekten Namen der Felder der Tabelle ersetzen. Die 3 Bezeichner mit dem Doppelpunkt kannst du beliebig nennen, am besten natürlich so, dass die Bedeutung klar wird. Wenn dir das so weit nicht klar ist, dann poste einmal wie die Tabelle heißt und wie die 3 Felder, nach denen du suchen willst. |
Hallo,
ich hätte noch einen anderen Ansatz zu anzubieten, ohne der Parameterfunktion:
Delphi-Quellcode:
Damit kannst Du Variablen, Comboboxen, Edits usw. als "Parameter" für ein SQL-Statement Übergeben.
WITH Query1 DO
BEGIN Close; WITH SQL DO BEGIN Clear; Add('SELECT * '); Add('FROM Tabelle.db'); Add('WHERE Spalte1 = ' + CHR(39) + Edit1.Text + CHR(39)); Add('AND Spalte2 = ' + CHR(39) + LCB_AuftraegeFuer.Text + CHR(39)); // Lookupcombobox Add('AND TARGSTARTDATE <= ' + CHR(39) + DateToStr(DateTimePicker1.Date) + CHR(39)); END; Query1.Active := True; Open; END; END; |
Danke erst einmal für eure Antworten.
@MrSpock Soweit habe ich das hinbekommen. Aber ich weiß jetzt nicht, wie ich den Code per Buttonclick aufrufe. @APP Hab deinen Code auch mal ausprobiert, aber der klappt irgendwie nicht :cry: Hab ihn natürlich auch angepasst ! Hier ist er:
Delphi-Quellcode:
procedure TForm7.BitBtn1Click(Sender: TObject);
begin WITH Query1 DO BEGIN Close; WITH SQL DO BEGIN Clear; Add('SELECT * '); Add('FROM kosten.db'); Add('WHERE abteilung = ' + CHR(39) + Edit1.Text + CHR(39)); Add('AND reihe = ' + CHR(39) + edit2.Text + CHR(39)); // Lookupcombobox Add('AND Nr <= ' + CHR(39) + edit3.text + CHR(39)); END; Query1.Active := True; Open; END; end; |
Hallo Flo,
den abgebildeten Code fügst du in die Methode ein, die auf ein Doppelklick des OnClick Events des gewünschten Schalters erzeugt wird. Das "Open" der Query Komponente führt letztlich die Abfrage aus. Zum Code vom APP: Du solltest ihn wie folgt ändern:
Delphi-Quellcode:
WITH Query1 DO
BEGIN Close; WITH SQL DO BEGIN Clear; Add('SELECT * '); { Tabellenname ohne Punkt, sonst muss er in Anführungszeichen gestzt werden } Add('FROM kosten'); Add('WHERE abteilung = ' + CHR(39) + Edit1.Text + CHR(39)); { falls reihe und Nr Zahlenfelder sind, muss das Chr(39) weggelassen werden } Add('AND reihe = ' +edit2.Text); Add('AND Nr <= ' +edit3.text); END; Query1.Active := True; Open; END; |
Danke, aber ich bekomme folgende Fehlermeldung:
Ungültiges Schlüsselwort Symbol-String R1' and Nummer <= 1 Zeilennummer4 R1 ist die Reihe. Was sagt die Fehlermeldung aus und wie bekomme ich das Problem in den Griff? :roll: |
Hallo Flo,
wie gesagt, ob du Chr(39) um den Feldwert packen musst, hängt vom Datentyp ab. Ist "Reihe" ein Stringfeld, musst du Edit2.Text in "" übergeben, das gehtmit Chr(39)+Edit2.Text+Chr(39) oder einfacher über QuotedStr(Edit2.Text). Handelt es sich bei einem Feld um ein Numerisches Feld, muss der Wert von Editx.Text direkt benutzt werden. |
Jetzt kommt die Fehlermedlung:
'Keine Übereinstimmung der Typen im Ausdruck' :x |
Hallo Flo,
OK, dann poste doch bitte noch einmal die genaue Definition der Felder:
Mit dieser Info sollte es möglich sein, die Query klar und korrekt zu definieren. |
Ok....*such*....
in edit2 steht die abteilung, in edit2 steht die Reihe und in edit3 steht die Nummer. Abteilung = Abteilung, Reihe = Reihe, Nummer = Nummer. Abteilung und Nummer enthalten Zahlen und Buchstaben. Reihe nur Zahlen. Wenn noch was fehlt, bitte melden ! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:52 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