• ベストアンサー
  • 暇なときにでも

レコード件数が返らない理由がわからない

テーブル1にはレコードが5件入ってるのですが Private Sub レコード件数() Dim strSQL As String Dim rs As DAO.Recordset strSQL = "SELECT * FROM テーブル1;" Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset) Debug.Print rs.RecordCount End Sub これをすると1が返るのですがなぜでしょうか? レコードの数が返ると思ってるのですが違うのでしょうか?

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数229
  • ありがとう数3

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

  • ベストアンサー
  • 回答No.1

そうなんです。取れる場合もあれば取れない場合もある。多分ACCESSのバグだと思う。 仕方ないのでmovenextでlastまで行って数を数える。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

バグですか!思いがけない原因でした。そういうこともあるのですね。ありがとうございました。

関連するQ&A

  • DAOでレコード数を取得したい(ACESSVBA)

    レコードの行数は複数あるのに --------------------------------------------------------- Sub あ() Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("T_test", dbOpenDynaset) MsgBox rs.RecordCount Set rs = Nothing Set db = Nothing End Sub --------------------------------------------------------- これでレコード数を取得しようとすると1がかえるのですが なぜレコードの行数を取得できないのでしょうか?

  • アクセスVBA 変数での抽出条件の書きかた

    顧客データテーブルからの抽出です。 変数を使った書き方がわかりません。 よろしくお願いします。 テーブルのレコードには [氏名]:鈴木 [telnum]:0123456789 が存在します。 Private Sub テキスト0_BeforeUpdate(Cancel As Integer) Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("顧客マスタ", dbOpenDynaset) Dim str As String str = "0123456789" rs.Filter = "[telnum] = ' " & str & " ' " Set rs = rs.OpenRecordset MsgBox (rs!氏名) ’←エラーメッセージ”カレントレコードがありません。”が出ます End Sub

  • AccessSQL COUNT文で該当レコード抽出したい

    初心者です。 Access2000であるテーブルの条件に一致した レコード件数を抽出するSQLを作成しました。 条件に該当しない場合も1件で件数が戻ってきてしまいます。 AccessクエリでSQLを貼り付けて 検証した場合はちゃんと0件になるのですが VBAのコードではうまく件数が抽出されません。 簡単なことだったらごめんなさい。 いろいろなサイトで探した末、 どうしても解決できないので ご教授よろしくお願いします。 Dim strSQL As String Dim db As DAO.Database Dim rs As DAO.Recordset  Dim IntCount As integer 'SQL文を生成 strSQL = "SELECT COUNT(*) AS 件数 FROM テーブル名 " strSQL = strSQL & "WHERE テーブル名.コード = '" strSQL = strSQL & Forms![フォーム名]![txtコード] strSQL = strSQL & "' AND Left([テーブル名]![区分],1) = '" strSQL = strSQL & Forms![フォーム名]![cnb種類].Column(0) strSQL = strSQL & "' AND テーブル名.名称 = '" strSQL = strSQL & Forms![フォーム名]![txt名称] strSQL = strSQL & "';" Set db = CurrentDb Set rs = db.OpenRecordset(strSQL, dbOpenDynaset) IntCount =  rs.RecordCount rs.Close Set db = Nothing Set rs = Nothing

その他の回答 (2)

  • 回答No.3
  • m3_maki
  • ベストアンサー率64% (270/420)

「Access RecordCount 正しくない」 でググると 分かりやすい日本語の説明が得られますが、 一応、こちらが本家なので。 http://support.microsoft.com/kb/105976/ja

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございました。

  • 回答No.2

No1の追伸 多分ACCESSは実際にレコードを移動して数えているのではないだろうか。 従ってプロパティを取得する場合、まだ数えているうちに返ってきてしまうので おかしくなっているんだろう。という勝手な解釈。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

なるほど~ 納得しました。

関連するQ&A

  • 空欄を含む項目のレコードセット

    Access 2003 DAO.Recordsetにてデータを取得しようと思うのですが テーブル項目に空欄がある場合はどのように書けばよろしいのでしょうか? Dim DB As DAO.Database Dim RS As DAO.Recordset Set DB = CurrentDb Set RS = daoDB.OpenRecordset("Aテーブル", dbOpenDynaset) RS.AddNew daoRS!ああ ああ = xx RS!Update ・・・ とするとエラーになります。 項目名"ああ ああ"はどのように書けばいいのでしょうか? よろしくおねがいします。

  • Access VBAでクエリーのレコード件数を取得したいのですが

    Access2003のVBAで次のような構文を用いてクエリーの該当レコード数を取得したいのですがうまく出来ません。 構文又は手法が間違っているのでしょうか。 Dim db As Database Dim rs As Recordset Dim cnt As Long Set db = CurrentDb Set rs = db.OpenRecordset("該当顧客リストクエリ", dbOpenTable) cnt = rs.RecordCount ※OpenRecordsetの行で「実行時エラー'3219'無効な処理です」と出てしまいます。 又、”該当顧客リストクエリ”では特定の抽出条件を設定して、”顧客リストテーブル”の一部を抽出するようにしています。

  • DAO エクセルvbaからアクセスのレコードの件数

    DAOで、エクセルvbaからアクセスのレコードの件数を取得したいのですが Dim ac As Object Dim db As DAO.Database Dim rs As DAO.Recordset Set ac = CreateObject("Access.Application") Set db = ac.DBEngine.OpenDatabase("D:\あああ.accdb", False, True) Set rs = db.OpenRecordset("SELECT * FROM Tマスタ WHERE masterkey like '*四*';") i = rs.RecordCount Debug.Print rs("masterkey") rs.Close: Set rs = Nothing db.Close: Set db = Nothing ac.Quit: Set ac = Nothing をすると、抽出するレコードが1000件でも、必ず1が返ります。 masterkeyフィールドは文字列型です。 なぜ実際はたくさんのレコードがあるのに、1が返るのでしょうか?

  • ACCESS クエリーから件数取得

    下記のような記述でクエリーより件数を取得したいのですがうまくいきません。 rstBufの指定が悪いのだとは思い、調べてはいるのですがうまくいかない状態です。 どなたかご助言をお願い致します。 Dim rstBuf As DAO.Recordset Dim qryBuf As DAO.QueryDef strSQL=select xx from xx Set qryBuf = CurrentDb.CreateQueryDef(Q_RPT, strSQL) Set rstBuf = qryBuf.OpenRecordset(strSQL,dbOpenDynaset) If rstBuf.EOF = False Then rstBuf.MoveLast count = rstBuf.RecordCount End If rstBuf.Close Set rstBuf = Nothing

  • レコードカウントでレコード追加する

    いつも助けられています。 また宜しくお願いします。 xp sp2 access2003  使用です。 今回二つのテーブルにレコード追加をしたく、クリックすると追加できるように見よう見まねで書いたのですが、テーブルに既に主キーがあれば追加しないようにrecordcountで分岐したいのですが、 フィルタで0件のはずがrecordcountは1になってしまいます。また、1件以上あるはずでも1になります。 テーブルAAA: 主nom、加nom、名前、数量  (主と加が主キーです。) テーブルBBB: ID、主nom、加nom、事由、日 (IDがオートナンバで主キーです。) フォームには 主nom1&#65374;主nom10、加nom1&#65374;加nom10、名前、数量、事由、日 の非連結テキストボックスがあります。 ご助言お願いします。 Private Sub 新規登録_Click() Dim rs1 As DAO.Recordset Dim rs2 As DAO.Recordset Dim db As DAO.Database Dim i As Integer i = 1 Set db = CurrentDb Set rs1 = db.OpenRecordset("AAA", dbOpenDynaset) Set rs2 = db.OpenRecordset("BBB", dbOpenDynaset) Do While Me.Controls("加nom" & i) <> "" rs1.Filter = "[主nom]=" & Me.主nom & "and [加nom]=" & Me.Controls("加nom" & i) If rs1.RecordCount = 0 Then                           ←ココがうまくいかない rs1.AddNew rs1!主nom = Me.主nom rs1!加nom = Me.Controls("加nom" & i) rs1!名前 = Me.名前 rs1!数量 = Me.Controls("数量" & i) rs1.Update End If rs2.AddNew rs2!主nom = Me.主nom rs2!加nom = Me.Controls("加nom" & i) rs2!事由 = Me.事由 rs2!日 = Me.日 rs2.Update End If i = i + 1 Loop rs1.Close rs2.Close End Sub

  • VBAのコード

    参考書に従って次のようなコードを書きました。 Private Sub previewButton_Click() Dim db as DAO.Database Dim rs as DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("Q_ラベル印刷", dbOpenDynaset)* if me!......................以下略 *印のところで「パラメーターが少なすぎます。1を指定してください。」というメッセージが出ます。 どう直せばいいのでしょうか。 よろしくお願いします。

  • SQLSERVERからデータを取得する方法

    SQLSERVERに商品テーブルを作り ACCESSにローカルテーブル(下記の例では入力テーブル)を 作りました。 ACCESS VBAで ACCESSのローカルテーブルを1件ずつ読み SQLSERVERの商品テーブルを検索したいのですが 下記の例 どちらが処理スピードが速いのですか? なお下記以外にも処理スピードが速い方法が あったら教えてください。 ●例1 Dim db As DATABASE Dim rs As Recordset   dim rt as Recordset Set db = CurrentDb Set rt = db.OpenRecordset("入力テーブル", dbOpenDynaset) sql = "SELECT 商品名 FROM 商品テーブル " sql = sql & "where 商品ID = '" & rt![商品ID] & "'" Set rs = db.OpenRecordset(sql) If rs.RecordCount = 0 Then MsgBox "NG" Else MsgBox rs![商品名] End If ●例2 Dim db As DATABASE Dim rs As Recordset   dim rt as Recordset Set db = CurrentDb Set rt = db.OpenRecordset("入力テーブル", dbOpenDynaset) Set rs = db.OpenRecordset("商品テーブル", dbOpenDynaset) rs.FindFirst "商品CD = '" & rt![商品CD] & "'" If rs.NoMatch Then MsgBox "NG" Else MsgBox rs![商品名] End If よろしくお願いします。

  • DAOでのOpenRecordsetの方法

    SQLServerのDBをDAOを使って更新しようとしていますが、方法がわからず困っています。 ------------------- private Cn as DAO.Database private function fnc1() as integer Dim ws As DAO.Workspace Dim rcdst1 As DAO.Recordset dim strCnct As String dim strSQL As String strCnct = "ODBC;Driver={SQL Server};SERVER=" & g_strSVName & ";DATABASE=" & g_strDBName & ";UID=" & strpUserID & ";PWD=" & strpPassword & ";" 'DB接続 Set Cn = ws.OpenDatabase("", False, False, strCnct) strSQL = "SELECT * FROM Table1" Set rcdst1 = Cn.OpenRecordset(strSQL, dbOpenDynaset, dbDenyWrite, dbOptimistic) ------------------------------------- このOpenRecordsetで ODBC--すべてのレコードをロックできません。(3254) のエラーが出ます。 また、OpenRecordsetを Set rcdst1 = Cn.OpenRecordset(strSQL, dbOpenDynaset) とすると rcdst1.Edit で データベースまたはオブジェクトは読み取り専用なので、更新できません。 のエラーが出ます。 どうしたらいいでしょうか。

  • accessからsqlserverにアップサイジングしましたが,テーブ

    accessからsqlserverにアップサイジングしましたが,テーブルにデータを入力出来なくなってしまいました。 Dim rs As DAO.Recordset Dim db As DAO.Database Set db = CurrentDb() Set rs = db.OpenRecordset("確認用", dbOpenDynaset) rs.AddNew rs!品番 = Me.品番 rs.Update 上記のようにDAOを介してテーブルにデータを入れていました。 アップサイジングする前は、問題なかったのですが、どういったことが原因になりますでしょうか?

  • OpenRecordSet  他について

    Accessプロジェクトを使用しています。 Dim strSQL As String Dim DBS As Database Dim RST As DAO.Recordset Set DBS = CurrentDb Set RST = DBS.OpenRecordset("TESTDATA", dbOpenDynaset,dbReadOnly) 「実行時エラー'91': オブジェクト変数またはWithブロック変数が設定されていません。」 と出てきます。デバッグを押すと、 上記最終行でSTOPします。 次のように変更しても同じでした。 Set RST = DBS.OpenRecordset("TESTDATA") 又は Set RST = DBS.OpenRecordset("TESTDATA", dbOpenDynaset) ヘルプ等を見ると、Jetワークスペースでのみ 使用可と出てきます。 ADO,DAO,OpenRecordset等が理解しきれていないように思うのですが、 Access97(DAO?)では 何も出てこなかった上記のような内容、 何故Accessプロジェクトでは 上手くいかないのでしょうか?