Consultor Eletrônico



Kbase 21191: 4GL. How to Get Two Buffer Handles to the same Temp-Table Handle
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   24/10/2008
Status: Verified

GOAL:

How to properly create and use two dynamic buffers against a single dynamic temp-table.

FACT(s) (Environment):

Progress 9.1x

FIX:

DEFINE VARIABLE hTempTable AS HANDLE  NO-UNDO.
DEFINE VARIABLE hBuffer1   AS HANDLE  NO-UNDO.
DEFINE VARIABLE hBuffer2   AS HANDLE  NO-UNDO.
DEFINE VARIABLE hField1    AS HANDLE  NO-UNDO.
DEFINE VARIABLE hField2    AS HANDLE  NO-UNDO.
DEFINE VARIABLE hQuery1    AS HANDLE  NO-UNDO.
DEFINE VARIABLE hQuery2    AS HANDLE  NO-UNDO.
DEFINE VARIABLE iLoop      AS INTEGER NO-UNDO.

CREATE TEMP-TABLE hTempTable.

hTempTable:ADD-NEW-FIELD("Field1", "Integer").

hTempTable:TEMP-TABLE-PREPARE("MyTempTable").

hBuffer1 = hTempTable:DEFAULT-BUFFER-HANDLE.
hField1  = hBuffer1:BUFFER-FIELD("Field1").

DO iLoop = 1 TO 20:
   hBuffer1:BUFFER-CREATE().
   hField1:BUFFER-VALUE = iLoop.
   hBuffer1:BUFFER-RELEASE().
END.

CREATE BUFFER hBuffer2 FOR TABLE hBuffer1 BUFFER-NAME "MyTempTable".

hField1  = hBuffer1:BUFFER-FIELD("Field1").
hField2  = hBuffer2:BUFFER-FIELD("Field1").

MESSAGE hField1 SKIP hField2 VIEW-AS ALERT-BOX.

CREATE QUERY hQuery1.

hQuery1:SET-BUFFERS(hBuffer1).
hQuery1:QUERY-PREPARE("FOR EACH MyTempTable").
hQuery1:QUERY-OPEN().
hQuery1:GET-FIRST().

CREATE QUERY hQuery2.

hQuery2:SET-BUFFERS(hBuffer2).
hQuery2:QUERY-PREPARE("FOR EACH MyTempTable").
hQuery2:QUERY-OPEN().
hQuery2:GET-LAST().

DO WHILE hQuery1:QUERY-OFF-END = FALSE:
   MESSAGE "Buffer1 Value = " hField1:BUFFER-VALUE SKIP
           "Buffer2 Value = " hField2:BUFFER-VALUE VIEW-AS ALERT-BOX.
   hQuery1:GET-NEXT().
   hQuery2:GET-PREV().
END.

hQuery1:QUERY-CLOSE().
hQuery2:QUERY-CLOSE().

/* Note that we don't delete the dynamic buffers explicitly  */
/* since they both are based on the default buffer for the   */
/* temp-table and will get deleted automatically when the    */
/* temp-table gets deleted.                                  */

DELETE OBJECT hQuery1.
DELETE OBJECT hQuery2.
DELETE OBJECT hTempTable.