Je pense que ce n'est pas un problème avec Word, mais plutôt avec la façon dont les chaînes sont stockées dans la base de données. Ils sont probablement enregistrés en tant que chaînes Ansi, et non en tant que chaînes Unicode/WideString. Et si cela est vrai, ils sont sauvegardés dans un encodage que vous devez savoir si vous voulez qu'ils soient décodés correctement.
Voici un exemple d'application montrant comment convertir la chaîne en Ansi WideString et enregistrez dans Word:
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.
Le code ci-dessus utilise l'unité freeware CodecUtilsWin32.pas de Utility Library v.2.0.18
Je propose donc en utilisant TStringField au lieu de TWideStringField et en convertissant les chaînes en WideStrings comme dans l'exemple ci-dessus.
Bien que les champs de la base de données soient marqués comme Unicode, cette solution fonctionne. Merci beaucoup et bien fait! :) – vrad