Consultor Eletrônico



Kbase P124666: Error 1410 with Temp Table used as OUTPUT parameter and defined as NEW SHARED (BREAK BY scenario).
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   17/12/2008
Status: Unverified

FACT(s) (Environment):

OpenEdge 10.1B
All Supported Operating Systems

SYMPTOM(s):

Error 1410 running an ABL application:

Error code <number> returned from fdfnd. (1410)

Error code -20011 returned from fdfnd. (1410)

Error 1410 occurs upon return from a specific procedure.

In that procedure, a TEMP-TABLE is defined as OUTPUT parameter.

In that procedure, the same TEMP-TABLE is defined as NEW SHARED.

FOR EACH is used against the TEMP-TABLE with the BREAK BY option.

The BREAK BY option uses fields from the TEMP-TABLE.

The error cannot be reproduced in versions of OpenEdge prior to 10.1B.

CAUSE:

This is a known issue.

The cause is in the combination of the TEMP-TABLE being defined as NEW SHARED, being used as an OUTPUT parameter, and using a BREAK BY on one of more fields of the TEMP-TABLE.
Under these circumstances, OpenEdge fails to clean up the implicit buffer created by BREAK BY, and results in this error message. The following code exemplifies the problem:

/* main.p */
DEFINE TEMP-TABLE t_temp
FIELD x_name AS CHAR.
RUN temp.p (OUTPUT TABLE t_temp).

/* temp.p */
DEFINE NEW SHARED TEMP-TABLE t_temp
FIELD x_name AS CHARACTER.
DEFINE OUTPUT PARAMETER TABLE FOR t_temp.
FOR EACH t_temp BREAK BY t_temp.x_name:
END.

Error 1410 occurs upon return from temp.p to main.p, when the buffers allocated for t_temp should be cleaned up.
The problem was introduced in 10.1B; earlier versions of OpenEdge do not exhibit this issue.

FIX:

To work around the problem:

1. Redefine the TEMP-TABLE as not NEW SHARED.
2. Remove the BREAK BY clause from the FOR EACH.