Delphi 2010, UIB, Firebird: Duplicate Parameter names



我正在使用Delphi 2010和UIB来访问Firebird数据库。

我正在尝试运行查询

    SELECT
        RECID
    FROM TABLE
    WHERE ((:DX = '') OR (DX=:DX))
        AND ((:POSTCODE='') OR (POSTCODE=:POSTCODE))

请注意,我在语句中使用每个命名参数两次。

当我在 TUIBQuery 中准备它时,我得到 ParamCount=2 和两个名为 DX 的参数。当我跟踪代码时,我看到 TSQLParams.Parse 传递我的 SQL 并调用 AddFieldA 四次。我可以看到重复项被识别并添加到FXSQLDA的末尾,但FParamCount没有增加。

作为临时的愚蠢修复,我添加了这样的增量,现在我得到(DX,DX,POSTCODE,POSTCODE)作为参数列表。这种工作。

问题:

  • 火鸟是否支持我正在尝试的那种参数重用?
  • 通过UIB?
  • 我的修复可行吗?
  • 有更好的修复方法吗?

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

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

相关内容