配列フィールドでの作業

提供: RAD Studio
配列項目を操作するから転送)
移動先: 案内検索

オブジェクト フィールドの利用 への移動


配列フィールドは、同じ型のフィールドのセットから構成されます。フィールド型は、スカラー(たとえば、浮動小数点、文字列など)でも、または非スカラー(ADT)であっても構いませんが、配列の配列フィールドは不可です。TDataSetSparseArrays 配列は、配列フィールドの各要素に対して、一意の 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];

FieldValuesTArrayField のデフォルト プロパティであるため、次のようにも記述できます:

TelEdit.Text := TArrayField(Customer.FieldByName('TelNos_Array'))[1];
メモ: TArrayField はクラスであるため、このプロパティは C++ では機能しない点に注意してください。クラスは常に C++ ではポインタとなります。1 つの解決策は、参照を使うことです。次に例を示します:
#include <Data.DB.hpp>

String getPhoneNumber(TDataSet* ds, int index)
{
  return static_cast<TArrayField&>(*ds->FieldByName("TelNos_Array"))[index];

配列フィールドの Fields プロパティの利用

TArrayField には Fields プロパティがあり、これを使用して個々のサブフィールドへのアクセスに使用することができます。これは以下に記載されているように、配列フィールド(OrderDates)は、リストボックスを null ではない配列要素で割り当てるために使用されています:

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);

関連項目