我正在使用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)作为参数列表。那种作品。
问题:
答案 0 :(得分:1)
Firebird本身不支持动态SQL中的命名参数(在程序SQL中也是如此)。 Firebird仅支持位置参数。
因此,您的驱动程序会将命名参数转换为位置。