Ich denke, es ist kein Problem mit Word, sondern mit der Art, wie die Strings in der Datenbank gespeichert sind. Sie werden wahrscheinlich als Ansi-Zeichenfolgen gespeichert, nicht als Unicode-/WideString-Zeichenfolgen. Und wenn das stimmt, dann werden sie in einer Kodierung gespeichert, die Sie wissen müssen, wenn Sie sie richtig dekodieren wollen.
Hier ist eine Beispielanwendung zeigt, wie Ansi-String in Wide konvertieren und in Word speichern:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils,
ComObj,
ActiveX,
CodecUtilsWin32;
procedure Test();
var
wordApp, wordDoc: Variant;
ansiStr: string;
codec: TUnicodeCodec;
function str2WideStr(const s: string): WideString;
var
i: Integer;
begin
codec.DecodeStr(@s[1], Length(s), Result);
end;
begin
codec := TEncodingRepository.CreateCodecByAlias('ISO-8859-2');
ansiStr := #$BF#$F3#$B3#$E6; //"zólc"
wordApp := CreateOleObject('Word.Application');
wordDoc := wordApp.Documents.Add;
wordApp.Selection.TypeText(str2WideStr(ansiStr));
wordDoc.SaveAs('C:\sample.doc');
wordDoc.Close();
wordApp.Quit(False);
end;
begin
CoInitialize(nil);
Test();
end.
Der obige Code verwendet Freeware-Einheit CodecUtilsWin32.pas von Utility Library v.2.0.18
So würde ich vorschlagen Verwenden Sie TStringField anstelle von TWideStringField und konvertieren Sie die Strings wie im obigen Beispiel in WideStrings.
Obwohl Felder in der Datenbank als Unicode markiert sind, funktioniert diese Lösung. Vielen Dank und gut gemacht! :) – vrad