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单元中相关.此外,网上没有重要的讨论.
有谁遇到过同样的问题?
我看到它的唯一用途是将多个同名参数全部重定向到同一个实例。
据我所知这是正确的。在 Delphi 中,同一参数可以多次使用,但底层数据库调用通常将它们视为单独的参数,因此最终会得到同一参数的多个实例。
SELECT * FROM SomeTable WHERE FirstName = :NAME or LastName = :NAME
Run Code Online (Sandbox Code Playgroud)
将两个参数重定向到同一实例后,修改其中一个参数也会设置另一个参数。