![]() |
Datenbank: DB2 • Version: 7 • Zugriff über: dbGo / dbExpress
Fehler beim speichern geänderter Memofelder
Hallo,
ich hab ein Problem, dass ich seit Tagen nicht gelöst bekomme. Delphi 2005 und DB2 Egal, welche Anbindung ich nutze (ADO, SQL ...), beim Abspeichern eines Datensatzes mit einem geänderten Memofeldinhalt (CLOB oder Long VarChar) bekomme ich folgende Fehlermeldung: --------------------------- Project1 --------------------------- CLI0100E Falsche Parameteranzahl. SQLSTATE=07001. --------------------------- OK --------------------------- Auf der Seite von IBM habe ich gelesen, dass dieser Fehler eigentlich mit dem Abspeichern von Datensätzen nichts zu tun haben kann. --------------------------- CLI0100E Falsche Parameteranzahl. Ursache: Die Anzahl der Parameter, die in SQLSetParam oder SQLBindParameter angegeben wurden, war geringer als die Anzahl der Parameter in der SQL-Anweisung. Aktion: Die SQL-Anweisung erneut angeben oder über SQLSetParam oder SQLBindParameter mehr Eingabeparameter zur Verfügung stellen. --------------------------- Was mache ich falsch? Kalli |
Re: Fehler beim speichern geänderter Memofelder
Hallo Kalli,
wenn du dein Problem noch nicht lösen konntest, dann poste doch mal, WIE du das Update angehst. Wie sieht dein SQL Statement aus? Grüße vom marabu |
Re: Fehler beim speichern geänderter Memofelder
Hallo marabu,
die Anweisungen sind furchtbar primitiv. Nachdem das in meiner Anwendung zu Problemen führte, habe ich eine Mini-Anwendung zusammengeclickt.
SQL-Code:
erstellt mir die Tabelle zum Testen. Über ADODataset mit der Anweisung "select * from VD.MEMO" rufe ich die Daten ab. Der Cursor von ADOConnect steht auf Client.
CREATE TABLE VD.MEMO (
"VERMNR" VARCHAR (10) , "NAME" VARCHAR (30) , "BEMERKUNG" LONG VARCHAR ) Auf einer 'Form' sind zwei DBEditfelder für VERMNR und NAME sowie ein DBMemo für BEMERKUNGEN. Zum Steuern benutze ich einen DBNavigator. Trage ich eine VermNr und den Namen ein, kann ich den Datensatz mit dem DBNavigator abspeichern und fertig. Sobald ich aber ein Zeichen im Memofeld eintrage und speichern will, kommt die besagte Fehlermeldung. Im Moment behelfe ich mir mit einem Umweg: Ich lade den Text in ein Memofeld und schreibe es zurück in die Tabelle. .
Delphi-Quellcode:
.
procedure TForm1.MemoSpeichern;
// SQL-Anweisung in einem ADOCommand: Update VD.VERM01 set BEMERKUNG = :BM where VERMNR = :Nr var NR : String; begin nr := ADODataSet1VERMNR.Text; ADOCommand1.Parameters.ParamByName('BM').Assign(Memo1.Lines); ADOCommand1.Parameters.ParamByName('NR').Value := Nr; ADOCommand1.Execute; ADODataSet1.Requery([]); ADODataSet1.Locate('VERMNR',Nr,[]); end; Gruß Kalli [edit=alcaeus]sql- und delphi-Tags eingefuegt. Mfg, alcaeus[/edit] |
Re: Fehler beim speichern geänderter Memofelder
Hallo Kalli,
ich habe leider keinen Zugriff auf DB2 v7 - ich habe DB2 UDB DPE v8.1.9.700 auf meiner Maschine installiert und die SAMPLE Datenbank erzeugen lassen. Ich habe meinen Test mit der Tabelle EMP_RESUME gemacht, die ein BLOB Feld enthält. Was soll ich sagen - alles funktioniert. Habe ADOConnection eingerichtet, eine ADOQuery mit "select * from user.emp_resume" angefüttert, ein DBGrid mit DBNavigator, zwei DBEdits und ein DBMemo auf eine Form gepackt. Meine Änderungen im DBMemo werden ohne Fehler angenommen. Hätte ich auch so erwartet - du aber auch, wenn ich das richtig sehe. Vielleicht solltest du ein Upgrade in Erwägung ziehen? Vielleicht gibt es einen aktualisierten Treiber? Hast du dein simples Test-Scenario mal umgestellt auf OLE für ODBC und geschaut was dann passiert? marabu |
Re: Fehler beim speichern geänderter Memofelder
Hallo zusammen,
auf der UDB2 funktioniert es wohl, aber anhand der Fehlermeldung gehe ich davon aus, dass dies eine DB2 auf einer As400 oder iseries ist gell? UDB2<> DB2 AS400 !! Habe da leider entsprechende Erfahrungen gemacht. Zum Thema ich hatte letzte Woche das gleiche Problem. Greife mit DBExpress/D7.01/ und den AS400 Treiber von Peter Sawatzki auf die Datenbank zu. ![]() Lösung 1: Server Patchen (V5R3 PTF SI18398) Fix für dieses Problem. ![]() ack/si18398 oder Lösung 2: ... wenn Sie V5R3 einsetzen kann ich Ihnen auch den Fix geben, den IBM mir vorab gab, als das PTF noch nicht erhältlich war bzw. die betreffende Datei aus V5R3. Im Client Access/iSeries Access in cwbdb.dll ist eine Warnungssituation nicht korrekt abgehandelt, die in der Folge dazu führt, dass fälschlich die API bestimmte Attribute ignoeriert. Dies wirkt sich u.a. auch auf LOBs aus. Siehe hierzu den Auszug aus den Fixes von PTF SI18398: " APAR SE19493: CA400EXP-INCORROUT CWBDB APIs not using extended formats The customer's application uses the cwbDB APIs. If a general server warning (return code 6407) occurs when cwbDB_StartServer is called, the cwbDB APIs fail to set the "use extended formats" in the initial server attributes. This results in errors or incorrect behavior when executing statements that require the extended formats. Errors could include incorrect handling of LOB data, incorrect handling of the ROWID data type, and incorrect handling of any other type of data that requires the extended formats. CIRCUMVENTION: Examine the host server job (QZDASOINIT) joblog for warnings and errors that occur when your connection is opened. Take action to ensure the warnings or errors are resolved and no longer occur. " PS: Mit der BDE hat der Zugriff ohne den Patch funktioniert. Alles ohne Gewähr. Bei läuft jetzt Lösung 2 ohne Probleme. Gruss Remolus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:44 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-2025 by Thomas Breitkreuz