Delphi 2010,UIB,Firebird:重复的参数名称
我正在使用Delphi2010和UIB访问Firebird数据库 我正在尝试运行查询Delphi 2010,UIB,Firebird:重复的参数名称,delphi,firebird,uib,Delphi,Firebird,Uib,我正在使用Delphi2010和UIB访问Firebird数据库 我正在尝试运行查询 SELECT RECID FROM TABLE WHERE ((:DX = '') OR (DX=:DX)) AND ((:POSTCODE='') OR (POSTCODE=:POSTCODE)) 注意,我在语句中使用了两次每个命名参数 当我在TUIBQuery中准备它时,我得到ParamCount=2和两个名为DX的参数。当我跟踪代码时,我看到TSQ
SELECT
RECID
FROM TABLE
WHERE ((:DX = '') OR (DX=:DX))
AND ((:POSTCODE='') OR (POSTCODE=:POSTCODE))
注意,我在语句中使用了两次每个命名参数
当我在TUIBQuery中准备它时,我得到ParamCount=2和两个名为DX的参数。当我跟踪代码时,我看到TSQLParams.Parse通过mysql并调用AddFieldA四次。我可以看到重复项被识别并添加到FXSQLDA的末尾,但FParamCount并没有增加
作为一个临时的哑修复,我添加了这样一个增量,现在我得到(DX,DX,POSTCODE,POSTCODE)作为参数列表。这类工作
问题:
- Firebird是否支持我尝试的那种参数重用李>
- 通过UIB李>
- 我的方案可行吗
- 有更好的解决办法吗
因此,是您的驱动程序将命名参数转换为位置参数。您认为为什么会出现错误?查询中有两个命名参数,但总共有四个参数。在原始代码中,没有我的严格修改,我得到了两个名为DX的参数。即:Params.FieldName[0]=“DX”和Params.FieldName[1]=“DX”。因此,我无法访问参数POSTCODE.ParamByName('POSTCODE')。As…=。。。不管用?管用!马克回答了,你的暗示让我试了一下。总而言之,它工作得很好。只是Params集合在求值时看起来不正确。我在编写日志语句时发现了这一点,这些语句在执行查询之前转储了一个准备好的查询及其参数值。对于这种特殊情况,没有明显的方式访问邮政编码,因为Paramcount(错误地)表明只有两个邮政编码。根据我的解释,我可以接受。