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... 也是如此,因为 Delphi 的策略是将 String 和 WideString 视为可互换的,并将旧的 AnsiString 分隔为非 Unicode 字符串。

对于 Delphi 的最新版本(10.x 和 11.x、东京、悉尼等),我对 TIBStringField/TWideStringField 和 AsString/AsIBString/AsWideString 混合的假设是否错误?

为什么在我的代码示例的赋值中添加了一个奇怪的前导字符?

添加:我将字段声明从 TIBStringField 更改为 TWideStringField(类型名称的机械更改),它解决了这种情况:我可以使用 AsString... 访问器并且没有添加额外的前导字符。这真的很奇怪,因为正如我所说,TIBStringField 是从 TWideStringField 继承的。

4

0 回答 0