Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 2010,UIB,Firebird:重复的参数名称_Delphi_Firebird_Uib - Fatal编程技术网

Delphi 2010,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

我正在使用Delphi2010和UIB访问Firebird数据库

我正在尝试运行查询

    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
  • 我的方案可行吗
  • 有更好的解决办法吗

Firebird本身不支持动态SQL中的命名参数(它在过程SQL中支持)。Firebird仅支持位置参数


因此,是您的驱动程序将命名参数转换为位置参数。

您认为为什么会出现错误?查询中有两个命名参数,但总共有四个参数。在原始代码中,没有我的严格修改,我得到了两个名为DX的参数。即:Params.FieldName[0]=“DX”和Params.FieldName[1]=“DX”。因此,我无法访问参数POSTCODE.ParamByName('POSTCODE')。As…=。。。不管用?管用!马克回答了,你的暗示让我试了一下。总而言之,它工作得很好。只是Params集合在求值时看起来不正确。我在编写日志语句时发现了这一点,这些语句在执行查询之前转储了一个准备好的查询及其参数值。对于这种特殊情况,没有明显的方式访问邮政编码,因为Paramcount(错误地)表明只有两个邮政编码。根据我的解释,我可以接受。