什么是TParams.ParamRef用于?

Dan*_*rić 7 database delphi parameters vcl

Unit 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;
Run Code Online (Sandbox Code Playgroud)

它可以返回self或者ParamRef,所以想法是允许某种重定向.但它确实很慢ParamByName,被称为很多,我不明白的目的.事实上,如果我修改它只是返回self一切似乎工作正常.

我看到的唯一用途就是让几个同名的参数都重定向到同一个实例.如果是这种情况,那么ParamByName超过此功能的好处肯定会影响性能.

ParamRef没有文档,private因此只在db.pas单元中相关.此外,网上没有重要的讨论.

有谁遇到过同样的问题?

Bri*_*ian 1

我看到它的唯一用途是将多个同名参数全部重定向到同一个实例。

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

SELECT * FROM SomeTable WHERE FirstName = :NAME or LastName = :NAME
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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