Delphi中AsInteger和Value有什么区别?

10

我想了解与 Delphi 中数据集相关的以下两个语句之间的区别。

dsMyDataSet.ParamByName('ID').AsInteger := 1122; //If ID is integer
dsMyDataSet.ParamByName('ID').AsString := '1122'; //If ID is string

dsMyDataSet.ParamByName('ID').Value := 1122; //ID is string or integer

这些陈述意思相同吗?"value"是否隐式将整数转换为字符串?

1个回答

12
例如,TParam.AsInteger属性设置参数的值和数据类型TParam.Value也可以做到同样的效果,但是TParam将决定将哪种类型映射到Variant中的值,而不总是您想要的数据类型。
建议只使用AsXXX属性来设置值,因为您将控制参数的数据类型,这可以避免参数绑定错误。
所以,回答您最后一个问题:不,值不会转换为正确的数据类型,您必须通过选择正确的属性来分配值来设置数据类型。

好的David,那我的疑问呢:在我的代码中,有很多地方都写了dsMyDataSet.ParamByName('ID').Value := 1122;。如果我Ctrl + 单击值,它会带我到属性“property Value: AnsiString read GetAsAnsiString write SetAsAnsiString;”,该属性写在Data.DB.pas文件中。此属性返回AnsiString。现在,如果我编写像“dsMyDataSet.ParamByName('ID').Value := myString”这样的语句,我将收到编译器警告,即隐式转换字符串为ansistring,这可能会导致数据丢失。我应该如何处理此警告? - user1556433
@nkp,只需将其类型转换为AnsiString以消除警告。AnsiString('myString')。 - LU RD
@nkp,如果数据属性被声明为AnsiString,则Unicode字符串必须在某个时候进行转换。不确定我是否理解您的意思。 - LU RD
@DavidHeffernan - 这是否意味着我需要在整个应用程序中将所有的"value"短语替换为"AsString/AsInteger/AsXXX"? - user1556433
这就是你应该做的。如果你的语句有意义会更好。Value是Variant类型,所以我们无法确定你在做什么。 - David Heffernan
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接