openedge - 在现有表的情况下如何有条件地编译?
问题描述
我正在使用 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
.
{ 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.
虽然这可能很有吸引力,但这确实意味着您正在为所有客户增加可能不相关的运行时检查的负担。
推荐阅读
- javascript - 自动完成无法通过 https laravel php
- angular - Angular 11 Firebase 服务器端渲染无限加载/挂起
- google-translate - 谷歌翻译与谷歌云翻译
- python - Keras 中的 1D CNN:如果过滤器的数量和 kernel_size 太低,它会在序列中间停止卷积吗?
- php - Codeigniter 4 在最新的 PHP 8 中不起作用
- html - 如何使 django 酥脆的表单具有响应性?
- oracle - Oracle 函数的小字符串缓冲区
- python - 如何从 pandas 数据框中的大型每日 JSON 数据集计算平均月值?
- javascript - 通过 ids vue js 查找/过滤包括数组
- ios - 所有情节提要、xib 文件都不会在 Macbook Pro M1 上使用 Rosetta 更新框架或约束(与 IBAgent-iOS 通信时遇到错误)