Autor Beitrag
Stocki1990
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Fr 26.02.10 22:41 
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.
ausblenden 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']);

{  if not ADOQuery1.FieldValues['RDatum'].IsNull and (ADOQuery1.FieldValues['RDatum'] <> '') then
  LI.SubItems.Add(ADOQuery1.FieldValues['RDatum']);}


   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:

ausblenden 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


Zuletzt bearbeitet von Stocki1990 am Fr 26.02.10 22:54, insgesamt 2-mal bearbeitet
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Fr 26.02.10 22:48 
user profile iconStocki1990 hat folgendes geschrieben Zum zitierten Posting springen:
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.

_________________
PROGRAMMER: A device for converting coffee into software.
Stocki1990 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Fr 26.02.10 22:59 
user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconStocki1990 hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Stocki1990 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Sa 27.02.10 02:00 
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
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:

ausblenden SQL-Anweisung
1:
ADOQuery1.SQL.Add('SELECT * From LieferscheinDetail WHERE Lieferschein = "' +  lv_auftrag.Selected.Caption +'" ');					


Ihr seid echt die Besten :)

Grüße Christoph
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Sa 27.02.10 02:35 
Schön geht trotzdem anders.. deswegen: such nach Params und Prepare!

_________________
PROGRAMMER: A device for converting coffee into software.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Sa 27.02.10 04:11 
user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
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.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.