- ベストアンサー
レコードは2行あるのに「-1」が返ってくる
- AccessのVBAコードを使用してテーブル1からデータを抽出する際、レコードが2行あるにもかかわらず、rs.RecordCountの結果が「-1」となってしまいます。なぜこのような結果が返ってくるのでしょうか?
- テーブル1には2行のレコードが存在しますが、VBAコードを実行すると、rs.RecordCountの値が「-1」と表示されます。この問題の原因は何でしょうか?
- VBAコードを使用してテーブル1からデータを取得しようとすると、rs.RecordCountが「-1」となってしまいます。どうすれば正しいレコード数を取得できるのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Acc2010では、ヘルプの中の Connection.Execute メソッド に Execute メソッドはアクション クエリでのみ有効です。 別の種類のクエリで Execute を使用すると、エラーが発生します。 アクション クエリはレコードを返さないので、Execute は Recordset を返しません。 と あります。 実際には、最初の2行と異なりエラーとはならないのが謎ですが、 3行目には納得できるのでは? 今回はレコードセットの取得ですから Open メソッド (ADO Recordset)を使ってください。 また、カーソルタイプが、adOpenDynamic とadOpenForwardOnly では-1となるので adOpenKeyset またはadOpenStatic で。 Sub test1() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = Application.CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open "SELECT * FROM テーブル1", cn, adOpenKeyset MsgBox rs.RecordCount rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub Accessを相手にするのならADOよりもDAOの方が簡単かと思います。 (私がADOについて不明なためでもあります)
その他の回答 (1)
- m3_maki
- ベストアンサー率64% (296/460)
●Execute メソッド (ADO Connection) のヘルプより 行を返すコマンド文字列の場合の構文は次のとおりです。 Set recordset = connection.Execute (CommandText, RecordsAffected, Options) 返される Recordset オブジェクトは常に、読み取り専用で前方スクロール タイプのカーソルです。 ●Recordset オブジェクト (ADO) のヘルプより Recordset を開く前に CursorType プロパティを設定してカーソルの種類を選択するか、Open メソッドを使用して引数 CursorType を渡します。プロバイダによっては、カーソルのすべての種類をサポートしていないものもあります。プロバイダのマニュアルを確認してください。カーソルの種類を指定しない場合、ADO では既定で前方スクロール カーソルが開かれます。 ●RecordCount プロパティ (ADO) のヘルプより レコード数を特定できるかどうかは、Recordset オブジェクトのカーソルのタイプによって異なります。RecordCount プロパティは、前方スクロールのみのカーソルの場合は -1 を返します。静的カーソルまたはキーセット カーソルの場合は実際の数を返します。動的カーソルの場合はデータ ソースに応じて -1 または実際の数を返します。 --------------------------- Execute メソッド によって 「前方スクロール タイプ」 のカーソルで開かれますから 「 -1 を返します」 ということになります。 Open メソッドで開くなり、 レコード数を知りたい理由によっては他のプロパティで対処するなりしてください。
お礼
ありがとうございました。
お礼
ありがとうございました。