データのフェッチ

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

DbExpress コンポーネントの利用:インデックス への移動


一度データの指定されたソースを取得したら、アプリケーションがそれにアクセスできるようにする前に、そのデータをフェッチしなければなりません。一度データセットがデータをフェッチしたら、データソースを介してデータセットにリンク付けされたデータ対応コントロールは、自動的にデータの値を表示し、プロバイダを介してデータセットにリンク付けされたクライアント データセットは、レコードによって設定されます。

いずれのデータセットと同様、dbExpress データセットのためにデータをフェッチするには 2 つの方法があります:

1 つは、Active プロパティを True に設定する方法です。設計時に オブジェクト インスペクタででも、実行時にコードにおいてでも構いません。

 CustQuery.Active := True;
 CustQuery->Active = true;

もう 1 つの方法は、実行時に Open メソッドを呼び出す方法です。

 CustQuery.Open;
 CustQuery->Open();

Active プロパティまたは Open メソッドは、サーバーからレコードを取得する単方向データセットと共に使用します。これらのレコードが、SELECT クエリからのものか(CommandTypectTable の際の自動生成クエリも含む)からのものか、ストアド プロシージャからのものかは構いません。

データセットを準備する

クエリまたはストアド プロシージャがサーバー上で実行できるようにする前に、まず「準備(prepared)」をしなければなりません。データセットの準備とは、dbExpress およびサーバーが、文とパラメータのためにリソースを確保することを意味します。CommandTypectTable の場合、それは、データセットが SELECT クエリを生成していることを意味します。サーバーによってバインドされていないパラメータはいずれも、この時点でクエリに追加されます。

単方向データセットは、ActiveTrue に設定され、Open メソッドが呼び出された時点で、自動的に準備されます。データセットを閉じた際、文の実行のために確保されたリソースは解放されます。クエリやストアド プロシージャを複数回実行しようとするなら、データセットを最初に開く前に、それを明示的に準備することでパフォーマンスを向上させることができます。データセットを明示的に準備する場合には、Prepared プロパティを True にします。

 CustQuery.Prepared := True;
 CustQuery->Prepared = true;

データセットを明示的に準備する場合、文の実行用に割り当てられるリソースは、PreparedFalse に設定するまで解放されません。

実行前にデータセットの準備を確実にやり直したい場合には(たとえば、パラメータ値や SortFieldNames プロパティを変更するなど)、Prepared プロパティを False に設定します。

複数のデータセットをフェッチする

一部のストアド プロシージャは複数のレコード セットを返します。 データセットを開いたときに取得されるのは、最初のレコード セットだけです。 レコードの他のセットにアクセスするには、NextRecordSet メソッドを呼び出します。

 var
   DataSet2: TCustomSQLDataSet;
   nRows: Integer;
 begin
   DataSet2 := SQLStoredProc1.NextRecordSet;
   ...
 TCustomSQLDataSet *DataSet2 = SQLStoredProc1->NextRecordSet();

NextRecordSet は新しく作成された TCustomSQLDataSet コンポーネントを返し、このコンポーネントはレコードの次のセットへのアクセスを提供します。つまり、最初に NextRecordSet を呼び出すと、それはレコードの 2 番目のセットのデータセットを返します。さらに NextRecordSet を呼び出すと 3 番目のレコード セットが返され、それがレコード セットがなくなるまで繰り返されます。データセットがなくなると、NextRecordSetnil を返します。

関連項目