配列項目を操作する
配列項目は,同じ型の項目セットで構成されています。項目型はスカラー(浮動小数点,文字列など)であっても,また非スカラー(ADT)であってもかまいませんが,配列の配列項目は許されていません。TDataSet の SparseArrays プロパティは,配列項目の各要素にユニークな Data.DB.TField オブジェクトを作成するかどうかを指定します。
配列項目型のデータには,さまざまな方法でアクセスできます。持続的項目を使用しない場合,データセットの ObjectView プロパティを True に設定しないと,配列項目の要素にアクセスできません。
持続的項目の使用
持続的項目と配列項目の個々の配列要素を対応させることができます。たとえば TelNos_Array という要素が 6 つある文字列配列を考えてみましょう。Customer テーブルコンポーネント用に作成された次の持続的項目は,TelNos_Array 項目および 6 つの要素を表します。
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;
持続的項目が指定されると,次のコードは持続的項目を使って配列要素値を TelEdit という編集ボックスに入力します。
TelEdit.Text := CustomerTelNos_Array0.AsString;
TelEdit->Text = CustomerTELNOS_ARRAY0->AsString;
配列項目の FieldValues プロパティを使用する
子項目値には,配列項目の FieldValues プロパティを使ってアクセスできます。FieldValues は Variant を受け入れて返すため,あらゆる種類の項目を処理し,変換できます。次に例を示します。
TelEdit.Text := TArrayField(Customer.FieldByName('TelNos_Array')).FieldValues[1];
TelEdit->Text = ((TArrayField*)Customer->FieldByName("TelNos_Array"))->FieldValues[1];
FieldValues は TArrayField のデフォルトプロパティなので,これは次のようにも書けます。
TelEdit.Text := TArrayField(Customer.FieldByName('TelNos_Array'))[1];
配列項目の Fields プロパティを使用する
TArrayField には,個々のサブ項目へのアクセスに利用できる Fields プロパティがあります。これは以下に説明されています。ここで配列項目(OrderDates)は,ヌルでない配列要素のあるリストボックスの表示に使用されます。
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);