データの取得
dbExpress コンポーネントの使い方:インデックス への移動
データソースを指定したら,アプリケーションでアクセスする前にデータを取得する必要があります。データセットがデータを取得したら,データソースを通してデータセットにリンクされたデータベース対応コントロールは自動的にデータ値を表示し,プロバイダを通してデータセットにリンクされたクライアントデータセットにはレコードを入力できます。
ほかのデータセットと同様に,dbExpress データセットにはデータを取得する 2 つの方法があります。
1 つは,Active' プロパティを設計時にオブジェクトインスペクタで設定するか,実行時にコード内で設定します。
CustQuery.Active := True;
CustQuery->Active = true;
もう 1 つは,実行時に Open メソッドを呼び出します。
CustQuery.Open;
CustQuery->Open();
Active プロパティや Open メソッドは,サーバーからレコードを取得する単方向データセットに対して使用します。このレコードが SELECT 問い合わせ(CommandType が ctTable の場合自動生成問い合わせを含む)から得られるか,それともストアドプロシージャから得られるかは,問題になりません。
データセットの準備
問い合わせやストアドプロシージャをサーバー上で実行する前に,それを「準備する」必要があります。データセットを準備すると,dbExpress とサーバーが SQL 文とパラメータのリソースを割り当てます。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 を返します。