Autor |
Beitrag |
giantdwarf
      
Beiträge: 35
Delphi 5, Delphi 2006 Prof, Delphi 2009
|
Verfasst: Mo 06.07.09 13:51
Hallo zusammen!
Ich bin gerade dabei eine Delhpi 2006 Anwendung auf Delphi 2009 zu portieren. Hat soweit auch funktioniert. Aber bei folgender Anweisung:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| var oQry: TAdoQuery; sVal: String; ... oQry.FieldByName(sColumn).AsString := sVal; ... |
erhalte ich folgenden Fehler:
"Fehler bei einem aus mehreren Schritten bestehenden Vorgang. Prüfen Sie die einzelnen Statuswerte".
sVal hat z.B. als Wert:
'- Paket Professional'#$A'- Kabel Phone Basic 24'#$A'- Usage Tarif Basic 24'#$A'- Option Flat Telefon'#$A'- Discount Tarif'#$A'- 03419756550: Port=1; 0900-Sperre=Y; Rufnummernanzeige=N; Anrufsperre=N; Sperre Auslandsverb.=N'
Bei kürzeren Strings funktioniert es.
Ich vermute, dass es mit der neuen Strings in Delhpi 2009 zusammenhängt. Aber ich habe noch keine Lösung gefunden.
Vielen Dank für die Hilfe!
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 06.07.09 13:59
Ich kenne mich mit Ado nicht aus, aber kann es sein, dass die (halben) Zeilenumbrüche das Problem sind? 
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Mo 06.07.09 14:02
Ich habe kein Delphi 2009. Aber da dort die Arbeit Unicode-Strings stark umgestellt wurde, tippe ich darauf, dass der Fehler dort liegt.
The default String type is equivalent to UnicodeString
|
|
giantdwarf 
      
Beiträge: 35
Delphi 5, Delphi 2006 Prof, Delphi 2009
|
Verfasst: Di 07.07.09 09:49
Die Zeilenumbrüche sind nicht das Problem. Die habe ich bei einem Test entfernt und der Fehler kam trotzdem.
Ich habe das ganze auch schon mit Widestrings versucht, aber das hat auch nicht funktioniert.
Ich vermute auch, das es mit der Unicode-Umstellung zusammenhängt. Die Frage ist halt, was erwartet die TADOQuery-Komponente für eine String?
|
|
tif
      
Beiträge: 46
Erhaltene Danke: 1
Winxxx
TP, BP, Delphi 1 - 2009
|
Verfasst: Di 07.07.09 11:40
Hallo,
was hängt denn für eine Datenbank 'dran und wie sind die Felder definiert (Varchar vs. nVarchar) ?
Werden vorher (D2007) gespeicherte Daten noch richtig angezeigt ?
In meinen (nativen) SQL - Server - Komponenten übermitteln z.B. die (Standard-) WideStrings auch 1:1 an die Datenbank.
In char() - Feldern wird damit der doppelte Speicherplatz benötigt. Die Bemerkung, das "kürzere Strings fehlerfrei funktionieren" deutet darauf hin.
Wie sehen solche gespeicherten Strings in anderen Anwendungen (Query Analyzer o.ä.) aus ? Wird da alles korrekt dargestellt?
Grüße
Tino
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 07.07.09 11:45
Ich gehe davon aus, dass du das alte String-Format verwenden musst.
|
|
Muck
      
Beiträge: 98
Erhaltene Danke: 8
Win 8, Win 7, Vista, Win XP
Delphi XE3, Delphi 2009, Delphi 2007, Delphi 5
|
Verfasst: Di 07.07.09 15:16
Hallo zusammen,
ich benutze Delphi 2009 zusammen mit ADO Komponenten und MSSQL2005 MSSQL2008 und MYSQL.
Habe etwa 8 grosse Projecte in dieser Konstellation erstellt.
Ich habe nie das Problem mit String Zuweisungen gehabt.
Ich tippe auf die Felddefinitionen oder die gesetzte Server Collation falls MS SQL im Einsatz.
Bei mir laeuft alles problemlos mit SQL_Latin1_General_CP1_CI_AS in den Server Optionen.
Ich kann TEXT Felder, VARCHAR(8000) NVARCHAR etc alles direct zuweisen.
cu
Markus
|
|
Muck
      
Beiträge: 98
Erhaltene Danke: 8
Win 8, Win 7, Vista, Win XP
Delphi XE3, Delphi 2009, Delphi 2007, Delphi 5
|
Verfasst: Di 07.07.09 15:20
Hallo,
es koennte helfen die einzelnen Fehlernachrichten auszulesen.
siehe Code:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| with ADOConnection1 do for i:= 0 to Errors.Count - 1 do begin s := Format('Source: %s', [Errors[i].Source]); MemoLog.Lines.Add(s); s := Format('NativeError: %d', [Errors[i].NativeError]); MemoLog.Lines.Add(s); s := Format('%s; (SQLState: %s)', [Errors[i].Description, Errors[i].SQLState]); MemoLog.Lines.Add(s); MemoLog.Lines.Add(' --- '); end; |
Markus
|
|
MSCH
      
Beiträge: 1448
Erhaltene Danke: 3
W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
|
Verfasst: Di 07.07.09 19:27
Vielleicht hilfts;
ich hatte das Problem - allerdings mit den ODAC Kompos - mal; xxx.asString erwartet einen Ansi-String(?) und man kippt einen Unicode-String rein.
Zweite Möglichkeit, wurde ja schon angesprochen; das Feld auf der Datenbank ist kein nvarchar,ntext, nclob oder äquivalent.
Nehme stattdessen Query.FieldByName('Name').Value := stringvariable oder ähliches.
Das hat dann funktioniert.
:_msch
_________________ ist das politisch, wenn ich linksdrehenden Joghurt haben möchte?
|
|
giantdwarf 
      
Beiträge: 35
Delphi 5, Delphi 2006 Prof, Delphi 2009
|
Verfasst: Mi 08.07.09 11:52
Auf das einfachste kommt man zuletzt!  Die Länge des Datenbankfeldes war auf 30 beschränkt, daher funktionierte es auch mit kürzeren strings.
Danke für Eure Tipps und Hilfe!
|
|