Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi [SQL]: SyntaxProbs (https://www.delphipraxis.net/21726-%5Bsql%5D-syntaxprobs.html)

yankee 7. Mai 2004 09:06


[SQL]: SyntaxProbs
 
Ich habe die Fogende Abfrage an 'nem MySQL-Server:
Delphi-Quellcode:
ZQuery1.SQL.Text :='SELECT * FROM buecher WHERE `Titel`=''' +WTitel+ ''' `Verlag`=''' +WVerlag+ ''' `Bestellnr`=''' +WBestellnr+ ''' `Preis`=''' +WPreis+ '';
Bloß funzt es nicht. Kurze Erklärung:
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?

sakura 7. Mai 2004 09:12

Re: [SQL]: SyntaxProbs
 
Ich täte es so tun:

Delphi-Quellcode:
ZQuery1.SQL.Text :='SELECT * FROM buecher WHERE [Titel]=' + QuotedStr(WTitel) + ' [Verlag]=' + QuotedStr(WVerlag) + ' [Bestellnr]=' + QuotedStr(WBestellnr) + ' [Preis]=' + QuotedStr(WPreis);
...:cat:...

yankee 7. Mai 2004 09:22

Re: [SQL]: SyntaxProbs
 
Ich habe den Text aus deinem Beitrag sogar go copy&pasted, aber der Syntaxfehler bleibt gleich.

shmia 7. Mai 2004 09:23

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:

sakura 7. Mai 2004 09:30

Re: [SQL]: SyntaxProbs
 
Zitat:

Zitat von shmia
AND zwischen die Vergleiche in der Where-Bedingung einfügen. :mrgreen: :mrgreen:

:lol: Ja, den Teil habe ich gar nicht realisiert :oops:

...:cat:...

Sharky 7. Mai 2004 09:38

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;

yankee 7. Mai 2004 09:51

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:
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;
Ich rufe die Procedure dann noch mit
LoadTitleList('%','%','%','%');
auf.

Sharky 7. Mai 2004 09:52

Re: [SQL]: SyntaxProbs
 
Ähm....

Wo ist in dem Code das ParamByName???

yankee 7. Mai 2004 09:59

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

Sharky 7. Mai 2004 10:07

Re: [SQL]: SyntaxProbs
 
Zitat:

Zitat von yankee
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...)

Dann ein einfaches Beispiel :stupid:

Delphi-Quellcode:
begin
  with Query1 do
  begin
    Close;
    SQL.Text := 'SELECT * FROM tabelle WHERE name = :myParameter';
    ParamByName ('myParameter').AsString := 'Sharky';
    Open;
  end;
end;
:myParameter ist ein Parameter in der SQL-Anweisung. Diesem muss jetzt mit der Funktion ParamByName ein Wert zugewiesen werden.

Beim DB-Server kommt dann folgender SQL-Befehl an:
SQL-Code:
SELECT * FROM tabelle WHERE name = 'Sharky'
Der Vorteil ist:
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 08:20 Uhr.
Seite 1 von 3  1 23      

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