はい、あなたはそれを正しく理解しました。これは壊れているVCLとそのドキュメントです。あなたの混乱は完全に理にかなっています!
Delphi 2009+の実装では、のAsStringプロパティを使用する必要がAnsiStringあります。AsWideStringstring=UnicodeString
実際、As*Stringプロパティは次のように定義されています。
property AsString: string read GetAsString write SetAsString;
property AsWideString: UnicodeString read GetAsWideString write SetAsWideString;
property AsAnsiString: AnsiString read GetAsAnsiString write SetAsAnsiString;
いったいどうやってそれAsStringが戻ってくるのかを知ることができるAnsiStringでしょうか?他のVCL/RTLと比較すると、まったく意味がありません。
forとforのTStringFieldクラスを使用する実装は壊れています。AnsiStringTWideStringFieldstring=UnicodeString
さらに、ドキュメントも壊れています:
Data.DB.TField.AsString
フィールドの値を文字列(Delphi)またはAnsiString(C ++)として表します。
これはstringDelphiではではなく、AnsiString!プロパティがプレーンstring=UnicodeStringタイプを使用しているという事実は、完全に誤解を招きます。
データベースの観点では、Unicodeを処理するか、特定の文字セットを操作するかはDBドライバー次第です。ただし、VCLの観点から見ると、Delphi 2009以降では、タイプについてのみ知っておく必要があり、使用することでUnicodeに対応できることstringを確信できます。AsString: String