【问题标题】:command to find the number of entries in a temp table命令查找临时表中的条目数
【发布时间】:2012-08-10 15:24:25
【问题描述】:

在临时表中查找条目/行数的命令是什么?版本 10.2b

【问题讨论】:

  • 好的,谢谢。为什么这应该投反对票?!?!我到处找,找不到,所以我想在这里问一下,以防我遗漏了什么。
  • @Bill 你的问题没有错。人们可能只是因为你强调 OpenEdge 最核心数据结构的一个重大缺陷而生气
  • 有些人只是通过“进步很烂”的镜头来看待一切。当你取下眼罩时,事情通常会变得更好。
  • @TomBascom 完全同意你的看法
  • 别被愚弄了,人们,进步确实很糟糕。关闭眼罩后情况会变得更糟。

标签: progress-4gl openedge


【解决方案1】:
/* create a temp-table so that we can test this technique
 */

define temp-table ttTest
  field id as int
.

create ttTest.
id = 1.
create ttTest.
id = 2.

/* how many records?
 */

define query q for ttTest cache 0.
open query q preselect each ttTest.
display num-results( "q" ).

【讨论】:

  • 太糟糕了,临时表对象没有NUM-RECORDS 属性。当然,临时表确切地知道它包含多少行,并且是单线程的,Progress 不需要担心任何类型的并发并发症。奇怪的是,他们想添加一个 HAS-RECORDS 属性来检查是否为空,但没有一个带有实际数字的属性。
  • 我也有同样的想法。我会尽量记住在我为开发提供有用输入的净时间提出建议;)
【解决方案2】:

或者您可以使用 clasic FOR EACH:

DEFINE VARIABLE iCount AS INT NO-UNDO.

FOR EACH ttTest:
  iCount = iCount + 1.
END.

DISPLAY iCount.

【讨论】:

    【解决方案3】:

    这是我的,适用于任何临时表:

    FUNCTION TT_NBREC RETURNS INTEGER ( INPUT pr_hd_temptable AS HANDLE ) :
    
        DEFINE VARIABLE in_nbrec  AS INTEGER   NO-UNDO INITIAL 0.
        DEFINE VARIABLE hd_buffer AS HANDLE    NO-UNDO.
        DEFINE VARIABLE hd_query  AS HANDLE    NO-UNDO.
        DEFINE VARIABLE ch_query  AS CHARACTER NO-UNDO.
        DEFINE VARIABLE ch_table  AS CHARACTER NO-UNDO.
        DEFINE VARIABLE lg_error  AS LOGICAL   NO-UNDO.
    
        ASSIGN
            ch_table = pr_hd_temptable:NAME
            ch_query = "FOR EACH " + ch_table + " NO-LOCK".
        CREATE BUFFER hd_buffer FOR TABLE ch_table.
        CREATE QUERY  hd_query.
        hd_query:ADD-BUFFER( hd_buffer ).
        lg_error = hd_query:QUERY-PREPARE( ch_query ) NO-ERROR.
        hd_query:QUERY-OPEN().
        hd_query:GET-FIRST().
        DO WHILE NOT hd_query:QUERY-OFF-END :
            ASSIGN in_nbrec = in_nbrec + 1.
            hd_query:GET-NEXT().
        END.
        hd_query:QUERY-CLOSE().
        DELETE OBJECT hd_query.
        DELETE OBJECT hd_buffer.
        ASSIGN
            hd_query  = ?
            hd_buffer = ?.
    
        RETURN in_nbrec.
    END FUNCTION.
    

    只需将您的临时表句柄传递给它,您就可以获得记录数。 它当然可以改进,但对我来说运行得足够快。

    【讨论】:

      猜你喜欢
      • 2015-09-30
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      • 2011-11-21
      • 1970-01-01
      • 2013-02-05
      • 1970-01-01
      • 2015-09-09
      相关资源
      最近更新 更多