API によるブロック カーソルの使用

API サーバー カーソルには、1 回で 1 行しかフェッチできないという制限はないので、フェッチの実行ごとに複数行を取得できます。Microsoft SQL Server のようなクライアント/サーバー データベースで作業する場合、1 回に複数行を取得する方が効率的です。1 回のフェッチで返される行数を行セット サイズといいます。行セット サイズが 2 以上のカーソルをブロック カーソルといいます。サポートされている API では、次の方法でブロック カーソルを使用できます。

  • ODBC

    • ステートメント属性 SQL_ATTR_ROWSET_SIZE を行セット サイズに設定します。

    • 返された行から取得したデータを格納する変数の配列に列をバインドするには、列方向または行方向のバインドを使用します。各配列の要素数は行セット サイズと同じです。

    • SQLFetchScroll を呼び出すたびに、SQL_ATTR_ROWSET_SIZE で設定した行数分の行がフェッチされます。

  • OLE DB

    • 列データを保持する変数の配列に、行ハンドルの配列を割り当てて、各ハンドルにより表される列をバインドします。

    • cRows パラメータを行ハンドル配列内のハンドル数に設定し、prghRows パラメータを行ハンドルの配列のアドレスに設定して、IRowset::GetNextRows を呼び出します。

  • ADO

    • 取得する行数のデータを格納するバリアント型変数を Dim で宣言します。

    • オプションとして、レコードセットのメソッドである MoveMoveFirstMoveLastMoveNext、および MovePrevious を使用して、カーソル内の適当な位置を指定します。

    • 行を格納するバリアント変数のアドレスを array パラメータに代入し、返す行数を Crows パラメータに代入して、レコードセットのメソッド GetRows を呼び出します。オプションとして、レコードセット内のフェッチ位置を Start パラメータで指定できます。