0

Delphi 10.2東京版の割り当てで奇妙な状況が発生しています:

//AccountsCDS: TClientDataSet;
//AccountsCDSACCOUNT_ID: TIBStringField;
//AAccountId: string;
//AAccountId is '5720' and I expect that AccountsCDSACCOUNT_ID.AsString will be '5720' too, 
//but it is #8'5720' instead - 5 characters long!
AccountsCDSACCOUNT_ID.AsString:=AAccountId;

私は以前 Delphi 2009 で多くの作業を行ってきましたが、私の経験では、TIBStringField/TWideStringField と AsString/AsIBString/AsWideString を安全に混在させることができました。TClientDataSet に TStringField フィールドを使用しないようにする必要がありますが (代わりに TWideStringField フィールドを使用する必要があります)、TIBStringField を使用しても安全でした。これらは TWideStringField から継承されているからです。アクセサ関数 As... についても同様でした。これは、String と WideString を交換可能であると認識し、古い AnsiString を非 Unicode 文字列として分離することが Delphi のポリシーであったためです。

TIBStringField/TWideStringField と AsString/AsIBString/AsWideString の混合に関する私の仮定は、最近の (10.x と 11.x、東京、シドニーなど) エディションの Delphi では間違っていますか?

私のコード例の代入で奇妙な先頭文字が追加されるのはなぜですか?

追加: フィールド宣言を TIBStringField から TWideStringField に変更し (型名の機械的な変更)、状況を解決しました: AsString... アクセサーを使用でき、追加の先頭文字は追加されません。先ほど言ったように、TIBStringField は TWideStringField から継承されているため、非常に奇妙です。

4

0 に答える 0