ASP:ADODBのRecordCount

最終更新日時:2014-03-28 21:33:30
ASP

ADODB で検索した結果返ってくる Recordset。
Recordset には、RecordCount というプロパティがあり、どうやらこれには Recordset のレコード数が格納されているようなのですが、少なくとも DB が SQL Server でデフォルトの状態では、実際には -1 が返ってきます。

これについては仕様らしく、MS のサイトで以下のように解説されています。
http://support.microsoft.com/kb/194973/ja

サーバーサイド カーソルを使用して作成したレコードセットに対して RecordCount プロパティを取得しようとしたとき、-1 が返されることがあります。
ActiveX Data Objects (ADO) Version 2.0 においては、CursorType プロパティが adOpenForwardonly (前方スクロール カーソル) または adOpenDynamic (動的カーソル) のときにこの結果が得られます。
また、異なる OLEDB プロバイダの間で結果が異なる場合があります。


正直なんのことやらサッパリなのですが、上記のサイトには以下のように解決方法の解説もあります。

サーバーサイド カーソルで、CursorType プロパティに adOpenKeyset もしくは adOpenStatic を使用するか、クライアントサイド カーソルを使用します。
クライアントサイド カーソルでは、CursorType の設定値がどのようなものであっても、adOpenStatic のみが適用されます。


こちらも正直よく分からないのですが、とりあえず以下のようにクライアントサイド カーソルに設定すれば良いようです。
adUseClient がクライアントサイド カーソルの指定となります。

 Set RS = Server.CreateObject("ADODB.Recordset")
 conn.CursorLocation = adUseClient
 RS.Open sql, conn
 total = RS.RecordCount



お問い合わせは 掲示板 にて。