如何遍历正在使用缓冲区访问的临时表



我发现了一篇文章,关于从类外部访问类内部声明的临时表。我正在尝试使用第二个解决方案(使用句柄和缓冲区)。虽然它有效(我可以从中获得第一个或最后一个元素),但我找不到一种方法来遍历整个临时表。

谢谢。

您可以创建一个动态查询并将其附加到缓冲区句柄:

如果在下面添加Class2.cls以供参考,那么它看起来完全相同。

Test2.p已更改:

DEF VAR c-class2 AS Class2.
DEF VAR local-ttbuf-hdl AS HANDLE.
DEF VAR tt-def-buff AS HANDLE.
c-class2 = NEW Class2().
local-ttbuf-hdl = c-class2:GetTempTableHandle().
tt-def-buff = local-ttbuf-hdl:DEFAULT-BUFFER-HANDLE.

/*
/* Find last is commented out */
tt-def-buff:FIND-LAST().
MESSAGE tt-def-buff:BUFFER-FIELD(1):buffer-value SKIP
        tt-def-buff:BUFFER-FIELD(2):buffer-value
        VIEW-AS ALERT-BOX.
*/
/**** New code here ****/
/* Define and create a dynamic query */
DEFINE VARIABLE hQuery AS HANDLE      NO-UNDO.
CREATE QUERY hQuery.
/* Set the buffer */
hQuery:SET-BUFFERS(tt-def-buff).
/* Create a query-string */
hQuery:QUERY-PREPARE("FOR EACH " + tt-def-buff:NAME).
/* Open the query */
hQuery:QUERY-OPEN.

REPEAT :
    /* Get the next record, for the first run it will be the first record */
    hQuery:GET-NEXT().
    /* Leave the repeat if there are no more records */
    IF hQuery:QUERY-OFF-END THEN LEAVE.
    /* Display */
    MESSAGE tt-def-buff:BUFFER-FIELD(1):buffer-value SKIP
            tt-def-buff:BUFFER-FIELD(2):buffer-value
            VIEW-AS ALERT-BOX.
END.
/* All created objects should be deleted */
DELETE OBJECT hQuery.

Class2.cls:

CLASS class2:
   DEF VAR i AS INTEGER.
   DEF TEMP-TABLE tt
          FIELD i1 AS INTEGER
          FIELD c1 AS CHARACTER.
   CONSTRUCTOR class2():
        DO i = 1 TO 10:
             CREATE tt.
             ASSIGN
                 tt.i1 = i
                 tt.c1 = STRING(i).
        END.
   END CONSTRUCTOR.
   METHOD PUBLIC HANDLE GetTempTableHandle():
        RETURN TEMP-TABLE tt:HANDLE.
   END.
END CLASS.

最新更新