单位db.pas
包含TParam
类的实现,该类表示数据库查询中的参数。
在测试带有大量参数的查询时,我注意到function TParam.ParamRef: TParam
需要花费很多时间,因为它调用ParamByName
会执行未索引的参数搜索。
实现很简单:
function TParam.ParamRef: TParam;
begin
if not Assigned(FParamRef) then
if Assigned(Collection) and (Name <> '') then
FParamRef := TParams(Collection).ParamByName(Name) else
FParamRef := Self;
Result := FParamRef;
end;
它可以返回
self
或ParamRef
,所以这个想法是允许某种重定向。但是它的速度很慢
ParamByName
,被称为很多,我不明白目的。实际上,如果我将其修改为仅返回self
,则一切似乎都可以正常工作。我看到的唯一用途是让多个具有相同名称的参数都重定向到同一实例。在这种情况下,
ParamByName
的性能损失肯定会夸大此功能的优势。ParamRef
和private
未记录,因此仅在db.pas单元内相关。此外,在线上也没有重大讨论。有没有人遇到过同样的问题?
最佳答案
据我所知,这是正确的。在Delphi中,相同的参数可以多次使用,但是基础数据库调用通常将它们视为独立的参数,因此最终会遇到相同参数的多个实例。
SELECT * FROM SomeTable WHERE FirstName = :NAME or LastName = :NAME
将两个参数都重定向到同一实例后,修改其中一个也会设置另一个。
关于database - TParams.ParamRef的作用是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49728988/