データのフェッチ
DbExpress コンポーネントの利用:インデックス への移動
一度データの指定されたソースを取得したら、アプリケーションがそれにアクセスできるようにする前に、そのデータをフェッチしなければなりません。一度データセットがデータをフェッチしたら、データソースを介してデータセットにリンク付けされたデータ対応コントロールは、自動的にデータの値を表示し、プロバイダを介してデータセットにリンク付けされたクライアント データセットは、レコードによって設定されます。
いずれのデータセットと同様、dbExpress データセットのためにデータをフェッチするには 2 つの方法があります:
1 つは、Active プロパティを True に設定する方法です。設計時に オブジェクト インスペクタででも、実行時にコードにおいてでも構いません。
CustQuery.Active := True;
CustQuery->Active = true;
もう 1 つの方法は、実行時に Open メソッドを呼び出す方法です。
CustQuery.Open;
CustQuery->Open();
Active プロパティまたは Open メソッドは、サーバーからレコードを取得する単方向データセットと共に使用します。これらのレコードが、SELECT クエリからのものか(CommandType が ctTable の際の自動生成クエリも含む)からのものか、ストアド プロシージャからのものかは構いません。
データセットを準備する
クエリまたはストアド プロシージャがサーバー上で実行できるようにする前に、まず「準備(prepared)」をしなければなりません。データセットの準備とは、dbExpress およびサーバーが、文とパラメータのためにリソースを確保することを意味します。CommandType が ctTable の場合、それは、データセットが SELECT クエリを生成していることを意味します。サーバーによってバインドされていないパラメータはいずれも、この時点でクエリに追加されます。
単方向データセットは、Active が True に設定され、Open メソッドが呼び出された時点で、自動的に準備されます。データセットを閉じた際、文の実行のために確保されたリソースは解放されます。クエリやストアド プロシージャを複数回実行しようとするなら、データセットを最初に開く前に、それを明示的に準備することでパフォーマンスを向上させることができます。データセットを明示的に準備する場合には、Prepared プロパティを True にします。
CustQuery.Prepared := True;
CustQuery->Prepared = true;
データセットを明示的に準備する場合、文の実行用に割り当てられるリソースは、Prepared を False に設定するまで解放されません。
実行前にデータセットの準備を確実にやり直したい場合には(たとえば、パラメータ値や SortFieldNames プロパティを変更するなど)、Prepared プロパティを False に設定します。
複数のデータセットをフェッチする
一部のストアド プロシージャは複数のレコード セットを返します。 データセットを開いたときに取得されるのは、最初のレコード セットだけです。 レコードの他のセットにアクセスするには、NextRecordSet メソッドを呼び出します。
var
DataSet2: TCustomSQLDataSet;
nRows: Integer;
begin
DataSet2 := SQLStoredProc1.NextRecordSet;
...
TCustomSQLDataSet *DataSet2 = SQLStoredProc1->NextRecordSet();
NextRecordSet は新しく作成された TCustomSQLDataSet コンポーネントを返し、このコンポーネントはレコードの次のセットへのアクセスを提供します。つまり、最初に NextRecordSet を呼び出すと、それはレコードの 2 番目のセットのデータセットを返します。さらに NextRecordSet を呼び出すと 3 番目のレコード セットが返され、それがレコード セットがなくなるまで繰り返されます。データセットがなくなると、NextRecordSet は nil を返します。