1

我正在使用 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) 作为参数列表。那种作品。

问题:

  • Firebird 是否支持我尝试的那种参数重用?
  • 通过 UIB?
  • 我的修复可行吗?
  • 有更好的修复吗?
4

1 回答 1

1

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

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

于 2014-02-23T20:11:48.090 回答