Consultor Eletrônico



Kbase P90751: Error 201 using BUFFER-COMPARE with dynamically created buffers
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   3/17/2009
Status: Verified

SYMPTOM(s):

Error 201 using BUFFER-COMPARE with dynamically created buffers

** Unknown Field or Variable name - <field-name>. (201)

Using BUFFER-COMPARE statement to compare two dynamically created buffers, for example:

buffer-compare hBuffer to hBuffer2 save result in cChangedData.

FACT(s) (Environment):

Progress 9.x
OpenEdge 10.x
All Supported Operating Systems

CAUSE:

The BUFFER-COMPARE statement cannot be used with the buffer object handle, only with static buffers.

FIX:

Use the BUFFER-COMPARE method with the buffer object handle. This does not provide the "save result in" functionality, additional coding is required to determine which exact fields are different.
For example:


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.