Informix Error -4391: When doing INPUT BY NAME or INPUT ARRAY, the BEFORE/AFTER field names can be specified only by the field name suffix. Screen array and screen record elements are not allowed.
Cause and resolution
When doing INPUT BY NAME or INPUT ARRAY, the BEFORE/AFTER field names can be specified only by the field name suffix. Screen array and screen record elements are not allowed.
Only names of single form fields can be used with a BEFORE or AFTER clause. The name of a field is defined in the ATTRIBUTES section of the form definition; it is often the same as the name of a database column. Here are example lines from an ATTRIBUTES section:
atag = customer.customer_num,noentry; tag2 = formonly.total,format="#######.##";
The names of these fields are customer_num and total, respectively.
In the 4GL statement in question, you have written a name prefixed with another name and a dot. That syntax is used for specifying components of screen records or screen arrays, or database columns of the same name in different tables, but it is not appropriate here.
Oninit® Troubleshooting Guidance
Reasons / Common Causes
-4391 fires when a BEFORE/AFTER FIELD clause in INPUT BY NAME/INPUT ARRAY uses a
dot-qualified name — per the official guidance, only a single form field's name (as defined in
the form's ATTRIBUTES section, often matching a database column name) is valid there; the
name.name dot syntax is for screen record/array components or same-named columns across
tables, and doesn't apply in this context.
- A
BEFORE/AFTER FIELDclause using a dot-qualified name inINPUT BY NAME/INPUT ARRAY, per the official guidance — the direct, only cause.
Solutions / Resolution
- Use only the plain field name (the tag from the form's
ATTRIBUTESsection), per the official guidance, not a dot-qualified reference.
Examples
A dot-qualified name in BEFORE FIELD
INPUT BY NAME rec.*
BEFORE FIELD orders.total
-- -4391: dot-qualified names aren't valid here
END INPUT
Corrected
INPUT BY NAME rec.*
BEFORE FIELD total
END INPUT
Diagnostic Checks
- Check every
BEFORE/AFTER FIELDclause insideINPUT BY NAME/INPUT ARRAY, and confirm it uses only a plain field name suffix.
Related Errors / Related Topics
No closely related error codes are cross-referenced for -4391 in this set yet.
A BEFORE/AFTER FIELD clause in INPUT BY NAME/INPUT ARRAY uses a dot-qualified name,
which isn't allowed — use only the plain field name.