Consultor Eletrônico



Kbase P118294: How to access the data of a dynamic TEMP-TABLE given its handle?
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   8/26/2006
Status: Unverified

GOAL:

How to access the data of a dynamic TEMP-TABLE given its handle?

FIX:

This solution contains two procedures. The first procedure creates and populates a dynamic temp-table object while the second displays its data after receiving its handle as input:
/* CreateAndPopulateDynamicTempTable.p */
DEFINE VARIABLE hTempTableObjectHandle AS HANDLE.
DEFINE VARIABLE hBufferObjectHandle AS HANDLE.
DEFINE VARIABLE hTableBufferHandle AS HANDLE.
/* get database customer table buffer handle */
hTableBufferHandle = BUFFER customer:HANDLE.
/* create a dynamic temp-table object */
CREATE TEMP-TABLE hTempTableObjectHandle.
/* give it the customer table fields and indexes */
hTempTableObjectHandle:CREATE-LIKE(hTableBufferHandle).
/* no more fields or indexes will be added to custx */
hTempTableObjectHandle:TEMP-TABLE-PREPARE("dyntt" + "Customer").
/* get the buffer handle for the temp-table */
hBufferObjectHandle = hTempTableObjectHandle:DEFAULT-BUFFER-HANDLE.
/*populate the table from customer table */
FOR EACH customer WHERE custnum < 5:
hBufferObjectHandle:BUFFER-CREATE.
hBufferObjectHandle:BUFFER-COPY(hTableBufferHandle).
END.
/* Call the external procedure that will display the contents of the temp-table given its handle */
RUN DisplayDynamicTempTableGivenItsHandle.p(INPUT hTempTableObjectHandle).
/* DisplayDynamicTempTableGivenItsHandle.p */
DEFINE INPUT PARAMETER hTempTableObjectHandle AS HANDLE.
DEFINE VARIABLE hBufferObjectHandle AS HANDLE.
DEFINE VARIABLE hQueryObjectHandle AS HANDLE.
DEFINE VARIABLE hFieldObjectHandle AS HANDLE NO-UNDO.
DEFINE VARIABLE iFieldCounter AS INTEGER NO-UNDO.
/* get the buffer object handle of the temp-table default buffer */
ASSIGN
hBufferObjectHandle = hTempTableObjectHandle:DEFAULT-BUFFER-HANDLE.
/*run a query to access it*/
CREATE QUERY hQueryObjectHandle.
hQueryObjectHandle:SET-BUFFERS(hBufferObjectHandle).
hQueryObjectHandle:QUERY-PREPARE( "for each " + hTempTableObjectHandle:NAME + "
no-lock").
hQueryObjectHandle:QUERY-OPEN.
REPEAT:
hQueryObjectHandle:GET-NEXT.
IF hQueryObjectHandle:QUERY-OFF-END THEN LEAVE.
REPEAT iFieldCounter = 1 TO hBufferObjectHandle:NUM-FIELDS:
hFieldObjectHandle = hBufferObjectHandle:BUFFER-FIELD(iFieldCounter).
DISPLAY hFieldObjectHandle:NAME FORMAT "x(15)"
hFieldObjectHandle:BUFFER-VALUE FORMAT "x(20)" WITH STREAM-IO.
END.
END.