如何在 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
我正在使用 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.
上写入-xmldef 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