Autor |
Beitrag |
Björn karpenstein
      
Beiträge: 96
Windows XP, Linux
D7, K3
|
Verfasst: Di 13.09.05 14:01
Hallo,
wenn ich folgendes INSERT auf die Datenbank mache:
Delphi-Quelltext 1: 2: 3: 4:
| neueKategorie := InputBox('Name der Kategorie', 'Wie soll die neue Kategorie heissen?', 'neue Kategorie'); ADOQuery1.SQL.Add('INSERT INTO kategorie([Bezeichnung], [vorgaengerid]) VALUES ("'+PChar(neueKategorie)+'", '+IntToStr(PMyRec(TreeView1.Selected.Data)^.ID)+')'); ADOQuery1.ExecSQL; |
Erhalte ich den Fehler:
Der Name 'neue Kategorie' ist in diesem Kontext nicht zulässig. Nur Konstanten, Ausdrücke und Variablen sind zulässig. Spaltennamen sind nicht zulässig.
Die Ausgabe der SQL-Anweisung sieht normal aus:
INSERT INTO kategorie([Bezeichnung], [vorgaengerid]) VALUES ("neue Kategorie", 4)
Auch wenn ich das von Hand in das TADOQuery eingeben, erhalte ich die Fehlermeldung
Woran könnte das liegen?
|
|
jaevencooler
      
Beiträge: 166
Erhaltene Danke: 6
MS-DOS,Win32, Win95, Win 98, Me,XP, Linux, NT4.0, NT 2000-2008, Vista, Windows 7
Turbo Pascal,D1 Enter,D2 Enter,D3 Enter,D5 Enter, Kylix, D2007, PL/SQL, MS/SQL, Delphi 2010, Delphi XE
|
Verfasst: Di 13.09.05 14:10
Titel: Re: Nochmal TADOQuery und ExecSQL liefert Fehler bei INSERT
Moin, Moin,
hmmmmm,
Björn karpenstein hat folgendes geschrieben: | Hallo,
wenn ich folgendes INSERT auf die Datenbank mache:
Delphi-Quelltext 1: 2: 3: 4:
| neueKategorie := InputBox('Name der Kategorie', 'Wie soll die neue Kategorie heissen?', 'neue Kategorie'); ADOQuery1.SQL.Add('INSERT INTO kategorie([Bezeichnung], [vorgaengerid]) VALUES ("'+PChar(neueKategorie)+'", '+IntToStr(PMyRec(TreeView1.Selected.Data)^.ID)+')'); ADOQuery1.ExecSQL; |
Erhalte ich den Fehler:
Der Name 'neue Kategorie' ist in diesem Kontext nicht zulässig. Nur Konstanten, Ausdrücke und Variablen sind zulässig. Spaltennamen sind nicht zulässig.
Die Ausgabe der SQL-Anweisung sieht normal aus:
INSERT INTO kategorie([Bezeichnung], [vorgaengerid]) VALUES ("neue Kategorie", 4)
Auch wenn ich das von Hand in das TADOQuery eingeben, erhalte ich die Fehlermeldung
Woran könnte das liegen? |
Also, das Insert Statement sollte meines Wissens nach so aus sehen:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| ADOQuery1.SQL.Add('insert into kategorie'); ADOQuery1.SQL.Add('(bezeichnung, vorgaengerid)'); ADOQuery1.SQL.Add('values (:bezeich,:vorgang)'); ADOQuery1.ParamByName('bezeich').asstring := neueKategorie; ADOQuery1.ParamByName('vorgang').asstring := IntToStr(PMyRec(TreeView1.Selected.Data)^.ID); . . . usw |
oder so ähnlich
So funktioniert es zumindestens bei mir. Ist aber natürlich abhängig von der datenbank die Du ansprichst.
Beste Grüße
Michael
_________________ Wissen ist Macht, nichts wissen macht auch nichts...
|
|
Björn karpenstein 
      
Beiträge: 96
Windows XP, Linux
D7, K3
|
Verfasst: Di 13.09.05 14:20
Hallo!
Ich benutze MS SQL Server 2005 Express (MSDE). Ich hab von ADOQuery "ParamByName" nicht gefunden, sondern nur "Parameters. Leider funktioniert die "AsString"-Methode nicht. Was muss ich da machen? Muss ich die Params vielleicht erst hinzufügen?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TFormular_Kategorien.Button2Click(Sender: TObject); var neueKategorie : String; begin if TreeView1.Selected <> nil then begin neueKategorie := InputBox('Name der Kategorie', 'Wie soll die neue Kategorie heissen?', 'neue Kategorie');
ADOQuery1.SQL.Add(' INSERT INTO kategorie'); ADOQuery1.SQL.Add('(Bezeichnung, vorgaengerid)'); ADOQuery1.SQL.Add(' VALUES (:bezeich,:vorgang);'); ADOQuery1.Parameters.ParamByName('bezeich').AsString := neueKategorie; ADOQuery1.Parameters.ParamByName('vorgang').AsString := PMyRec(TreeView1.Selected.Data)^.ID;
ADOQuery1.ExecSQL;
self.aktualisiereBaum; end else begin ShowMessage('Kein Knoten ausgewählt!'); end; end; |
|
|
Björn karpenstein 
      
Beiträge: 96
Windows XP, Linux
D7, K3
|
Verfasst: Di 13.09.05 14:27
Okay hab mich ein bissel dumm angestellt viele dank!
So gehts:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TFormular_Kategorien.Button2Click(Sender: TObject); var neueKategorie : String; begin if TreeView1.Selected <> nil then begin neueKategorie := InputBox('Name der Kategorie', 'Wie soll die neue Kategorie heissen?', 'neue Kategorie');
ADOQuery1.SQL.Add(' INSERT INTO kategorie'); ADOQuery1.SQL.Add('(Bezeichnung, vorgaengerid)'); ADOQuery1.SQL.Add(' VALUES (:bezeich,:vorgang);'); ADOQuery1.Parameters.ParamValues['bezeich'] := neueKategorie; ADOQuery1.Parameters.ParamValues['vorgang'] := PMyRec(TreeView1.Selected.Data)^.ID;
ADOQuery1.ExecSQL;
self.aktualisiereBaum; end else begin ShowMessage('Kein Knoten ausgewählt!'); end; end; |
|
|
|