• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAでレコードセットの総レコード数を取得する方法)

VBAでレコードセットの総レコード数を取得する方法

このQ&Aのポイント
  • VBAでレコードセットの総レコード数を取得する方法について調査しました。コードで総レコード数を取得しようとした際に、「行セットは逆フェッチをサポートしていません」というエラーが出ました。そこで、他の方法を試してみましたがうまくいきませんでした。
  • VBAでレコードセットの総レコード数を取得する方法について調査しました。コードで総レコード数を取得しようとした際にエラーが発生しました。試した方法として、rsData.EOFまでrsData.MoveNextして.RecordCountを取得する方法を試しましたが、うまくいきませんでした。
  • VBAでレコードセットの総レコード数を取得する方法について調査しました。コードで総レコード数を取得するために、rsData.MoveLastを使用しようとした際に「行セットは逆フェッチをサポートしていません」というエラーが発生しました。他の方法を試したところ、うまくいきませんでした。

質問者が選んだベストアンサー

  • ベストアンサー
  • bonaron
  • ベストアンサー率64% (482/745)
回答No.4

#2 です。 Set con = CreateObject("ADODB.Connection") con.CursorLocation = adUseClient con.Open "DSN=" & DNSname & "; UID= " USERname & "; PWD=" & PASSw としてみたらどうなりますか?

takac4u
質問者

お礼

>con.CursorLocation = adUseClient の行を追加したら取得できました。 レコードセットのほうになにか設定値があるのかと色々探していましたが、オブジェクトのだったんですね。ありがとうございました。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

私の作った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 参照

takac4u
質問者

補足

>Set cn = CurrentProject.Connection 部分のCurrentProjectで「変数が宣言されていません」とのエラーが出ましたので Set con = CreateObject("ADODB.Connection") にしてimogasiさんのコードを実行したところ(adOpenKeyset, adLockOptimisticはつけました)、cnt は「-1」でした。 CurrentProjectとはどのように宣言するのでしょうか?

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.2

 Set rsData = New ADODB.Recordset  rsData.Open SQL, con, adOpenKeyset  cnt=rsData.RecordCount でどうでしょうか?

takac4u
質問者

補足

bonaronさんのやり方やった場合、cntは「-1」でした。 参照設定で、「Microsoft Active Data Objects 2.8 Library」を使用しているのですが、これが間違いなのでしょうか?

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

 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のところは置き換えてください

takac4u
質問者

補足

rsData.Open SQL, conを無効にして >Set rsData = con.Execute( でも接続できレコードセットは取得できました。 しかし >MsgBox rsData.Fields(0).Value では、そのフィールドの内容が出るだけでレコード総数は求められませんでした。

関連するQ&A