ADT フィールドでの作業
ADT はサーバー上に作成されるユーザー定義済みの項目型で,レコード型と類似しています。ADT はほとんど大半のスカラー項目型,配列項目,参照項目,ネストされた ADT を含むことができます。
ADT 項目型のデータにはさまざまな方法でアクセスできますが,次の例では,CityEdit という編集ボックスに子項目値を割り当てて,次の ADT 構造体を使用します。
Address Street City State Zip
目次
静的項目コンポーネントの使用
ADT 項目値にアクセスする簡単な方法は,静的項目コンポーネントを使用することです。上の ADT 構造体では,項目エディタを使って次の持続的項目を Customer テーブルに追加できます。
CustomerAddress: TADTField; CustomerAddrStreet: TStringField; CustomerAddrCity: TStringField; CustomerAddrState: TStringField; CustomerAddrZip: TStringField;
持続的項目がある場合,名前を指定すれば ADT 項目の子項目にアクセスできます。
CityEdit.Text := CustomerAddrCity.AsString;
CityEdit->Text = CustomerAddrCity->AsString;
持続的項目は ADT 子項目にアクセスする簡単な方法ですが,設計時にデータセットの構造が不明な場合は使用できません。持続的項目を使用しないで ADT 子項目にアクセスする場合,データセットの ObjectView プロパティを True に設定する必要があります。
データセットの FieldByName メソッドを使用する
子項目の名前を ADT 項目名で修飾することにより,データセットの FieldByName メソッドを使って ADT 項目の子項目にアクセスできます。
CityEdit.Text := Customer.FieldByName('Address.City').AsString;
データセットの FieldValues プロパティを使用する
またデータセットの FieldValues プロパティで修飾された項目名も使用できます。
CityEdit.Text := Customer['Address.City'];
CityEdit->Text = Customer->FieldValues["Address.City"];
FieldValues はデータセットのデフォルトプロパティなので,プロパティ名(FieldValues)は省略できます。
メモ: ADT 子項目値にアクセスするほかのランタイムメソッドと違い,データセットの ObjectView プロパティが false でも,FieldValues プロパティは機能します。
ADT 項目の FieldValues プロパティを使用する
子項目値には TADTField の FieldValues プロパティを使ってアクセスできます。FieldValues プロパティはバリアントを受け取ったり,返したりするので,どの型の項目でも処理および変換できます。インデックスパラメータは,項目のオフセットを指定する整数値です。
CityEdit.Text := TADTField(Customer.FieldByName('Address')).FieldValues[1];
CityEdit->Text = ((TADTField*)Customer->FieldByName("Address"))->FieldValues[1];
FieldValues は TADTField のデフォルトプロパティなので,プロパティ名(FieldValues)は省略できます。それで次の文は上の文と等価です。
CityEdit.Text := TADTField(Customer.FieldByName('Address'))[1];
ADT 項目の Fields プロパティを使用する
ADT 項目には Fields プロパティがあり,これはデータセットの Fields プロパティと類似しています。データセットの Fields プロパティと同様,それと位置を指定して子項目にアクセスできます。
CityEdit.Text := TADTField(Customer.FieldByName('Address')).Fields[1].AsString;
CityEdit->Text = ((TADTField*)Customer->FieldByName("Address"))->Fields->
また名前を指定してもアクセスできます。
CityEdit.Text := TADTField(Customer.FieldByName('Address')).Fields.FieldByName('City').AsString;
CityEdit->Text = ((TADTField*)Customer->FieldByName("Address"))->
CityEdit->Text = Customer->FieldByName("Address.City")->AsString;