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.