性能或其他差异是否存在差异,或者两者是否相同(根据TADOquery和TCustomADODataSet中的查找字段)?
我已阅读帮助文件,但我没有找到任何解释。
答案 0 :(得分:2)
Lookup()
函数是TDataSet
的虚函数。
作为虚函数意味着实现可以在不同类之间变化。
因此,文档的注释会因每个TDataSet
后代而异。
让我们仔细看看:
TDataSet
' s Lookup()
:实现虚拟方法以从记录中检索字段值 匹配指定的搜索值。
查看更多here
请注意文档末尾的这句话:
非单向的后代类会覆盖此方法 它定位记录所标识的字段 逗号分隔的字符串KeyFields具有由。指定的值 Variant或Variant数组KeyValues。在实现Lookup的类中, 它返回包含值或的Variant或Variant数组 以逗号分隔的字符串指定的字段的值 ResultFields在指定的记录上。
TCustomADODataSet
' s Lookup()
:在这里,上述评论正在实践中发生。请注意,在此实现中,不会调用inherited.
文档说:
从与指定搜索匹配的行中检索字段值 值。
详情here
现在,您只能通过深入了解源代码来理解其中的差异。最后,你会注意到没有任何区别。您将意识到查找字段只会调用Lookup()
函数:
AutoCalcFields
属性影响(请参阅here)OnCalcFields
事件负责的相同功能
致电CalcLookupValue
UniDirectional
DataSet也没有Lookup
个字段。 (看到
here)Lookup
字段调用Lookup()
函数procedure TField.CalcLookupValue;
Lookup()
参数填充了TField
属性:FLookupDataSet.Lookup(FLookupKeyFields,
FDataSet.FieldValues[FKeyFields], FLookupResultField);
Lookup()
函数会使用查阅字段中的所有相关属性,如上所示: