TurboDB VCL Komponenten Bibliothek

ANSI und Unicode Zeichenketten speichern

Previous  Top  Next

Bis zu den 2007er Versionen von Delphi und C++Builder ist der Standard-String ein ANSI-String, der einfach in String- und Memo-Spalten gespeichert werden kann. In diesen Versionen müssen Unicode-Strings als WideString definiert werden und es ist nicht ganz so einfach, diese korrekt in die Datenbank zu schreiben. Beginnend mit Delphi und C++Builder 2009 ist der Standard-String ist Unicode und es führt zu Schwierigkeiten, wenn Sie sie als (ANSI) String oder Memo speichern.

Speichern von Unicode Strings mit Delphi/C++ Builder 2007 und früher

Die TurboDB-Engine erlaubt Unicode in WideString Spalten und in WideMemos. Bei der Verwendung dieser Datentypen in einer VCL Anwendung gilt es allerdings einige Fallen zu beachten. Die VCL verwendet in beinahe allen Funktionen und Komponenten AnsiStrings und konvertiert Unicode Zeichenketten automatisch und ohne Warnung in diesen Typ.

Datenbank-Kontrollelemente verarbeiten wiederum nur AnsiStrings. Es gibt  keinen Weg Unicode mit VCL Daten-Kontrollelementen in Ihre Datenbank einzugeben oder anzuschauen.

Das können Sie mit Unicode Daten aus Ihrer TurboDB-Datenbank in Ihrer VCL-Anwendung machen:

Anzeige und Eingabe von Zeichenketten in normale Kontrollelemente wie zum Beispiel TEdit. Diese Kontrollelemente arbeiten auch mit Unicode korrekt, Sie müssen aber Ihre eigene Logik für Updates und Postings implementieren, da normale Kontrollelemente über keinen DataSource Link verfügen:
Interne Verwendung von Unicode Daten. Sie können WideStrings aus einem DataSet lesen und zurückschreiben.
Falls Sie über TdbDataSet auf Unicode Daten zugreifen, verwenden Sie nicht die TField.AsString sondern die Eigenschaft Value oder das Property AsWideString.
Query Parameter (z.B. Einträge in der TTdbQuery.Params Kollektion) können nur über TParam.Value gesetzt werden.
Falls Sie mit Unicode Memos arbeiten möchten, werden Sie schnell merken, dass VCL keinen passenden Datentypen für diese Art von Tabellen-Spalte bietet. Unicode Memos werden durch den Feldtyp ftBlob und der Feldklasse TTdbBlobField repräsentiert, die eine Eigenschaft AsWideString bietet.
Die Eigenschaft Filter in VCL Komponenten ist ebenso wie die SQL Eigenschaft vom Datentyp AnsiString und können daher auch nicht für die Suche in Unicode Zeichenketten verwendet werden. Die TurboDB Datenbank-Komponenten verfügen daher über die zusätzlichen Eigenschaften FilterW und SQLW vom Type WideString.

Speichern von ANSI Strings mit Delphi/C++ Builder 2009 und höher

Viele Anwendungen die nicht sprachunabhängig sein müssen, können Ihre Text-Daten weiterhin in String und Memo-Spalten speichern, mit zwei Vorteilen:

Bessere Kompatibilität mit älteren Anwendungen
Weniger Speicherverbrauch und damit einhergehend eine bessere Performanz.

Allerdings erfordert das Speichern von (UNICODE) Strings in (ANSI) String oder Memo-Spalten eine Konvertierung der Delphi Variablen nach AnsiString. Es muss sichergestellt sein, dass der Inhalt der UnicodeString Variable keine echten Unicode Zeichen enthält. Andernfalls kommt es beim Speichern des Strings in die Datenbank zu Informationsverlust.