![]() |
Datenbank: Access • Version: 2003 • Zugriff über: ADO- Komponenten
zugriff auf Access DB -> Fehler
Hi Leute,
ich habe folgendes Coding:
Delphi-Quellcode:
Beim Execute löst er eine EOleException aus: 'Syntaxfehler in der INSERT INTO-Anweisung'...
SCRIPT_TAB : String = 'ScriptParts';
... with ADOCommand do begin with Parameters.AddParameter do begin Name := 'Transaction'; DataType := ftString; Value := TA; end; with Parameters.AddParameter do begin Name := 'PosInScript'; DataType := ftString; Value := PosInScript; end; with Parameters.AddParameter do begin Name := 'Script'; DataType := ftString; Value := Script; end; with Parameters.AddParameter do begin Name := 'PosToChange'; DataType := ftString; Value := PosToChange; end; with Parameters.AddParameter do begin Name := 'DataChange'; DataType := ftString; Value := DataChange; end; CommandText := 'INSERT INTO '+SCRIPT_TAB+ ' (Transaction, PosInScript, Script, PosToChange, DataChange)'+ ' VALUES (:Transaction, :PosInScript, :Script, :PosToChange, :DataChange)'; CommandType := cmdText; try Execute; Sieht irgendjemand den Fehler? :shock: |
Re: zugriff auf Access DB -> Fehler
Meines Achtens liegt es an der Reihenfolge, wie du die Befehle ausführst. Probier doch mal erst den CommandText zu setzen, und dann die Parameter zu definieren.
|
Re: zugriff auf Access DB -> Fehler
Hmmm, dann kommt die Fehlermeldung ein Parameter sei nicht korrekt gefüllt...
|
Re: zugriff auf Access DB -> Fehler
Dann weiss ich auch nicht weiter. Aber vielleicht kommt noch Folgendes in Betracht:
1. Ist vielleicht ein String größer als die Länge des Felder in Access 2. Auch wenn ADOCommand verwendet werden soll, kannst du ja mal dein Glück mit ADOQuery probieren. Mehr fällt mir nicht ein. |
Re: zugriff auf Access DB -> Fehler
Guten Morgen!
Ich sehe das Problem auch nicht wirklich ... aber trotzdem vier Hinweise. 1.) CommandText muß vorher gesetzt sein, wenn ParamCheck auf true steht, weil sonst durch das setzen des Statements die Parameter wieder verloren gehen. 2.) Ich hatte in der Vergangenheit (Delphi 5) Probleme, wenn die Parameter genauso heißen wie die Felder. Ob das noch ein Problem ist weiß ich nicht ... 3.) Der Parametername "Transaction" stört mich. Hier könnte es eventuell Kollisionen mit irgendwelchen Schlüsselwörtern geben. 4.) Hinter SchriftTab müßte ein Leerzeichen kommen, weil sonst das Statement wie folgt aussieht: "ScriptParts(Transaction" Viel Erfolg. Niels |
Re: zugriff auf Access DB -> Fehler
Hast Du das SQL in Access schon mal getestet? Evtl. enthält es ja ein reserviertes Wort?
|
Re: zugriff auf Access DB -> Fehler
Scheibenkleister, ich glaube ich habe den Fehler. Auch auf die Gefahr hin, dass Ihr mich hinterher Teeren und Federn wollt/müßt (viel Spaß in Kassel): der Parameter Scripts wird aus einem Memo gefüllt. Und anscheinend hat der Probleme mit irgendwelchen Zeichen dort drin. Dies steht z.B. in dem im fertigen SQL.Text:
SQL-Code:
Liegt daran, oder? Tschuldigung an alle, die sich Gedanken gemacht haben :oops:
'INSERT INTO ScriptParts (TAN, PIS, Script) VALUES ("",1,"If Not IsObject(application) Then'#$D#$A' Set SapGuiAuto = GetObject("SAPGUI")'#$D#$A' Set application = SapGuiAuto.GetScriptingEngine'#$D#$A'End If");'#$D#$A
Jetzt muß ich mal herausfinden, wie ich das in mein Datenbank-Memofeld bekomme... |
Re: zugriff auf Access DB -> Fehler
Zitat:
|
Re: zugriff auf Access DB -> Fehler
Hallo,
Memo-Felder werden bei Verwendung von ADO genau so wie alle anderen Zeichenketten-Felder behandelt - jedenfalls bei Access und MS-SQl (nur Oracle geht seinen eigenen Weg, da muss man die Daten in kleinen Blöcken transportieren *grummel*). Parameter.DataType := ftString und die Zuweisung an Parameter.Value sollten also richtig sein. Die #$D#$A (Zeilenumbruch) sollten auch nicht stören, weder im Statement noch bei Werten. Nach der Zuweisung von CommandText an ADOCommand sind die Parameter möglicherweise bereits initialisiert, dann Parameters.ParamByName statt Parameters.AddParameter verwenden. Gruß Christoph ...der sich gerade über den OLE-DB/ADO-Treiber von Oracle ärgert... |
Re: zugriff auf Access DB -> Fehler
So, es ist geschafft. Folgendes habe ich verändert. EinTDBMemo genommen und die " gegen ' ausgetauscht. Da muß man erst mal drauf kommen:
Delphi-Quellcode:
Nur das mit dem Blob habe ich noch nicht so richtig verstanden. Da werde ich bestimmt noch einmal mit Fragen kommen. Die Feldnamen ahbe ich auch noch verändert, wobei ich bemerken muß, das es an Transaction nicht lag. Letztendlich glaube ich, das es an den " lag, da die innerhalb des Strings ebenfalls vorkommen. Und ich schätze, das bringt ihn durcheinander, oder?
SQL.Text := 'INSERT INTO '+SCRIPT_TAB+' (TAN, PIS, PTC, Script, DataChng) VALUES ('''
+TA+''','+PosInScript+','+PosToChange+','''+ScriptPart+''','''+DataChange+''');'; [edit] Nein, es war nicht nur das Hochkomma, sondern die Tatsache, dass ich sowohl Hochkamma als auch TDBMemo genommen habe. Jetzt geht aber eine andere Sache nicht mehr, die mit dem normalen Memo ging. :| Ich löse das jetzt erst mal anders... [/edit] Danke an alle, cu in Kassel! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz