Man muss richtig casten, dann klappt es mit den WideStrings.
Delphi-Quellcode:
var
f : TField;
....
while not ADOTable1.eof do
begin
child:= doc.createElement('Records');
root.appendchild(child);
for i:=0 to ADOTable1.FieldCount-1 do
begin
// erst mal das aktuelle Feld in Variable merken
f := ADOTable1.Fields[i];
child1:=doc.createElement(f.FieldName);
child.appendchild(child1);
// prüfe, ob der Inhalt (NULL) ist
if f.IsNull then
temp := '(NULL)'
// Sonderbehandlung für WideStringfelder
// nur mit dem Cast kommt man an das Property Value vom Typ WideString ran
// (evtl. ginge es auch über .AsVariant)
// .AsString geht definitiv nicht, da .AsString immer einen Ansistring liefert
else if f is TWideStringField then
temp := TWideStringField(f).Value // property Value: WideString
else
temp := f.AsString; // für numerische Felder, usw.
child1.appendChild(doc.createTextNode(UTF8encode(temp)));
end;
ADOTable1.Next;
end;