![]() |
[SQL]: SyntaxProbs
Ich habe die Fogende Abfrage an 'nem MySQL-Server:
Delphi-Quellcode:
Bloß funzt es nicht. Kurze Erklärung:
ZQuery1.SQL.Text :='SELECT * FROM buecher WHERE `Titel`=''' +WTitel+ ''' `Verlag`=''' +WVerlag+ ''' `Bestellnr`=''' +WBestellnr+ ''' `Preis`=''' +WPreis+ '';
WTitel, WVerlag usw. Sind Variabeln. In meinem Beispiel habe ich einfach ein * drin. Ich habe es auch schon mit einem % versucht... Was ist daran falsch? |
Re: [SQL]: SyntaxProbs
Ich täte es so tun:
Delphi-Quellcode:
...:cat:...
ZQuery1.SQL.Text :='SELECT * FROM buecher WHERE [Titel]=' + QuotedStr(WTitel) + ' [Verlag]=' + QuotedStr(WVerlag) + ' [Bestellnr]=' + QuotedStr(WBestellnr) + ' [Preis]=' + QuotedStr(WPreis);
|
Re: [SQL]: SyntaxProbs
Ich habe den Text aus deinem Beitrag sogar go copy&pasted, aber der Syntaxfehler bleibt gleich.
|
Re: [SQL]: SyntaxProbs
Also ich würde es auch so wie Sakura machen; aber zusätzlich noch ein
AND zwischen die Vergleiche in der Where-Bedingung einfügen. :mrgreen: :mrgreen: |
Re: [SQL]: SyntaxProbs
Zitat:
...:cat:... |
Re: [SQL]: SyntaxProbs
Hai yankee,
ich kann nur einen Tip geben;-) baue deine SQL-Strings anders auf :stupid: Hier einmal ein Beispiel wie ich es in diesem Fall machen würde:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin with ZQuery1 do begin Close; SQL.Text := 'SELECT * FROM buecher ' + #10 + 'WHERE (Titel LIKE :WTitel)' +#10+ 'AND (Verlag LIKE :WVerlag)' +#10+ 'AND (Bestellnr LIKE :WBestellnr)' +#10+ 'AND (Preis = :WPreis)'; // Ein * in dem Suchtext wird durch den SQL-Wildcart '%' ersetzt ParamByName ('WTitel').AsString := StringReplace(WTitel,'*','%',[rfReplaceAll]); ParamByName ('WVerlag').AsString := StringReplace(WVerlag,'*','%',[rfReplaceAll]); ParamByName ('WBestellnr').AsString := StringReplace(WBestellnr,'*','%',[rfReplaceAll]); ParamByName ('WPreis').AsString := StringReplace(WPreis,'*','%',[rfReplaceAll]); Open; end; end; |
Re: [SQL]: SyntaxProbs
das bringt mich weiter, thx.
Aber in Problem bleibt: Es kommt zwar keine Fehlermeldung mehr, aber es passiert dafür auch grundsätzlich nicht. Mal die komplette Procedure:
Delphi-Quellcode:
Ich rufe die Procedure dann noch mit
procedure TMainForm.LoadTitleList(WTitel, WVerlag, WBestellnr, WPreis:string);
begin ZQuery1.SQL.Text :='SELECT * FROM buecher ' + #10 + 'WHERE (Titel LIKE :WTitel)' +#10+ 'AND (Verlag LIKE :WVerlag)' +#10+ 'AND (Bestellnr LIKE :WBestellnr)' +#10+ 'AND (Preis = :WPreis)'; ZQuery1.Open; while not ZQuery1.Eof do begin TitelComboBox.Items.Add(ZQuery1.FieldByName('Titel').AsString); VerlagComboBox.Items.Add(ZQuery1.FieldByName('Verlag').AsString); BestellnrComboBox.Items.Add(ZQuery1.FieldByName('Bestellnr').AsString); PreisComboBox.Items.Add(ZQuery1.FieldByName('Preis').AsString); ZQuery1.Next; end; end; LoadTitleList('%','%','%','%'); auf. |
Re: [SQL]: SyntaxProbs
Ähm....
Wo ist in dem Code das ParamByName??? |
Re: [SQL]: SyntaxProbs
Den Befehl kannte ich bis jetzt nicht. Ich habe mal in der OH nachgesehen, aber daraus werde ich nicht schlau (zumal die auf Englisch ist...)
|
Re: [SQL]: SyntaxProbs
Zitat:
Delphi-Quellcode:
:myParameter ist ein Parameter in der SQL-Anweisung. Diesem muss jetzt mit der Funktion ParamByName ein Wert zugewiesen werden.
begin
with Query1 do begin Close; SQL.Text := 'SELECT * FROM tabelle WHERE name = :myParameter'; ParamByName ('myParameter').AsString := 'Sharky'; Open; end; end; Beim DB-Server kommt dann folgender SQL-Befehl an:
SQL-Code:
Der Vorteil ist:
SELECT * FROM tabelle WHERE name = 'Sharky'
a) Der Quellcode ist übersichtlicher b) Du brauchst dich nicht um die richtige "Formatierung" zu kümmern, das sollte der Treiber machen. (z.B. Das Richtige Datumsformat, Text in Hochkommas setzen usw. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:02 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-2025 by Thomas Breitkreuz