4

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

4

3 回答 3

4
/* 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" ).
于 2012-08-11T19:07:52.067 回答
1

或者您可以使用 clasic FOR EACH:

DEFINE VARIABLE iCount AS INT NO-UNDO.

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

DISPLAY iCount.
于 2012-08-14T08:54:00.663 回答
0

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

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-05-11T15:58:41.170 回答