Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi zugriff auf Access DB -> Fehler (https://www.delphipraxis.net/41669-zugriff-auf-access-db-fehler.html)

plumper 6. Mär 2005 21:56

Datenbank: Access • Version: 2003 • Zugriff über: ADO- Komponenten

zugriff auf Access DB -> Fehler
 
Hi Leute,

ich habe folgendes Coding:

Delphi-Quellcode:
      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;
Beim Execute löst er eine EOleException aus: 'Syntaxfehler in der INSERT INTO-Anweisung'...

Sieht irgendjemand den Fehler? :shock:

Jelly 6. Mär 2005 22:08

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.

plumper 6. Mär 2005 22:50

Re: zugriff auf Access DB -> Fehler
 
Hmmm, dann kommt die Fehlermeldung ein Parameter sei nicht korrekt gefüllt...

Jelly 7. Mär 2005 06:56

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.

nieurig 7. Mär 2005 09:19

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

Mario 7. Mär 2005 09:36

Re: zugriff auf Access DB -> Fehler
 
Hast Du das SQL in Access schon mal getestet? Evtl. enthält es ja ein reserviertes Wort?

plumper 7. Mär 2005 21:21

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:
'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
Liegt daran, oder? Tschuldigung an alle, die sich Gedanken gemacht haben :oops:

Jetzt muß ich mal herausfinden, wie ich das in mein Datenbank-Memofeld bekomme...

Jelly 7. Mär 2005 22:55

Re: zugriff auf Access DB -> Fehler
 
Zitat:

Zitat von plumper
Jetzt muß ich mal herausfinden, wie ich das in mein Datenbank-Memofeld bekomme...

DB Memofelder sind ja auch nix anderes als Blobfelder... Da bietet ADO doch auch Zugriffmöglichkeiten, oder?

csa 8. Mär 2005 13:10

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...

plumper 8. Mär 2005 19:10

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:
        SQL.Text := 'INSERT INTO '+SCRIPT_TAB+' (TAN, PIS, PTC, Script, DataChng) VALUES ('''
                    +TA+''','+PosInScript+','+PosToChange+','''+ScriptPart+''','''+DataChange+''');';
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?

[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 05:57 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