Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ADO Insert Into (https://www.delphipraxis.net/109571-ado-insert-into.html)

Delphi Code Anfänger 3. Mär 2008 19:28

Datenbank: access • Zugriff über: ado

ADO Insert Into
 
Hallo,

ich habe ein kleines Problem. Ich möchte mit ADO etwas in eine Datenbank schreiben und habe dazu folgenden Code. Aber er sagt immer zu viele Parameter...

Delphi-Quellcode:
Form1.ADOQuery1.Active:=false;
Form1.ADOQuery1.Sql.Clear;
Form1.ADOQuery1.Sql.Add('INSERT INTO datenbank (Name, Name2, Name3, Name4, Name5, Name6, Name7, Name8) Values '+ QuotedStr(Edit1.Text, Edit2.Text, Edit3.Text, Edit4.Text, Edit5.Text, Memo1.Text, Memo2.Text, Memo3.Text));
Form1.ADOQuery1.Active:=true;
Woran liegt das? Was klappt nicht?

mkinzler 3. Mär 2008 19:32

Re: ADO Insert Into
 
Stand da vorher eine andere Abfrage drin?

Delphi Code Anfänger 3. Mär 2008 19:40

Re: ADO Insert Into
 
Nein. Wieso? Habe die gerade eben erst geschrieben.

mkinzler 3. Mär 2008 19:42

Re: ADO Insert Into
 
Es fehlt eine Klammer nach values

marabu 3. Mär 2008 19:43

Re: ADO Insert Into
 
Hallo,

nicht nur die Namen, auch die Werte müssen in runden Klammern angegeben werden. Die Werte müssen einzeln mit QuotedStr() behandelt werden, wenn es sich um CHAR-Typen handelt. Memo-Texte lassen sich in der Regel nicht auf diese Weise einfügen.

Freundliche Grüße

mikhal 3. Mär 2008 19:43

Re: ADO Insert Into
 
In deinem Quelltext mußt du jedes einzelne Eingabefeld in QuotedStr packen und händisch mit einem Komma trennen. Viel Aufwand und fehlerträchtig.

Benutze in deinem Fall lieber Parameter:

Delphi-Quellcode:
Form1.ADOQuery1.Sql.Add('INSERT INTO datenbank (Name, Name2, Name3, Name4, Name5, Name6, Name7, Name8) Values :P_1, :P_2, :P3, :P_4, :P_5, :P_6, :P_7, :P_8)');
AdoQuery1.Prepared := True;
AdoQuery1.Parameters.FindParam('P_1').Value := Edit1.Text;
...
AdoQuery1.Parameters.FindParam('P_8').Value := Memo3.Text;
AdoQuery1.ExecSQL;
Da du hier einen DML-Befehl verwendest, darfst du nicht Active bzw Open verwenden, sondern mußt nit ExecSQL das Statement ausführen.

Grüße
Mikhal

mkinzler 3. Mär 2008 19:45

Re: ADO Insert Into
 
Hallo Michael, leider hast du seinen Fehler der fehlenden Klanner per CP mitkopiert

mikhal 3. Mär 2008 19:50

Re: ADO Insert Into
 
:oops: Stimmt

Korrekterweise:
Delphi-Quellcode:
Form1.ADOQuery1.Sql.Add('INSERT INTO datenbank (Name, Name2, Name3, Name4, Name5, Name6, Name7, Name8) Values (:P_1, :P_2, :P_3, :P_4, :P_5, :P_6, :P_7, :P_8)');


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:22 Uhr.

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