■データアクセス・コンポーネント編 ――ADOを使ってRecordsetの レコード総数を数える
Q. 前ページの回答では、DAOではRecordCountプロパティが正しい値を示さない場合があると説明されていましたが、ADOでも事情は同じでしょうか?
A. ADOのRecordsetオブジェクトにもDAOと同じようにRecordCountプロパティがあります。 得られる結果がレコードセットのタイプによって異なるという性質も同じです。しかし、その動作はDAOとはいくぶん異なっています。
ADOでは、さまざまなデータソースに対してアクセスすることができます。そのため、ADOに用意されている機能であっても、使用するデータ・プロバイダやレコードセットのタイプによって、サポートされている場合とされていない場合があります。
ある機能がそのレコードセットで使用できるかどうかは、RecordsetのSupportsメソッドで調べると分かります。 ただし、このメソッドを使う場合には、そのレコードセットが実際にオープンしている必要があります。RecordCountが正しい値を返すのは、Supports("adApproxPosition")
か Supports("adBookmark")のどちらかがTrueになっている場合です。
具体的には、次のようになります。
・RecordsetのCursorLocation
=
adUseClientのとき すべての場合で、RecordCountは正しい値を返す。
・RecordsetのCursorLocation =
adUseServerのとき(デフォルト) レコードセットのCursorType =
adOpenKeyset /
adOpenStaticのとき RecordCountは正しい値を返す。 レコードセットのCursorType
= adOpenForwardOnly /
adOpenDynamicのとき RecordCountは-1となり、正しい値を返さない。
ADOでRecordCountが正しく取得できるとき、DAOの場合とは異なり、MoveLastなどを実行しなくても、開いた直後から正しい値を得ることができます。
注 なお、adpでMSDE/SQL
Serverをデータ・エンジンとして利用している場合には、CursorLocation =
adUseServerでCursorType =
adOpenDynamicのとき、MoveLastすることでRecordCountを得ることができます(DAOの場合とほぼ同じ)。 ただし、Access
adpでは、現在開いているデータベースにはadUseClientで接続していますので、adUseServerを使用するためには、新しいConnectionを作成する必要があります。 また、ストアド・プロシージャをもとにしたレコードセットでは、RecordCountプロパティは使えません。
|
|
2/3 |
|
本サイト掲載の記事・写真等の無断での転載・複写を禁じます。
本ページは、技術評論社様のご好意により掲載許可をいただいたものです。
| |