首页 > 解决方案 > 在现有表的情况下如何有条件地编译?

问题描述

我正在使用 Progress-4GL、11.6 版、appBuilder 和过程编辑器。

我刚刚创建了一个名为“table_X”的表,我在代码中使用它,例如:

FIND table_X ...

但是,我的程序是通用的,但是表是基于自定义的(有些客户有这个表,但有些没有)。

所以,我想添加一个“预处理器”,比如:

&IFDEF table_X
&THEN FIND table_X ...
&END

其中的&IFDEF意思是:“仅当数据库中存在该表时才编译这段代码”。

这在 Progress-4GL 版本 11.6 中是否可行?

标签: openedgeprogress-4glpreprocessor-directive

解决方案


如果您使用的是静态查询,则需要在编译时使用的环境中添加定义。在您的标准目录中:

// env.i

// nothing (yet)

在您的客户目录中:

// env.i

&global define table_x

然后您可以在编译时将其与您的propath.

{ 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.

虽然这可能很有吸引力,但这确实意味着您正在为所有客户增加可能不相关的运行时检查的负担。


推荐阅读