我在运行时由我的程序用户定义的查询中获取字段列表时遇到问题.我让我的用户在备忘录控件中输入SQL查询,然后我想让他们浏览将返回的字段,并执行格式化输出,汇总列值等操作.因此
如果没有参数,我会很好,但我也必须让它们为查询定义过滤器参数.所以,如果我想将参数设置为null,我必须知道参数的数据类型是什么.
我正在使用Delphi 2006.我使用DBExpress组件TSQLConnection和TSQLQuery连接到Firebird 2.1数据库.以前,我成功使用:
for i:= 0 to Qry.Params.Count – 1 do Qry.Params [i] .value:= varNull;
当我尝试使用日期参数时,我发现我遇到了问题.只是巧合,直到那时我的所有参数都是整数(记录ID).事实证明,varNull只是一个枚举常量,值为1,所以我得到了可接受的结果(没有记录)工作正常.
我只需要一个字段列表.也许我应该只解析SQL语句的SELECT子句.我认为设置Qry.Prepared为True会给我一个字段列表,但没有这样的运气.它需要参数的值.
如果你有一个想法,我肯定想听听.谢谢你的帮助.
再次回复’因为我很感兴趣.我的方法有效(我的查询),因为它们已经预先定义了params’数据类型预设为正确的类型:)我不确定您是否期望查询知道或派生参数的数据类型,因为您甚至没有选择它操作的字段.
所以我认为您的查询设置和用户输入方法需要更多关注.我刚才看了一下我是怎么做到的.我不使用参数化查询 – 我只是从用户那里获得“参数值”并将它们直接放入SQL中.所以你的sql会读到:
SELECT s.hEmployee,e.sLastName
来自PR_Paystub s
INNER JOIN PR_Employee e ON e.hKey = s.hEmployee
WHERE s.dtPaydate> ’01 / 01 / 2008′
因此,不需要参数类型知识.不会阻止您的用户输入垃圾,但这会回到输入控件:)