【问题标题】:progress 4gl query for export count of records in all table available in db进度 4gl 查询数据库中所有可用表中记录的导出计数
【发布时间】:2018-04-11 07:20:59
【问题描述】:

我正在尝试导出 excel 或文本文件中所有表格的计数。

if any program or any query will help me ? 

我正在尝试编写每个表中可用数据的导出计数。

代码:

  define stream table t1.
    output stream t1 to t1.csv.

    &scope-define display-fields count(*)

    select count(*) from emp.

    export starem t1 delimiter ",".

此代码使用空值创建 excel,但在屏幕上显示结果。我在excel中。

【问题讨论】:

  • 我正在尝试对每个表中可用数据的导出计数进行编码。代码:定义流表t1。输出流 t1 到 t1.csv。 &scope-define display-fields count(*) select count(*0 from emp.export starem t1 delimiter ","。这段代码用空值创建excel,但在屏幕上显示结果。i out in excel.

标签: openedge progress-4gl progress-db 4gl


【解决方案1】:

不确定你想做什么。如果你想计算数据库中表的数量,这样的事情:

DEFINE VARIABLE icount AS INTEGER NO-UNDO.
FOR each _file NO-LOCK WHERE _file._owner = "PUB":

    /* Skip "hidden" virtual system tables */
    IF _file._file-name BEGINS "_" THEN NEXT.

    iCount = iCount + 1.
END.

MESSAGE iCount "tables in the database"
    VIEW-AS ALERT-BOX INFORMATION.

如果您连接了多个数据库,则需要在 _file-table 前面加上数据库名称,即 database._file

但是:既然您说“导出到 excel”,也许您的意思是您想知道每个表的记录数?

要计算表中的记录数,您可以使用FORSELECT

SELECT COUNT(*) FROM tablename.

DEFINE VARIABLE iCount AS INTEGER NO-UNDO.  
FOR EACH tablename NO-LOCK TABLE-SCAN:
    iCount = iCount + 1.
END.
DISPLAY iCount.

如果您不想为每个表编写此代码,则需要将其与计算所有记录的动态查询结合起来。

DEFINE VARIABLE hQuery  AS HANDLE    NO-UNDO.
DEFINE VARIABLE hBuffer AS HANDLE    NO-UNDO.
DEFINE VARIABLE iCount  AS INTEGER   NO-UNDO.
DEFINE VARIABLE cTable  AS CHARACTER NO-UNDO.

/* Insert tablename here */
cTable = "TableName".

CREATE QUERY hQuery.
CREATE BUFFER hBuffer FOR TABLE cTable.

hQuery:SET-BUFFERS(hBuffer).

hQuery:QUERY-PREPARE(SUBSTITUTE("FOR EACH &1", cTable)).

hQuery:QUERY-OPEN.

queryLoop:
REPEAT:

    hQuery:GET-NEXT().

    IF hQUery:QUERY-OFF-END THEN LEAVE queryLoop.

    iCount = iCount + 1.
END.

DELETE OBJECT hQuery.
DELETE OBJECT hBuffer.

MESSAGE iCount "records in the table".

将这两者结合起来,您就有了解决方案。但是它可能会很慢,因为它会计算所有表的所有记录。

如果您可以通过提示访问它,那么一种快速而肮脏的方法是在数据库上运行“tabanalys”:

proutil DatabaseName -C tabanalys > tabanalys.txt

这可以在线运行,并且可能会对文件 io 等产生影响,因此请在非高峰时间第一次运行以确保。然后查看该文件,您将看到所有表的记录数、大小等:系统表和用户表。

Proutil 在线运行可能不是 100% 正确,但很可能“足够好”。

【讨论】:

  • 我要统计表中的数据?
  • 我更新了一个如何做到这一点的例子(以及一种可能更聪明的方法)。
  • 只是想问一下我添加了一些有问题的代码,但是会创建空白的 excel .. 你可以添加任何东西吗?
  • 该代码实际上没有任何意义...范围定义在您的情况下没有任何作用。定义流不采用任何表属性。等等。你需要对 Progress ABL 有一些基本的了解。
猜你喜欢
  • 2010-09-27
  • 2015-09-15
  • 2023-03-28
  • 2014-12-07
  • 2020-05-03
  • 1970-01-01
  • 2013-08-28
相关资源
最近更新 更多