问题描述
我正在使用 Progress-4GL 版本 11.6、appBuilder 和过程编辑器。
我刚刚创建了一个名为“table_X”的表,我在代码中使用它,例如:
FIND table_X ...
不过,我的程序是通用的,但是表是定制的(有些客户有这个表,有些没有)。
&IFDEF table_X
&THEN FIND table_X ...
&END
其中 &IFDEF
的意思是:“仅当数据库中存在该表时才编译这段代码”。
这在 Progress-4GL 版本 11.6 中是否可行?
提前致谢
解决方法
如果您使用静态查询,则需要在编译时使用的环境中添加定义。在您的标准目录中:
// env.i
// nothing (yet)
在您的客户目录中:
// env.i
&global define table_x
然后您可以在编译时使用您的 propath
,如果您的 propath 以客户目录开头,则选择定义,否则 env.i 从您的标准目录中获取并且 table_x 未定义:
{ env.i }
&if defined( table_x ) &then
find table_x no-lock.
&endif
如果你可以用动态使用替换这个表的静态使用,那么你不需要定义,你可以:
def var hb as handle no-undo.
create buffer hb for table "table_x" no-error.
if valid-handle( hb ) then do:
hb:find-unique( no-lock ).
end.
虽然这可能很有吸引力,但它确实意味着您正在给所有客户带来可能不相关的运行时检查。