Consultor Eletrônico



Kbase P125242: How to pass more than 32K of data from a MEMPTR to a LONGCHAR variable
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   10/3/2007
Status: Unverified

GOAL:

How to pass more than 32K of data from a MEMPTR to a LONGCHAR variable

FACT(s) (Environment):

OpenEdge 10.x

FIX:

Option #1 - Covers scenarios where the amount of data contained within the MEMPTR is unknown

DEFINE VARIABLE mTest AS MEMPTR NO-UNDO.
DEFINE VARIABLE i AS INTEGER NO-UNDO.
DEFINE VARIABLE clTest AS LONGCHAR NO-UNDO.

SET-SIZE(mTest) = 100000.

DO i = 1 TO 33004:
PUT-BYTE(mTest,i) = 102.
END.

DEFINE VARIABLE cTmp AS CHARACTER NO-UNDO.
DEFINE VARIABLE iStart AS INTEGER NO-UNDO.
&GLOBAL-DEFINE chunk 30000
ASSIGN clTest = ""
iStart = 1.

bloExtract:
DO WHILE TRUE:
ASSIGN cTmp = GET-STRING(mTest, iStart) NO-ERROR.
IF ERROR-STATUS:NUM-MESSAGES > 0 THEN DO:
ASSIGN cTmp = GET-STRING(mTest, iStart, {&chunk}) NO-ERROR.
IF ERROR-STATUS:NUM-MESSAGES > 0 THEN DO:
MESSAGE "A real error occurred."
VIEW-AS ALERT-BOX INFO BUTTONS OK.
STOP.
END.
END.

ASSIGN clTest = cltest + cTmp.

IF LENGTH(cTmp) <> {&chunk} THEN
LEAVE bloExtract.
ASSIGN iStart = iStart + {&chunk}.
END.

MESSAGE LENGTH(clTest)
VIEW-AS ALERT-BOX INFO BUTTONS OK.


Option #2 - Covers scenarios where the amount of data contained within the MEMPTR is known

DEFINE VARIABLE mTest AS MEMPTR NO-UNDO.
DEFINE VARIABLE i AS INTEGER NO-UNDO.
DEFINE VARIABLE clTest AS LONGCHAR NO-UNDO.

SET-SIZE(mTest) = 100000.
DO i = 1 TO 50000:
PUT-BYTE(mTest,i) = 102.
END.

COPY-LOB FROM mTest STARTING AT 1 FOR 50000 TO clTest.

MESSAGE LENGTH(clTest)
VIEW-AS ALERT-BOX INFO BUTTONS OK.

SET-SIZE(mTest) = 0.