User Tools

Site Tools


field_qualification.htm
Navigation:  Language Reference > 2 - Program Source Code Format > Statement Format >====== Field Qualification ====== Previous pageReturn to chapter overviewNext page

Variables declared as members of complex data structures (GROUP, QUEUE, FILE, RECORD, etc.) may have duplicate labels, as long as the duplicates are not contained within the same structure. To explicitly reference fields with duplicate labels in separate structures, you may use the PRE attribute on the structures just as it is documented (Prefix:FieldLabel) to provide unique names for each field. However, the PRE attribute is not required for this purpose and may be omitted.

Any member of any complex structure can be explicitly referenced by prepending the label of the structure containing the field to the field label, separated by a period (StructureName.FieldLabel). You must use this Field Qualification syntax to reference any field in a complex structure that does not have a PRE attribute. You may use a colon (:) instead of a period (StructureName:FieldLabel) to reference member variables of any structure except CLASS and named reference variables (this syntax is only to provide backward compatibility with previous versions of Clarion for Windows).

If the variable is within nested complex data structures, you must prepend each successive level's structure label to the variable label to explicitly reference the variable (if the nested structure has a label). If any nested structure does not have a label, then that part is omitted from the qualification sequence. This is similar to anonymous unions in C++. This means that, in the case of a GROUP structure (without a PRE attribute) in which a nested GROUP structure has a label, the fields in the inner GROUP must be referenced as OuterGroupLabel.InnerGroupLabel.FieldLabel. If the inner GROUP structure does not have a label, the individual fields are referenced as OuterGroupLabel.FieldLabel. There is one exception to this rule: the label of a RECORD structure within a FILE may be omitted so that you can reference individual fields within the file as FileLabel.FieldLabel instead of FileLabel.RecordLabel.FieldLabel.

This Field Qualification syntax is also used to reference all members of CLASS structures–both data members and methods. To call a member method of a CLASS structure, you specify ClassName.MethodLabel wherever the call to the PROCEDURE is valid.

To reference an element of a GROUP structure with the DIM attribute, you must specify the array element number in the Field Qualification syntax at the exact level at which the DIM attribute appears.

Example:

MasterFile FILE,DRIVER('TopSpeed')
Record      RECORD
AcctNumber   LONG         !Reference as Masterfile.AcctNumber  
           END
          END
Detail    FILE,DRIVER('TopSpeed')
          RECORD
AcctNumber  LONG          !Reference as Detail.AcctNumber  
          END
         END
Memory    GROUP,PRE(Mem)
Message    STRING(30)     !May reference as Mem:Message or Memory.Message
         END
SaveQueue QUEUE
Field1     LONG           !Reference as SaveQueue.Field1
Field2     STRING         !Reference as SaveQueue.Field2
         END
OuterGroup GROUP
Field1     LONG           !Reference as OuterGroup.Field1
Field2     STRING         !Reference as OuterGroup.Field2
InnerGroup  GROUP
Field1       LONG         !Reference as OuterGroup.InnerGroup.Field1
Field2       STRING       !Reference as OuterGroup.InnerGroup.Field2
           END
          END
OuterGroup GROUP,DIM(5)
Field1     LONG           !Reference as OuterGroup[1].Field1
InnerGroup  GROUP,DIM(5)  !Reference as OuterGroup[1].InnerGroup
Field1       LONG         !Reference as OuterGroup[1].InnerGroup[1].Field1
           END
          END

See Also:

PRE

CLASS

Reference Variables

field_qualification.htm.txt · Last modified: 2021/04/15 15:57 (external edit)