Delphi 使用.AsString或.Text?

Delphi 使用.AsString或.Text?,delphi,delphi-5,Delphi,Delphi 5,我刚刚看到了一些代码(D5),它们在其中使用 aStr:=tblAcct.FieldByName('Name').Text; 它似乎工作得很好,但我一直使用 aStr:=tblAcct.FieldByName('Name').AsString; 我在加载TMemo时使用了这两种方法,但似乎没有什么不同 aMemo.Lines.Text:=tblAcct.FieldByName('History').Text; aMemo.Lines.Text:=tblAcct.FieldByName('Hi

我刚刚看到了一些代码(D5),它们在其中使用

aStr:=tblAcct.FieldByName('Name').Text;
它似乎工作得很好,但我一直使用

aStr:=tblAcct.FieldByName('Name').AsString;
我在加载TMemo时使用了这两种方法,但似乎没有什么不同

aMemo.Lines.Text:=tblAcct.FieldByName('History').Text;
aMemo.Lines.Text:=tblAcct.FieldByName('History').AsString;
我为什么要用一个而不是另一个? 如果是,哪一个

实际上对于TMemo,我通常使用

aMemo.Lines.Assign(tblAcct.FieldByName('History'))
这似乎也很管用


谢谢

AsString
包含字段值作为字符串

Text
包含字段处于编辑模式时在数据感知控件中显示的字符串

因此,在您的情况下,我认为您应该使用AsString。

该属性用于获取DataAware控件中正在编辑的字段的文本表示,而该属性为您提供一个字符串来向用户表示值(它可能包含标点符号或普通值的其他修饰)

包含字段处于编辑模式时要在数据感知控件中显示的字符串

典型的示例是将
Currency
属性设置为
True
的TFloatField。
DisplayText
为您提供一个包含逗号(如果需要)、十进制分隔符和货币符号的数字字符串。
Text
属性提供一个不带逗号或货币符号的字符串

begin
  MyFloatField.Currency := True;
  MyFloatField.AsFloat := 1234.56;
  A := MyFloatField.Text; //'1234.56'
  B := MyFloatField.DisplayText; //'$1,234.56', depends on your locale
end;
上述两个属性都可以通过编写事件处理程序进行自定义,您可以在其中编写自定义逻辑以将值转换为字符串表示形式。
DisplayText
参数指示所需字符串是否表示要编辑的值

另一方面,
AsString
属性在基本数据类型和字符串之间使用更简单的转换。每个TField子体使用RTL中的函数实现虚拟GetAsString方法以执行该表示。在TFloatField示例之后,此类为此调用

综上所述,对您的问题的回答是:
AsString
如果没有OnGetText事件处理程序,则返回与
Text
属性相同的字符串,但如果有事件处理程序或非标准TField子代,则返回的字符串可能不同


我说不出什么更适合您,因为这取决于返回值的预期用途,但如果您使用它在UI中向用户显示值(如您的代码示例),我建议您使用DisplayText属性。

@jachguate感谢您提供了非常详细的答案。好的,现在我知道有一个显著的区别,它可以解释为什么我一直有一个定位呼叫问题,给我似乎不正确的结果。不是我问这个问题的原因,而是你的细节让我回到定位问题,重新思考这个方法。这是一个坏消息…谢谢@Riho,这简化了我的另一个问题,也与这个问题无关,但你的评论也澄清了问题。