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.