Auch für die Speicherung von Zeichenketten in Datensätzen spielt der verwendete Zeichensatz eine Rolle. Standardmäßig wird auch hier der conzept 16-Zeichensatz verwendet, der in dem Artikel „Der Zeichensatz in conzept 16“ beschrieben wurde.
Sollen Datensätze in einem anderen Zeichensatz als dem conzept 16-Zeichensatz in der Datenbank abgelegt werden, gibt es momentan einige Dinge zu beachten. In diesem Artikel nehme ich den UTF-8-Zeichensatz als Beispiel. Dafür wird vorrausgesetzt, dass der Dialog als Unicode-Dialog gespeichert wurde.
Beim Speichern muss die zu setzende Zeichenkette in den gewünschten Zielzeichensatz gewandelt werden. Das Eingabefeld kann hierzu nicht direkt mit dem Datenbankfeld über die Eigenschaft wpDbFieldName
verknüpft werden.
Beim Speichern wird der Inhalt aus dem Eingabeobjekt wie folgt in das Datenbankfeld übertragen:
// Zeichenkette in das Datenbankfeld schreiben
faUniValue # StrCnv(StrCnv($edfaUniValue->wpCaption, _StrToUTF8),
_StrFromANSI);
Um den Feldinhalt in dem Eingabefeld wieder korrekt darzustellen, muss die Zeichenkette zum Beispiel im Ereignis EvtLstSelect
zurück konvertiert werden. Dies geschieht mit der folgenden Befehlsfolge:
// Zeichenkette in Eingabe-Objekt schreiben
$edfaUniValue->wpCaption # StrCnv(StrCnv(faUniValue, _StrToANSI),
_StrFromUTF8);
Analog dazu kann das Feld im Ereignis EvtLstDataInit
als Spalteninhalt einer RecList gesetzt werden.
// Datensatz lesen
RecRead(tblUniUnicode, 0, _RecId, aID);
// Feld von UTF-8 konvertieren
faUniValue # StrCnv(StrCnv(faUniValue, _StrToANSI), _StrFromUTF8);
Auch in Label-Objekten kann der Inhalt nicht aus der Eigenschaft wpDbFieldName
verwendet werden. Es genügt jedoch eine Zuweisung des Feldinhaltes an die Eigenschaft wpCaption
des Labels.
Da die Zeichenkette momentan nicht als UTF-8 gespeichert wird, können momentan nur die ersten 256 Zeichen eines Zeichensatzes verwendet werden. Je nach ausgewähltem Zeichensatz werden die Zeichen anders dargestellt.
In Zukunft soll sich das Vorgehen vereinfachen und Unicode direkt unterstützt werden.