- ベストアンサー
VBAでレコードセットの総レコード数を取得する方法
- VBAでレコードセットの総レコード数を取得する方法について調査しました。コードで総レコード数を取得しようとした際に、「行セットは逆フェッチをサポートしていません」というエラーが出ました。そこで、他の方法を試してみましたがうまくいきませんでした。
- VBAでレコードセットの総レコード数を取得する方法について調査しました。コードで総レコード数を取得しようとした際にエラーが発生しました。試した方法として、rsData.EOFまでrsData.MoveNextして.RecordCountを取得する方法を試しましたが、うまくいきませんでした。
- VBAでレコードセットの総レコード数を取得する方法について調査しました。コードで総レコード数を取得するために、rsData.MoveLastを使用しようとした際に「行セットは逆フェッチをサポートしていません」というエラーが発生しました。他の方法を試したところ、うまくいきませんでした。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#2 です。 Set con = CreateObject("ADODB.Connection") con.CursorLocation = adUseClient con.Open "DSN=" & DNSname & "; UID= " USERname & "; PWD=" & PASSw としてみたらどうなりますか?
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
私の作った7件の社員3テーブルにたいし (質問のコードを少し簡略化してますが) Sub test02() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim DNSname$, USERname$, PASSw$, cnt& Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open "社員3", cn, adOpenKeyset, adLockOptimistic cnt = rs.RecordCount MsgBox cnt rs.MoveFirst Do Until rs.EOF MsgBox rs!氏名 rs.MoveNext Loop End Sub で 7 と出ました。 ==== rs.Open "社員3", cn, adOpenKeyset, adLockOptimistic の adOpenKeyset, adLockOptimistic を質問のように除くと、-1と出てうまくいかない。 ここが原因でしょう。 http://www.accessclub.jp/vbakaisetu/22.html 参照
補足
>Set cn = CurrentProject.Connection 部分のCurrentProjectで「変数が宣言されていません」とのエラーが出ましたので Set con = CreateObject("ADODB.Connection") にしてimogasiさんのコードを実行したところ(adOpenKeyset, adLockOptimisticはつけました)、cnt は「-1」でした。 CurrentProjectとはどのように宣言するのでしょうか?
- bonaron
- ベストアンサー率64% (482/745)
Set rsData = New ADODB.Recordset rsData.Open SQL, con, adOpenKeyset cnt=rsData.RecordCount でどうでしょうか?
補足
bonaronさんのやり方やった場合、cntは「-1」でした。 参照設定で、「Microsoft Active Data Objects 2.8 Library」を使用しているのですが、これが間違いなのでしょうか?
- zap35
- ベストアンサー率44% (1383/3079)
con.Open "DSN=" & DNSname & "; UID= " USERname & "; PWD=" & PASSw Set rsData = con.Execute("SELECT COUNT(*) FROM " & TableName) MsgBox rsData.Fields(0).Value のようにSQLで求められませんか? テストしたのはmdbでOracleでは試していませんが… TableNameのところは置き換えてください
補足
rsData.Open SQL, conを無効にして >Set rsData = con.Execute( でも接続できレコードセットは取得できました。 しかし >MsgBox rsData.Fields(0).Value では、そのフィールドの内容が出るだけでレコード総数は求められませんでした。
お礼
>con.CursorLocation = adUseClient の行を追加したら取得できました。 レコードセットのほうになにか設定値があるのかと色々探していましたが、オブジェクトのだったんですね。ありがとうございました。