はい、あなたはそれを正しく理解しました。これは壊れているVCLとそのドキュメントです。あなたの混乱は完全に理にかなっています!
Delphi 2009+の実装では、のAsString
プロパティを使用する必要がAnsiString
あります。AsWideString
string=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
クラスを使用する実装は壊れています。AnsiString
TWideStringField
string=UnicodeString
さらに、ドキュメントも壊れています:
Data.DB.TField.AsString
フィールドの値を文字列(Delphi)またはAnsiString(C ++)として表します。
これはstring
Delphiではではなく、AnsiString
!プロパティがプレーンstring=UnicodeString
タイプを使用しているという事実は、完全に誤解を招きます。
データベースの観点では、Unicodeを処理するか、特定の文字セットを操作するかはDBドライバー次第です。ただし、VCLの観点から見ると、Delphi 2009以降では、タイプについてのみ知っておく必要があり、使用することでUnicodeに対応できることstring
を確信できます。AsString: String