单位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;

它可以返回selfParamRef,所以这个想法是允许某种重定向。
但是它的速度很慢ParamByName,被称为很多,我不明白目的。实际上,如果我将其修改为仅返回self,则一切似乎都可以正常工作。

我看到的唯一用途是让多个具有相同名称的参数都重定向到同一实例。在这种情况下,ParamByName的性能损失肯定会夸大此功能的优势。
ParamRefprivate未记录,因此仅在db.pas单元内相关。此外,在线上也没有重大讨论。

有没有人遇到过同样的问题?

最佳答案



据我所知,这是正确的。在Delphi中,相同的参数可以多次使用,但是基础数据库调用通常将它们视为独立的参数,因此最终会遇到相同参数的多个实例。

SELECT * FROM SomeTable WHERE FirstName = :NAME or LastName = :NAME

database - TParams.ParamRef的作用是什么?-LMLPHP

将两个参数都重定向到同一实例后,修改其中一个也会设置另一个。

关于database - TParams.ParamRef的作用是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49728988/

10-09 21:25