Consultor Eletrônico



Kbase P55746: How to use 2 separate buffers on a temp-table
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   2/5/2008
Status: Unverified

GOAL:

How to use 2 separate buffers on a temp-table

GOAL:

How to use 2 separate buffers on a temp-table, moving through the second buffer one record ahead of the first buffer

FACT(s) (Environment):

All Supported Operating Systems
Progress 9.x
OpenEdge 10.x

FIX:

Sample code:

DEFINE VARIABLE qh AS HANDLE NO-UNDO.
DEFINE VARIABLE bh AS HANDLE NO-UNDO.
DEFINE VARIABLE bh2 AS HANDLE NO-UNDO.
DEFINE VARIABLE fld1 AS HANDLE NO-UNDO.
DEFINE VARIABLE fld2 AS HANDLE NO-UNDO.
DEFINE VARIABLE valRow1 AS INTEGER NO-UNDO.
DEFINE VARIABLE valRow2 AS INTEGER NO-UNDO.
DEFINE VARIABLE tth AS HANDLE NO-UNDO.
DEFINE VARIABLE bhCust AS HANDLE NO-UNDO.
DEFINE VARIABLE vRowid AS ROWID NO-UNDO.

bhCust = BUFFER customer:HANDLE.

CREATE TEMP-TABLE tth.
tth:CREATE-LIKE(bhCust).
tth:TEMP-TABLE-PREPARE("ttCust").

/* creates first buffer against temp-table */
bh = tth:DEFAULT-BUFFER-HANDLE.

/* populates the temp-table */
FOR EACH customer:
bh:BUFFER-CREATE.
bh:BUFFER-COPY(bhCust).
END.

/* creates second buffer against temp-table */
CREATE BUFFER bh2 FOR TABLE tth:DEFAULT-BUFFER-HANDLE BUFFER-NAME 'buffertje':U.

CREATE QUERY qh.
qh:SET-BUFFERS(bh).
qh:QUERY-PREPARE("for each ttCust where custnum < 100").
qh:QUERY-OPEN.
qh:GET-NEXT.

IF qh:QUERY-OFF-END THEN LEAVE.
ELSE
REPEAT WHILE NOT qh:QUERY-OFF-END :
vRowid = bh:ROWID.

qh:GET-NEXT().

IF qh:QUERY-OFF-END THEN LEAVE.

/* sets second buffer to the same position as the first buffer */
bh2:FIND-BY-ROWID(vROWID).

ASSIGN fld1 = bh2:BUFFER-FIELD('custnum':U)
fld2 = bh:BUFFER-FIELD('custnum':U)
valRow1 = fld1:BUFFER-VALUE()
valRow2 = fld2:BUFFER-VALUE().

DISPLAY valRow1 valRow2.

END.

qh:QUERY-CLOSE().
DELETE OBJECT qh.
bh:BUFFER-RELEASE().
bh2:BUFFER-RELEASE().
DELETE OBJECT bh2.
DELETE OBJECT tth.