Array-Felder
Nach oben zu Felder - Index
Array-Felder bestehen aus mehreren Feldern desselben Typs. Die Feldtypen können skalar (z.B. Float oder String) oder nichtskalar sein (ADT). Array-Felder, die weitere Arrays enthalten, sind nicht zulässig. Die Eigenschaft SparseArrays einer TDataSet-Komponente bestimmt, ob für jedes Element im Array-Feld ein eindeutiges Data.DB.TField-Objekt erstellt wird.
Es gibt verschiedene Möglichkeiten, auf die Daten von Array-Feldern zuzugreifen. Sofern Sie keine persistenten Felder verwenden, müssen Sie der Eigenschaft ObjectView der Datenmenge den Wert True zuweisen, um auf die Elemente eines Array-Feldes zugreifen zu können.
Inhaltsverzeichnis
Persistente Felder verwenden
Sie können den einzelnen Array-Elementen persistente Felder zuordnen. Betrachten Sie beispielsweise das folgende Array-Feld namens TelNos_Array, das ein sechs Elemente umfassendes Array mit Strings ist. Die folgenden persistenten Felder, die für die Tabellenkomponente Customer erstellt wurden, repräsentieren das Feld TelNos_Array und dessen sechs Elemente:
CustomerTelNos_Array: TArrayField;
CustomerTelNos_Array0: TStringField;
CustomerTelNos_Array1: TStringField;
CustomerTelNos_Array2: TStringField;
CustomerTelNos_Array3: TStringField;
CustomerTelNos_Array4: TStringField;
CustomerTelNos_Array5: TStringField;
CustomerTELNOS_ARRAY: TArrayField;
CustomerTELNOS_ARRAY0: TStringField;
CustomerTELNOS_ARRAY1: TStringField;
CustomerTELNOS_ARRAY2: TStringField;
CustomerTELNOS_ARRAY3: TStringField;
CustomerTELNOS_ARRAY4: TStringField;
CustomerTELNOS_ARRAY5: TStringField;
Nachdem diese persistenten Felder gegeben sind, kann mit der folgenden Anweisung einem Eingabefeld namens TelEdit der Wert eines Array-Elements zugewiesen werden.
TelEdit.Text := CustomerTelNos_Array0.AsString;
TelEdit->Text = CustomerTELNOS_ARRAY0->AsString;
Die Eigenschaft FieldValues des Array-Feldes verwenden
Der Zugriff auf den Wert eines untergeordneten Feldes kann auch über die Eigenschaft FieldValues der Datenmenge erfolgen. Da diese Eigenschaft einen Variant-Wert entgegennimmt und zurückgibt, können mit ihr Felder jedes Typs verarbeitet und konvertiert werden. Beispiel:
TelEdit.Text := TArrayField(Customer.FieldByName('TelNos_Array')).FieldValues[1];
TelEdit->Text = ((TArrayField*)Customer->FieldByName("TelNos_Array"))->FieldValues[1];
Da FieldValues die Standardeigenschaft von TArrayField-Komponenten ist, muss der Eigenschaftsname nicht angegeben werden:
TelEdit.Text := TArrayField(Customer.FieldByName('TelNos_Array'))[1];
Die Eigenschaft Fields des Array-Feldes verwenden
Mit der Eigenschaft Fields von TArrayField-Komponenten können Sie auf einzelne untergeordnete Felder zugreifen. Das nachfolgende Beispiel veranschaulicht dies. Hier werden alle Elemente des Array-Feldes OrderDates, die nicht Null sind, in ein Listenfeld eingetragen:
for I := 0 to OrderDates.Size - 1 do
begin
if not OrderDates.Fields[I].IsNull then
OrderDateListBox.Items.Add(OrderDates[I]);
end;
for (int i = 0; i < OrderDates->Size; ++i)
if (!OrderDates->Fields->Fields[i]->IsNull)
OrderDateListBox->Items->Add(OrderDates->Fields->Fields[i]->AsString);