如何在 Progress-4GL 数据库管理中自定义 table 内容转储

How to customise table content dump in Progress-4GL database administration

我正在使用 Progress-4GL,我正在处理相当大的 table(+130 个字段,+8000 个元组)。

为了查看 table,我决定转储 table 的条目并将其导入 Excel。这看起来很简单:只需使用“数据管理”菜单、“管理”菜单、“转储数据和定义”菜单项、“Table 内容”(文件扩展名:*.d)。

但有一个问题:在生成的 *.d 文件中,字段使用 space 分隔,但在某些字段中有一些 space,使得结果“ Excel 中的 unimportable”。因此,我想用一个肯定不会在 table 中使用的字符来分隔字段(竖线字符(“|”)非常适合。

有谁知道我如何告诉我的通用框架(OpenEdge Desktop,11.6 版,而不是任何“Studio”IDE)在 *.d [=42] 中使用另一个字符作为分隔符=] 内容转储?

很可能这是要完成的,使用 Progress.ini 文件中的一个条目(作为 的答案),但我不知道我正在处理哪个条目。

*.d table 内容转储中包含 headers 列也很好,这可能吗?

编辑
同时我发现一些字符字段包含换行符,导致 table 内容转储分布在不同的行上。当然,这会使整个事情无法使用。有没有办法不在 *.d 文件中换行?

提前致谢

您必须自己编写代码来执行此操作。 EXPORT 声明是你的朋友。

您可以使用类似下面的内容。这基本上就是数据字典所做的。

OUTPUT TO 'customer.psv'.    // choose your filename
FOR EACH Customer NO-LOCK:
    EXPORT DELIMITER '|' Customer.
END.
OUTPUT CLOSE.

如果你想写这个 generically/dynamically 还有很多事情要做,你可能最终会使用 buffer and buffer-field handles, and PUT UNFORMATTED

我最喜欢的数据格式是json,不幸的是Excel不能直接读取json,但是可以读取xml。

不幸的是,Progress ABL 方法 write-json 和 write-xml 不适用于数据库缓冲区,因此您需要像数据库 table,缓冲复制记录,然后在 temp-table.

上写入-xml
def var ctable as char no-undo initial "customer".

def var hq   as handle no-undo.
def var ht   as handle no-undo.
def var hbtt as handle no-undo.
def var hbdb as handle no-undo.

create buffer hbdb for table ctable.

create temp-table ht.
ht:create-like( hbdb ).
ht:temp-table-prepare( ctable ).
hbtt = ht:default-buffer-handle.

create query hq.
hq:add-buffer( hbdb ).
hq:query-prepare( "for each " + hbdb:name ).
hq:query-open().
do while hq:get-next( no-lock ):

  hbtt:buffer-create().
  hbtt:buffer-copy( hbdb ).

end.

ht:write-xml( "file", ctable + ".xml", true ).

请注意,我不是在清理自己。 如有必要,您可以向查询添加过滤器。 如有必要,您可以在副本中省略字段。

检查数据管理工具中的 Admin->Export Data->Text 菜单项。您可以 select “全部”作为“要导出的字段”选项。 “字段分隔符”可以留空,选择“|”作为“字段分隔符”(或您选择的任何字符)。唯一可能失败的是当一个字段的值分布在不同的行上时。

此外,还有一篇关于此的知识库文章。它可能有帮助:http://knowledgebase.progress.com/articles/Article/P8426