1

我有以下代码:

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.

我做错了什么,我该如何解决?

4

2 回答 2

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 中列出的给定显示的所有表单的所有表单字段。

于 2015-10-22T21:13:38.913 回答
0

db 模式中的 dfs 和表单之间可能已经存在关系,但文档很差。但是,您可以创建自己的。请注意,dfs 是 displayforms 的角色。

添加 1 rels 让 relname = 'dfsforms' relcondition = 'dfs.formname = forms.formname' reltype = 'ZIM' dirname = 'ZIM'

创建 rel dfsforms

现在您可以使用以下方法找到与显示相关的表单:

查找所有显示 dispdispforms dfs dfsforms forms formformformfields wh display.displayname = 'dsp020a'

于 2019-11-01T22:06:06.157 回答