Consultor Eletrônico



Kbase P21679: How to pass a pointer and/or handle in a temp table.
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   26/05/2005
Status: Unverified

GOAL:

How to pass a static temp-table handle to an external procedure?

FACT(s) (Environment):

Progress 9.x

FIX:

The following sample code demonstrates how to pass a static temp-table handle to an external procedure:

/**************************************************
main.p:
1. Creates and populates a temp-table.
2. Calls extproc.p passing it the temp-table
handle for processing
**************************************************/
DEFINE VARIABLE hTempTable AS HANDLE NO-UNDO.
DEFINE VARIABLE i AS INTEGER NO-UNDO.

DEFINE TEMP-TABLE tt1
FIELD tt1f1 AS INTEGER
FIELD tt1f2 AS CHARACTER.


/* Store the temp-table handle */
ASSIGN
hTempTable = TEMP-TABLE tt1:HANDLE.

/*populate the temp-table*/
DO i = 1 TO 3:
CREATE tt1.
ASSIGN
tt1f1 = RANDOM(65,90)
tt1f2 = CHR(tt1f1).
END.

/* Run the external procedure */
RUN extproc.p (INPUT TABLE-HANDLE hTempTable).
/**************************************************/


/**************************************************
extproc.p:
1. Receives a staticTEMP-TABLE TABLE-HANDLE.
2. Lists all the fields of the temp-table.
**************************************************/
DEFINE INPUT PARAMETER TABLE-HANDLE hTempTable.
DEFINE VARIABLE bh AS HANDLE NO-UNDO.
DEFINE VARIABLE bf AS HANDLE NO-UNDO.
DEFINE VARIABLE hq AS HANDLE NO-UNDO.
DEFINE VARIABLE iCounter AS INTEGER NO-UNDO.

IF hTempTable = ? THEN RETURN.

bh = hTempTable:DEFAULT-BUFFER-HANDLE.

CREATE QUERY hq.
hq:SET-BUFFERS(bh).
hq:QUERY-PREPARE("FOR EACH " + hTempTable:NAME).
hq:QUERY-OPEN.

REPEAT:
hq:GET-NEXT.
IF hq:QUERY-OFF-END THEN LEAVE.

DO iCounter = 1 TO bh:NUM-FIELDS:
ASSIGN bf = bh:BUFFER-FIELD(iCounter).
MESSAGE bf:STRING-VALUE
VIEW-AS ALERT-BOX INFO BUTTONS OK.
END.
END.
/**************************************************/