什么是TParams.ParamRef用于?

时间:2018-04-09 08:51:44

标签: database delphi parameters vcl

单元db.pas包含TParam类的实现,它表示数据库查询中的参数。

在测试包含大量参数的查询时,我注意到function TParam.ParamRef: TParam需要花费大量时间,因为它会调用ParamByName来执行无索引的params搜索。

实施很简单:

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的性能损失肯定会超过此功能的好处。

ParamRef未记录,private因此仅在db.pas单元中相关。此外,网上没有重要的讨论。

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

1 个答案:

答案 0 :(得分:1)

  

我看到的唯一用途就是有几个相同名称的参数   所有重定向到同一个实例。

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

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

enter image description here

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