字段查找和函数查找之间有什么区别?

时间:2014-05-07 12:56:38

标签: delphi ado

性能或其他差异是否存在差异,或者两者是否相同(根据TADOquery和TCustomADODataSet中的查找字段)?

我已阅读帮助文件,但我没有找到任何解释。

1 个答案:

答案 0 :(得分:2)

Lookup()函数是TDataSet的虚函数。

作为虚函数意味着实现可以在不同类之间变化。

因此,文档的注释会因每个TDataSet后代而异。

让我们仔细看看:

  • TDataSet' s Lookup()
  

实现虚拟方法以从记录中检索字段值   匹配指定的搜索值。

查看更多here

请注意文档末尾的这句话:

  

非单向的后代类会覆盖此方法   它定位记录所标识的字段   逗号分隔的字符串KeyFields具有由。指定的值   Variant或Variant数组KeyValues。在实现Lookup的类中,   它返回包含值或的Variant或Variant数组   以逗号分隔的字符串指定的字段的值   ResultFields在指定的记录上。


  • TCustomADODataSet' s Lookup()

在这里,上述评论正在实践中发生。请注意,在此实现中,不会调用inherited.

文档说:

  

从与指定搜索匹配的行中检索字段值   值。

详情here


现在,您只能通过深入了解源代码来理解其中的差异。最后,你会注意到没有任何区别。您将意识到查找字段只会调用Lookup()函数:

1.查找字段类似于计算字段。

  • AutoCalcFields属性影响(请参阅here
  • fire OnCalcFields事件负责的相同功能 致电CalcLookupValue
  • UniDirectional DataSet也没有Lookup个字段。 (看到 here

2. Lookup字段调用Lookup()函数

  • 关于这一点,没有文档,你必须亲自看看: procedure TField.CalcLookupValue;
  • Lookup()参数填充了TField属性:FLookupDataSet.Lookup(FLookupKeyFields, FDataSet.FieldValues[FKeyFields], FLookupResultField);

Lookup()函数会使用查阅字段中的所有相关属性,如上所示:

  • FKeyFields = TField.KeyFields
  • FLookupDataSet = TField.LookupDataSet
  • FLookupKeyFields = TField.LookupKeyFields
  • FLookupResultField = TField.LookupResultField