参照フィールドでの作業
参照項目は,別の ADT オブジェクトへのポインタつまり参照を格納します。この ADT オブジェクトは,別のオブジェクトテーブルの 1 つのレコードです。参照項目は常にデータセット(オブジェクトテーブル)内の 1 つのレコードを参照します。参照されたオブジェクトの中のデータは,実際にはネストされたデータセットの中に戻りますが,TReferenceField の Fields プロパティを通してアクセスすることもできます。
参照項目を表示する
Vcl.DBGrids.TDBGrid コントロールでは,参照項目はデータセット列の各セルの中に(Reference)とともに割り当てられ,実行時には右に省略記号ボタンが表示されます。実行時に省略記号をクリックすると,現在レコードの参照項目と対応するオブジェクトを表示するグリッドのある新しいフォームが表示されます。
またこのフォームは,DB グリッドの ShowPopupEditor メソッドを使用して,プログラミングによって表示できます。たとえばグリッド内の 7 番めの列が参照項目を表す場合,次のコードによって現在レコードのその項目に対応するオブジェクトが表示されます。
DBGrid1.ShowPopupEditor(DBGrid1.Columns[7]);
DBGrid1->ShowPopupEditor(DBGrid1->Columns->Items[7], -1, -1);
参照項目内のデータにアクセスする
ネストされたデータセットにアクセスするのと同じ方法で,参照項目内のデータにアクセスできます。
参照項目内のデータにアクセスする
- 親データセットで項目エディタを呼び出して,持続的 Data.DB.TDataSetField オブジェクトを作成します。
- データセット項目の値を表すため,データセットを作成します。
- 手順 2 で作成されたデータセットの DataSetField プロパティを,手順 1 で作成された持続的データセット項目に設定します。
参照が割り当てられた場合,参照データセットは参照データとともに 1 つのレコードを含みます。参照がヌルの場合,参照データセットは空になります。
参照項目内のデータにアクセスするため,参照項目の Fields プロパティを使用できます。たとえば次の行は同等であり,参照項目 CustomerRefCity のデータを CityEdit という編集ボックスに割り当てます。
CityEdit.Text := CustomerRefCity.Fields[1].AsString;
CityEdit.Text := CustomerRefCity.NestedDataSet.Fields[1].AsString;
CityEdit->Text = CustomerADDRESS_REF->NestedDataSet->Fields->Fields[1]->AsString;
参照項目の中のデータが編集されると,実際に修正されるのは参照されたデータです。
参照項目を割り当てるには,最初に SELECT 文を使ってテーブルから参照を選択し,次にそれを割り当てます。次に例を示します。
var
AddressQuery: TQuery;
CustomerAddressRef: TReferenceField;
begin
AddressQuery.SQL.Text := 'SELECT REF(A) FROM AddressTable A WHERE A.City = ''San Francisco''';
AddressQuery.Open;
CustomerAddressRef.Assign(AddressQuery.Fields[0]);
end;
AddressQuery->SQL->Text = "SELECT REF(A) FROM AddressTable A WHERE A.City = "San Francisco"";
AddressQuery->Open();
CustomerAddressRef->Assign(AddressQuery->Fields->Fields[0]);