Autor Beitrag
Björn karpenstein
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 96

Windows XP, Linux
D7, K3
BeitragVerfasst: Di 13.09.05 14:01 
Hallo,

wenn ich folgendes INSERT auf die Datenbank mache:

ausblenden 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)+')');
//    ShowMessage(ADOQuery1.SQL[0]);
    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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
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
BeitragVerfasst: Di 13.09.05 14:10 
Titel: Re: Nochmal TADOQuery und ExecSQL liefert Fehler bei INSERT
Moin, Moin,

hmmmmm,

user profile iconBjörn karpenstein hat folgendes geschrieben:
Hallo,

wenn ich folgendes INSERT auf die Datenbank mache:

ausblenden 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)+')');
//    ShowMessage(ADOQuery1.SQL[0]);
    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:

ausblenden 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 :lol:

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 96

Windows XP, Linux
D7, K3
BeitragVerfasst: 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?

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 96

Windows XP, Linux
D7, K3
BeitragVerfasst: Di 13.09.05 14:27 
Okay hab mich ein bissel dumm angestellt viele dank!

So gehts:

ausblenden 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;