我有以下代码:
set output spoole
select * from displays where displayname='dsp020a'
select * from forms where formname in (select formname from displayforms where displayname='dsp020a')
select * from formfields where formname in (select formname from displayforms where displayname='dsp020a')
第三个选择是使ZIM崩溃并出现以下错误:
*** ZIM System Error *** The Zim tree pool has overflowed. Type BYE to exit from Zim.
我做错了什么,如何解决?
答案 0 :(得分:2)
当尝试在ZIM中使用SQL时,我也看到了问题和意外错误。您应该始终尝试使用本机ZIM 4GL命令来访问数据以及对象定义。
ZIM数据字典包含一些预定义的内部关系,可以帮助分析数据模型。例如,您可以说:
list all Displays DispDispForms DisplayForms where Displays.DisplayName = "dsp020a"
找出给定显示中包含哪些表单。你也可以这样做:
list all Forms FormFormFields FormFields where Forms.FormName in ("f020a", "f020b", "f020c")
列出属于给定表单的所有表单字段。不幸的是,DisplayForms和Forms之间没有任何关系,因此您无法直接使用SQL实现在示例中尝试的内容。
或(在评论后添加):
您可以使用小程序实现这一目标。对于这个例子,它将是:
set output output_file
find Displays DispDispForms DisplayForms where Displays.DisplayName = "dsp020a"
while $setcount > 0
let vStr = DisplayForms.FormName
list all Forms FormFormFields FormFields where Forms.FormName = vStr
let $setcount = $setcount - 1
next
endwhile
set output terminal
现在您拥有所有表单字段,这些字段属于output_file中列出的给定显示的所有形式。
答案 1 :(得分:0)
dfs和db模式中的表单之间可能已经存在关系,但是文档很差。但是,您可以创建自己的。请注意,dfs是displayforms的角色。
添加1个rels relname ='dfsforms'relcondition ='dfs.formname = forms.formname'reltype ='ZIM'dirname ='ZIM'
创建rel dfsforms
现在,您可以使用以下方式找到与显示相关的表单:
查找所有显示dispdispforms dfs dfsforms表单显示的formformformfields。displayname='dsp020a'