【问题标题】:How to customise table content dump in Progress-4GL database administration如何在 Progress-4GL 数据库管理中自定义表格内容转储
【发布时间】:2021-04-30 06:07:28
【问题描述】:

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

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

但有一个问题:在生成的 *.d 文件中,字段使用空格分隔,但某些字段中有一些空格,导致结果在 Excel 中“不可导入”。因此,我想用该表中肯定没有使用的字符来分隔字段(竖线字符(“|”)非常适合。

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

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

如果在 *.d 表内容转储中包含列标题也很好,这可能吗?

编辑
同时我发现一些字符字段包含换行符,导致表格内容转储分布在不同的行上。当然,这会使整个东西无法使用。有什么办法不去*.d文件中的新行吗?

提前致谢

【问题讨论】:

  • 检查管理->导出数据->数据管理工具中的文本菜单项。您可以为“要导出的字段”选项选择“全部”。 “字段分隔符”可以留空并选择“|”作为“字段分隔符”(或您选择的任何字符)。此可能失败的唯一情况是字段的值分布在不同的行上。
  • 另外,还有一篇关于此的知识库文章。它可能对您有所帮助:knowledgebase.progress.com/articles/Article/P8426
  • @Austin:你是救命稻草 :-) 请在回答中描述你对“管理、导出数据”菜单的评论,我会接受。

标签: openedge progress-4gl


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    不幸的是,Progress ABL 方法 write-json 和 write-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 ).
    
    

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

    【讨论】:

      【解决方案3】:

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

      您可以使用如下所示的内容。这基本上就是数据字典的作用。

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

      如果您想通用/动态地编写此代码,还有很多工作要做,您最终可能会使用 bufferbuffer-field 句柄以及 PUT UNFORMATTED

      【讨论】:

        猜你喜欢
        • 2019-05-26
        • 2015-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多