Consultor Eletrônico



Kbase P98084: Errors 26 and 7366 running solution P90751 code against a table with multiple extents
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   18/03/2009
Status: Verified

SYMPTOM(s):

Errors 26 and 7366 running solution P90751 code against a table with multiple extents

** Array subscript <value> is out of range. (26)

** Array subscript 0 is out of range. (26)

Unable to extract BUFFER-VALUE for field <fieldname>. (7366)

Unable to extract BUFFER-VALUE for field MonthQuote. (7366)

Error 26 and 7366 trying to get the BUFFER-VALUE of a extent field

Executing following code against the sports2000 table using the SalesRep array field generates the above errors if records are not identical:
DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
DEFINE VARIABLE hBuffer2 AS HANDLE NO-UNDO.
DEFINE VARIABLE qhBuffer AS HANDLE NO-UNDO.
DEFINE VARIABLE qhBuffer2 AS HANDLE NO-UNDO.
DEFINE VARIABLE hb AS HANDLE.
DEFINE VARIABLE totfields AS INTEGER NO-UNDO.
DEFINE VARIABLE iFieldNumber AS INTEGER.
DEFINE VARIABLE hfield1 AS HANDLE NO-UNDO.
DEFINE VARIABLE hfield2 AS HANDLE NO-UNDO.

CREATE BUFFER hBuffer FOR TABLE "sports1.salesrep".
CREATE BUFFER hbuffer2 FOR TABLE "sports2.salesrep".
CREATE QUERY qhBuffer.
qhBuffer:SET-BUFFERS(hBuffer).
qhBuffer:QUERY-PREPARE("for each sports1.salesrep").
CREATE QUERY qhBuffer2.
qhBuffer2:SET-BUFFERS(hBuffer2).
qhBuffer2:QUERY-PREPARE("for each sports2.salesrep").
qhBuffer:QUERY-OPEN.
qhBuffer2:QUERY-OPEN.
qhBuffer:GET-FIRST.
qhBuffer2:GET-FIRST.
DO WHILE NOT qhBuffer:QUERY-OFF-END:
IF NOT hbuffer2:BUFFER-COMPARE(hbuffer) THEN
DO:
totfields = hbuffer:NUM-FIELDS.
DO iFieldNumber = 1 TO totfields:
hfield1 = hbuffer:BUFFER-FIELD(iFieldNumber).
hfield2 = hbuffer2:BUFFER-FIELD(iFieldNumber).
IF hfield1:BUFFER-VALUE <> hfield2:BUFFER-VALUE THEN
MESSAGE hbuffer2:TABLE SKIP
hfield1:BUFFER-VALUE SKIP
hfield2:BUFFER-VALUE SKIP
VIEW-AS ALERT-BOX.
END.
END.
qhBuffer:GET-NEXT().
qhBuffer2:GET-NEXT().
END.

FACT(s) (Environment):

Executing code based on P90751 - Error 201 using BUFFER-COMPARE with dynamically created buffers
All Supported Operating Systems
Progress 9.x
OpenEdge 10.x

FIX:

The following modified version of the above code provides for the possibility that one or more fields of the tables involved may have multiple extents:
DEFINE VARIABLE hBuffer1 AS HANDLE NO-UNDO.
DEFINE VARIABLE hBuffer2 AS HANDLE NO-UNDO.
DEFINE VARIABLE qhBuffer1 AS HANDLE NO-UNDO.
DEFINE VARIABLE qhBuffer2 AS HANDLE NO-UNDO.
DEFINE VARIABLE hfield1 AS HANDLE NO-UNDO.
DEFINE VARIABLE hfield2 AS HANDLE NO-UNDO.
DEFINE VARIABLE totfields AS INTEGER NO-UNDO.
DEFINE VARIABLE iFieldNum AS INTEGER NO-UNDO.
DEFINE VARIABLE totextent AS INTEGER NO-UNDO.
DEFINE VARIABLE iCurExtnt AS INTEGER NO-UNDO.

CREATE BUFFER hBuffer1 FOR TABLE "sports1.salesrep".
CREATE BUFFER hbuffer2 FOR TABLE "sports2.salesrep".
CREATE QUERY qhBuffer1.
qhBuffer1:SET-BUFFERS(hBuffer1).
qhBuffer1:QUERY-PREPARE("for each sports1.salesrep").
CREATE QUERY qhBuffer2.
qhBuffer2:SET-BUFFERS(hBuffer2).
qhBuffer2:QUERY-PREPARE("for each sports2.salesrep").
qhBuffer1:QUERY-OPEN.
qhBuffer2:QUERY-OPEN.
qhBuffer1:GET-FIRST.
qhBuffer2:GET-FIRST.
DO WHILE NOT qhBuffer1:QUERY-OFF-END:
IF NOT hbuffer2:BUFFER-COMPARE(hBuffer1)
THEN DO:
totfields = hBuffer1:NUM-FIELDS.
DO iFieldNum = 1 TO totfields:
hfield1 = hBuffer1:BUFFER-FIELD(iFieldNum).
hfield2 = hbuffer2:BUFFER-FIELD(iFieldNum).
totextent = hfield1:EXTENT.
DO iCurExtnt = IF totextent = 0 THEN 0 ELSE 1 TO totextent:
IF hfield1:BUFFER-VALUE(iCurExtnt) <>
hfield2:BUFFER-VALUE(iCurExtnt) THEN
MESSAGE
hbuffer2:TABLE SKIP
hfield1:BUFFER-VALUE(iCurExtnt) SKIP
hfield2:BUFFER-VALUE(iCurExtnt) SKIP
VIEW-AS ALERT-BOX.
END.
END.
END.
qhBuffer1:GET-NEXT().
qhBuffer2:GET-NEXT().
END.