我在flamerobin中找到了一些代码,可以返回数据库中所有表的记录数,但我只能在tfdscript中运行它,该脚本工作正常,但没有可访问的结果集。
我在tfdquery和tfdcommand中尝试了各种方法,并查看了tfdconnection,但它们都出现了错误“无法分析对象”set term“”,因为它们不需要脚本。
在搜索了ages之后,我找不到任何从tfdscript访问结果的方法,尽管有一个提示它可以,因为它有一个fetchoptions属性。
我有下面的脚本,并将感谢任何指导。
set term !! ;
EXECUTE BLOCK
returns ( stm varchar(60), cnt integer )
as
BEGIN
for select cast('select count(*) from "'||trim(r.RDB$RELATION_NAME)||'"' as varchar(60))
from RDB$RELATIONS r
where (r.RDB$SYSTEM_FLAG is null or r.RDB$SYSTEM_FLAG = 0) and r.RDB$VIEW_BLR is null
order by 1
into :stm
DO
BEGIN
execute statement :stm into :cnt;
suspend;
END
END
1条答案
按热度按时间2lpgd9681#
我无法立即找到从fdscript获取结果集的方法。但是,使用配置为访问firebird数据库的fdquery获取结果集很简单,最好是通过fdconnection。
将tfdconnection和tfdquery放在新vcl项目的窗体上。
将tdatasource和tdbgrid添加到表单中,tdatasource的dataset设置为fdquery1,dbgrid1的datasource设置为datasource1。将dbgrid1的宽度设置为500或更大。
将fdquery1的sql.text设置为
当然,这只是你引用的剧本的内容,减去
Set Term ...
声明,这是不需要的。将fdquery1的active设置为true,查询内容应该出现在dbgrid中。
更新我不知道你为什么会得到你的评论中提到的错误,因为上面的代码在delphi seattle中对demo employee.fdb数据库运行良好。如果问题仍然存在,您可以使用下面的代码自己生成必要的sql并执行它。
注意:如果您不熟悉它,构造
%0:s
表示“将const passes数组中第一个值的值替换为format”。我用它在同一个格式表达式中两次替换tablename值。