![]() |
[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. |
Re: [SQL]: SyntaxProbs
Das würde so auf jeden Falle klappen (du musst höchtens noch Prameter.Value durch irgendwas erstezen, dass die ZEOS verwenden):
Delphi-Quellcode:
With DeineQuery Do
Begin SQL.Text := 'SELECT *' + #10 + 'FROM Buecher' + #10 + 'WHERE Titel Like :WTitel And' + #10 + ' Verlag Like :WVerlag And' + #10 + ' Bestellnr Like :WBestellnr And' + #10 + ' Preis = :WPreis'; // Parameterzuweisung With Parameters Do ParamByName('WTitel').Value := WTitel; ParamByName('WVerlag').Value := WVerlag; ParamByName('WBestellnr').Value := WBestellnr; ParamByName('WPreis').Value := WPreis; End; // Ausführen Open; End; |
Re: [SQL]: SyntaxProbs
Jo, thx. Ein Problem bleibt noch: Die while-Schleife wird nur einmal durchlaufen, anstatt 3mal.
Was soll das?
Delphi-Quellcode:
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; |
Re: [SQL]: SyntaxProbs
Bist Du sicher das auch drei Einträge zurück gegeben werden?
Prüfe das mal durch ein einfaches:
Delphi-Quellcode:
begin
//Die Abfrage Open; ShowMessage ('Es wurden ' + IntToStr (ZQuery1.RecordCount) + ' Einträge gefunden'); 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; |
Re: [SQL]: SyntaxProbs
Nein, es wird nur ein Ergebnis zurückgegeben.
Aber PHPMyAdmin bestätigt mir, dass 3 Einträge vorhanden sind... |
Re: [SQL]: SyntaxProbs
Zitat:
Poste mal deine Aktuelle Procedure und die Feld-Definition der Tabelle. |
Re: [SQL]: SyntaxProbs
Delphi-Quellcode:
Aufruf:
procedure TMainForm.LoadTitleList(WTitel, WVerlag, WBestellnr, WPreis:string);
begin With ZQuery1 Do Begin SQL.Text := 'SELECT *' + #10 + 'FROM Buecher' + #10 + 'WHERE Titel Like :WTitel And' + #10 + ' Verlag Like :WVerlag And' + #10 + ' Bestellnr Like :WBestellnr And' + #10 + ' Preis = :WPreis'; // Parameterzuweisung ParamByName('WTitel').Value := WTitel; ParamByName('WVerlag').Value := WVerlag; ParamByName('WBestellnr').Value := WBestellnr; ParamByName('WPreis').Value := WPreis; Open; ShowMessage ('Es wurden ' + IntToStr (ZQuery1.RecordCount) + ' Einträge gefunden'); End; 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('%','%','%','%'); Könnte es damit zusammenhängen, dass der Preis FLOAT ist und nicht mit einem % aufgerufen werden kann. Ich habe nämlich einen Datensatz, der bei Preis null hat... |
Re: [SQL]: SyntaxProbs
Zitat:
Entweder wird genau nach einem Preis gesucht oder Du machst es mit zwei Variablen und einer BETWEEN abfrage. |
Re: [SQL]: SyntaxProbs
Gut, dann lasse ich den Preis vorläufig mal raus...
Jedenfalls lautet die SQL-Abfrage jetzt so:
Delphi-Quellcode:
Und es gibt 'ne exception. (Also jetzt nicht beim compilieren, sondern zur Laufzeit). Wieso?
SQL.Text :=
'SELECT *' + #10 + 'FROM Buecher' + #10 + 'WHERE Titel Like :WTitel And' + #10 + ' Verlag Like :WVerlag And' + #10 + ' Bestellnr Like :WBestellnr And'; |
Re: [SQL]: SyntaxProbs
Zitat:
|
Re: [SQL]: SyntaxProbs
Zitat:
|
Re: [SQL]: SyntaxProbs
DANKE EUCH ALLEN!!!!!!!!!!!
Gut, dass ich euch habe! Sonst wäre ich hoffnungslos verloren! |
Re: [SQL]: SyntaxProbs
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13: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-2025 by Thomas Breitkreuz