Data.Win.ADODB.TADOQuery.DataSource

提供: RAD Studio API Documentation
移動先: 案内検索

Delphi

property DataSource: TDataSource read GetDataSource write SetDataSource;

C++

__property DataSource;

プロパティ

種類 可視性 ソース ユニット
property published
Data.Win.ADODB.pas
Data.Win.ADODB.hpp
Data.Win.ADODB TADOQuery

説明


データセットへ値を提供する、他のデータセットのデータソースを表します。

Data.Win.ADODB.TADOQuery.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.TADOQueryData.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 文を使用し、パラメータ CustNoCompanyName があります:

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 をドロップダウン リストから選択し、名前を入力します。

関連項目