Entwickler-Ecke
Datenbanken - Probleme mit SQL-Code (Syntaxfehler/fehlender Operator)
Stocki1990 - Fr 26.02.10 22:41
Titel: Probleme mit SQL-Code (Syntaxfehler/fehlender Operator)
Guten Abend Leute!
Ich habe ein kleines Problem bei dem Ausführen eines SQL-Codes und bin mit
meinem Latein nun echt am Ende. Ich weiß nicht, wie man diese Hausübung am besten
lösen kann.
Ich habe eine Datenbank mit 2 Tabellen:
- Lieferscheine
- Lieferscheinedetail
In beiden Datenbanken kommt eine idente Auftragsnummer (zB 101010) vor.
Die Tabelle "Lieferscheine" wird in einem Listview ausgegeben. Die Auftragsnummer wurde als LV-Caption deklariert.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| procedure TForm1.AlleAuftrageeinlesen(); var LI : TListItem;
begin
lv_auftrag.Items.clear;
ADOQuery1.close; ADOQuery1.SQL.clear; ADOQuery1.SQL.Add('SELECT * FROM Lieferscheine'); ADOQuery1.open;
While not ADOQuery1.Eof do begin LI := lv_auftrag.items.add; LI.caption := ADOQuery1.FieldValues['Lieferschein']; LI.subitems.add(ADOQuery1.FieldValues['LSDatum']); LI.subitems.add(ADOQuery1.FieldValues['Firma']);
ADOQuery1.Next; end; adoquery1.close; end; |
Um die Details des Lieferscheines aufrufen zu können, werden die Daten der Tabelle "Lieferscheinedetail" in ein 2tes Listview eingelesen. Aufgerufen wird das 2te Listview mit "Onklick"
Der Prozedur ist folgende:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| procedure TForm1.Auftragdetailseinlesen(); var LI : TListItem; Summe : integer;
begin
lv_details.Items.clear;
ADOQuery1.close; ADOQuery1.SQL.clear; ADOQuery1.SQL.Add('SELECT * FROM Lieferscheindetails where Lieferschein =' + lv_auftrag.Selected.Caption); ADOQuery1.open;
While not ADOQuery1.Eof do begin LI := lv_details.items.add; LI.caption := ADOQuery1.FieldValues['Lieferschein']; LI.subitems.add(ADOQuery1.FieldValues['Artikel']); LI.subitems.add(ADOQuery1.FieldValues['Menge']); LI.subitems.add(ADOQuery1.FieldValues['Einheit']); LI.subitems.add(ADOQuery1.FieldValues['Bezeichnung']); LI.subitems.add(ADOQuery1.FieldValues['Preis']);
ADOQuery1.Next;
end; adoquery1.close;
end; |
Nun kommt aber jedoch die Fehlermeldung, dass es einen "Syntaxfehler (fehlender Operator) in Abfrageausdruck" gibt.
Woran könnte dies liegen ????
Ich hoffe, dass ihr mir bei meinem Problem helfen könnt und wünsche euch natürlich noch ein schönes Wochenende.
Grüße Christoph
PS: Ich kann auch Screenshots einfügen, wenn euch dabei geholfen wäre
Xentar - Fr 26.02.10 22:48
Stocki1990 hat folgendes geschrieben : |
PS: Ich kann auch Screenshots einfügen, wenn euch dabei geholfen wäre |
Oder einfach die komplette Delphi Zeile +- 5 dadrüber / drunter.
Oder auch die komplette Prozedur.
Aber: Such hier im Forum mal nach Params oder ParamByName, vielleicht hilft dir das schon weiter.
Stocki1990 - Fr 26.02.10 22:59
Xentar hat folgendes geschrieben : |
Stocki1990 hat folgendes geschrieben : | PS: Ich kann auch Screenshots einfügen, wenn euch dabei geholfen wäre |
Oder einfach die komplette Delphi Zeile +- 5 dadrüber / drunter.
Oder auch die komplette Prozedur.
Aber: Such hier im Forum mal nach Params oder ParamByName, vielleicht hilft dir das schon weiter. |
Hallo Xentar!
Danke für deine rasche Antwort :)
Habe nun die beiden Prozeduren eingefügt, um dir mein Problem genauer verdeutlichen zu können.
Grüße Christoph
BenBE - Sa 27.02.10 00:05
Bei Strings müssen Anführungszeichen um den Ausdruck mit dem nötigen Escaping. Alternativ (und zu bevorzugen) wären Prepared Statements oder Master\Client-Datenbank-Abfragen.
Stocki1990 - Sa 27.02.10 02:00
BenBE hat folgendes geschrieben : |
Bei Strings müssen Anführungszeichen um den Ausdruck mit dem nötigen Escaping. Alternativ (und zu bevorzugen) wären Prepared Statements oder Master\Client-Datenbank-Abfragen. |
Danke BenBE - Habe soeben deinen Rat befolgt und es funktioniert.
Der SQL-Code sieht nun folgendermaßen aus:
SQL-Anweisung
1:
| ADOQuery1.SQL.Add('SELECT * From LieferscheinDetail WHERE Lieferschein = "' + lv_auftrag.Selected.Caption +'" '); |
Ihr seid echt die Besten :)
Grüße Christoph
Xentar - Sa 27.02.10 02:35
Schön geht trotzdem anders.. deswegen: such nach Params und Prepare!
BenBE - Sa 27.02.10 04:11
Xentar hat folgendes geschrieben : |
Schön geht trotzdem anders.. deswegen: such nach Params und Prepare! |
Und darum würde ich den Threadstarter auch dringend bieten. Weil in der Form ist das extrem gegen Fehler anfällig. Prepared Statements sind hier Stand der Technik.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!