API:IBX.IBQuery.TIBQuery.DataSource
Delphi
property DataSource: TDataSource write SetDataSource;
C++
__property DataSource = {read=GetDataSource, write=SetDataSource};
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
property | published | IBX.IBQuery.pas IBX.IBQuery.hpp |
IBX.IBQuery | TIBQuery |
説明
データセットへ値を提供する、他のデータセットのデータソースを表します。
IBX.IBQuery.TIBQuery.DataSource は Data.DB.TDataSet.DataSource を継承しています。以下の内容はすべて Data.DB.TDataSet.DataSource を参照しています。
データセットへ値を提供する、他のデータセットのデータソースを表します。
TDataSet での実装に従い、DataSource プロパティは常に nil (Delphi) または NULL (C++) です。
指定されたデータソースをサポートする下位のデータセット クラスでは、DataSource プロパティを取得および設定するためのメソッドを、宣言および実装します。
例:
Data.Win.ADODB.TADOQuery、つまり TDataSet の間接的子孫の場合(Data.Win.ADODB.TCustomADODataSet から派生)、DataSource では、現在のフィールド値を抽出してくるデータ ソース コンポーネントを指定します。このフィールド値は、ADO クエリの SQL 文内で、同じ名前のパラメータに使用されます。
Data.Win.ADODB.TADOQuery.DataSource を設定することにより、別のデータセットからのフィールド値で、クエリ内のパラメータを自動的に埋めることができます。他のデータセット内のフィールドに同じ名前のものがあるパラメータは、そのフィールドの値で埋められます。他のデータセット内のフィールドに同じ名前のものがないパラメータは、自動的に値を取得することはできず、プログラムで設定しなければなりません。たとえば、Data.Win.ADODB.TADOQuery の SQL プロパティに次の SQL 文が入っており、Data.Win.ADODB.TADOQuery.DataSource で参照されるデータセットに CustNo
フィールドがある場合、他のデータセット内のカレント レコードからの値が、CustNo
パラメータで使用されます:
SELECT * FROM Orders O WHERE (O.CustNo = :CustNo)
Data.Win.ADODB.TADOQuery.DataSource は、他のデータセット コンポーネントにリンクされている Data.DB.TDataSource コンポーネントを指していなければなりません。これは現在のクエリ コンポーネントを指すことはできません。Data.Win.ADODB.TADOQuery.DataSource で指定されるデータセットは、パラメータとバインドする前に、作成、設定、およびオープンされている必要があります。パラメータは、クエリを実行する前に、ADO クエリの Data.Win.ADODB.TADOCommand.Prepared プロパティを True に設定することでバインドされます。クエリで使用する SQL 文にパラメータが含まれていない、または、すべてのパラメータが、アプリケーションによって Data.Win.ADODB.TADOCommand.Parameters プロパティや Data.Win.ADODB.TParameters.ParamByName メソッドを使用してバインドされている場合、Data.Win.ADODB.TADOQuery.DataSource は割り当てられる必要はありません。以下の例では、ADOQuery2 の Data.Win.ADODB.TADOQuery.DataSource プロパティを ADOQuery1に対するデータソースに設定し、ADOQuery2 を準備し、ADOQuery2 を有効化します:
with ADOQuery2 do begin
DataSource := DataSource1;
Prepared := True;
Open;
end;
ADOQuery2->DataSource = DataSource1;
ADOQuery2->Prepared = true;
ADOQuery2->Open();
Data.Win.ADODB.TADOQuery の SQL 文が SELECT クエリの場合、クエリは、他のデータセット内のレコード ポインタが変更されるたびに、新しいフィールド値を使用して実行されます。毎回、Data.Win.ADODB.TADOQuery の Data.Win.ADODB.TADOConnection.Open メソッドを呼び出す必要はありません。これは、クエリ結果セットの動的フィルタリングのための Data.Win.ADODB.TADOQuery.DataSource プロパティ利用を、「マスタ-詳細」関係の確立にも利用します。Datail クエリにおいて Data.Win.ADODB.TADOQuery.DataSource プロパティを、Master データセットに対する Data.Win.ADODB.TADOQuery.DataSource コンポーネントへと設定します。
SQL 文で SELECT クエリ以外(INSERT や UPDATE など)を使用する場合、他のデータセット内のフィールドと同じ名前を持つパラメータは、依然、値を取得しますが、他のデータセットのレコード ポインタが移動するたびに、クエリは明示的に実行される必要があります。たとえば、以下の SQL 文では INSERT 文を使用し、パラメータ CustNo
と CompanyName
があります:
INSERT INTO Customer (CustNo, Company) VALUES (:CustNo, :CompanyName)
他のデータセットADOQuery1 と DataSource1 には、CustNo
フィールドはありますが、CompanyName
フィールドがありません。このデータセットが Data.Win.ADODB.TADOQuery.DataSource プロパティを介して使われる場合、CompanyName
パラメータはプログラムで値を割り当てられる必要があります。ADOQuery1 には CustNo
フィールドがあり、また ADOQuery1 は Data.Win.ADODB.TADOQuery.DataSource プロパティを介して参照されるため、CustNo
パラメータについては自動的に値を取得できます。
with ADOQuery2 do begin
DataSource := DataSource1;
ParamByName ('CompanyName').AsString := Edit1.Text;
Prepared := True;
ExecSQL;
end;
ADOQuery2->DataSource = DataSource1;
ADOQuery2->ParamByName("CompanyName")->AsString = Edit1->Text;
ADOQuery2->Prepared = true;
ADOQuery2->ExecSQL();
SQL 文に、他のデータセット内のフィールドに同じ名前のパラメータがある場合、それらのパラメータに対しては、手動で値を設定する必要はありません。Data.Win.ADODB.TADOCommand.Parameters プロパティ、または Data.Win.ADODB.TParameters.ParamByName メソッドなどを使用して、プログラムで設定された値は、自動設定値で上書きされます。その他の名前のパラメータについては、プログラムで値が提供されなければなりません。これらのパラメータに、Data.Win.ADODB.TADOQuery.DataSource の設定の影響はありません。
Data.Win.ADODB.TADOQuery.DataSource は実行時に、またはオブジェクト インスペクタを使用して設計時に設定できます。設計時では、目的の Data.DB.TDataSource をドロップダウン リストから選択し、名前を入力します。