• ベストアンサー

Recordcountについて

ACCESS97を使用しています。 テーブルAの項目1の中で、テキスト1に入力した値をキーに SELECTし そのデータ件数を知りたいのです。 しかし、下記のようにすると、0件の時はintcountは 0 になるのですが 1以上の場合、複数でも intcountは 1になります。 1件と 2件以上が区別できません。 何故でしょうか? Set db = CurrentDb() strSQL = "SELECT * FROM テーブルA WHERE " strSQL = strSQL + "項目1='" & Me.テキスト1 & "';" Set RS1 = db.OpenRecordset(strSQL, dbOpenDynaset, dbReadOnly) intcount = RS1.RecordCount If (intcount = 0) Then Me.テキスト2 = "使用無し" ElseIf (intcount = 1) Then Me.テキスト2 = "1件使用" ElseIf (intcount > 1) Then Me.テキスト2 = "複数使用" End If

  • cdma
  • お礼率36% (91/247)

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

  • ベストアンサー
  • mam_00
  • ベストアンサー率50% (5/10)
回答No.2

こんばんは。 さて、私も cdma様 と同じ経験をしたことがあります。 ヘルプを見ると、RecordCountプロパティーは、正確にはレコードの件数ではありません。検索したレコードの件数らしいのです。 さて、どうするかですが、 RecordCountプロパティーを見る前に、MoveFirstとMoveLastを使えばよいのです。      -略- Set RS1 = db.OpenRecordset(strSQL, dbOpenDynaset, dbReadOnly) RS1.MoveFirst RS1.MoveLast intcount = RS1.RecordCount      -略- こうすれば確実にレコード数を取得できると思います。 よろしくお願いします。

cdma
質問者

お礼

ありがとうございました。 上手く行きました

その他の回答 (1)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

こんにちは。 あんまり詳しくないのですが、、、 Set RS1 = db.OpenRecordset(strSQL, dbOpenDynaset, dbReadOnly) '↓これを入れる If Not RS1.EOF Then RS1.MoveLast intcount = RS1.RecordCount で良いかと思います。 RecordCountプロパティのヘルプよれば「ダイナセット タイプ、スナップショット タイプ、または前方スクロール タイプのRecordset オブジェクトのレコード数は、すべてのレコードがアクセスされるまでは RecordCount プロパティを調べてもわかりません。」

関連するQ&A

  • 条件によって、Where分のキーを変更させたい

    ACCESS97を使用しています。SQL文の中で、変数?を使用したいのですが、 その扱いがわかりません。 例) 下記のようなテーブルがあります。 項目(1) 項目(2) 項目(3) 項目(4) 項目(5) 1 A 100 EE RR 2 B 200 EE RR 3 A 100 EE RR 4 A 100 CC EE 5 B 300 RR EE 6 A 100 RR EE 7 B 200 CC RR フォーム上で、項目(2)を入力します。(入力_1) また、もう1つ、データを入力します。(入力_2、EE,CC,RR) 項目(2)の値によって、 Aの時、項目(4) Bの時、項目(5)をみにいくようにしたいのです。 例えば、入力_1=A、入力_2=EEの時、 合計値200 (項目(1)は、1,3)     入力_1=B、入力_2=EEの時、 合計値300 (項目(1)は、5) この時、下記のようなロジックを組んでみたのですが パラメーターが少なすぎます と出てきます。  (SELECT対象は、一旦 * にしています) Dim KEY As String If (ME.入力_1 = "A") Then  '条件は別入力です。 KEY = "項目(4)" Else KEY = "項目(5)" End If Set RS = Nothing Set DB = Nothing Set DB = CurrentDb() strSQL = "SELECT * FROM テーブル WHERE " strSQL = strSQL + "KEY='" & Me.入力_2 & ";" strSQL = strSQL + "AND 項目(2)='" & Me.入力_1 & "'" Set RS = DB.OpenRecordset(strSQL, dbOpenDynaset, dbReadOnly) KEY をどのようにすればいいのかがわかりません。 宜しくお願いします。

  • ACCESS97のMAX関数について

    ACCESS97を使用しています。 "関数"の使い方が全くわかりません。 (というより、SQLも含めて…)  テーブル"TBL_A"の"項目B" から最大値を変数SDHSに取得したいのですが どうすればいいのでしょうか?  Dim db As DATABASE Dim RS As Recordset Dim SDHS, strSQL As String Set db = CurrentDb() strSQL = "SELECT Max(項目B) FROM TBL_A ;" Set RS = db.OpenRecordset(strSQL, dbOpenDynaset, dbReadOnly) SDHS = Max(項目B)

  • SQLの条件分に ( ) が入っている場合

    Access97を使用しています。 SQLの条件で、項目名に '(' が入っている場合 どうすればいいのでしょうか? 例えば 下記の場合 " 式に未定義関数 '出荷日'があります " と出てきます。 Set DB = CurrentDb() strSQL = "SELECT SUM(数量) AS A FROM GAH100 WHERE " strSQL = strSQL + "出荷日(新)='" & Me.日付入力 "';" Set RS = DB.OpenRecordset(strSQL, dbOpenDynaset, dbReadOnly) 項目名に() が無いようにするしかないのでしょうか?

  • "カレントレコードがありません"とでてきます

    Access97を使用しています。 データは テーブルAの項目B、項目Cが下記のようにあるとします。 フォーム上のText"B"に項目Bを入力します。 項目B 項目C 11 a 11 b 22 aa 22 bb 22 cc 33 aaa 33 ccc この時 Set DB = CurrentDb() strSQL = "SELECT * FROM A WHERE " strSQL = strSQL + "B='" & Me.B & "';" Set RS = DB.OpenRecordset(strSQL, dbOpenDynaset, dbReadOnly) RS.MoveFirst RS.MoveLast m = RS.RecordCount For i = 1 To m COIL_N = RS.Fields("C") Call RS.MoveNext Next i 上記のようなモジュールですが、例えば 項目Bの"11"を選んだ時、項目Cの二番目のデータbが 取得できません。 "カレントレコードがありません"とでてきます。何故でしょうか?

  • 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

  • Yes/Noフラグの値をコピーできない

    すいません。ACCESS2003 VBAで下記の問題で困っています。 新たに作成したmdbファイル(テーブルの中身は空)に既存のmdbファイルのテーブル内容をコピーしたいのですが、Yes/Noフラグ型だけ移行できません。一応サンプルのソースです↓ Dim db As DAO.Database Dim RS As DAO.Recordset Dim strsql As String コピー元のmdbファイルをオープン Set db = OpenDatabase("コピー元mdb") 'SQLの生成 strsql = "" strsql = strsql & " SELECT * FROM テーブル名" 'レコードセット生成 Set RS = db.OpenRecordset(strsql, dbOpenSnapshot, dbReadOnly) 'コピー元テーブルにデータがあるか判定 If RS.RecordCount = 0 Then msgbox "データがありません" Else RS.MoveFirst 'コピー先のデータベースを設定 Set db = OpenDatabase("コピー先mdb") 'レコードの初期化 db.Execute (DELETE FROM コピー先テーブル名) Do While RS.EOF = False strsql = "" strsql = strsql & " INSERT INTO コピー先テーブル名(" strsql = strsql & " ,コピー先のYes/Noフラグ値" ' strsql = strsql & ")VALUES(" strsql = strsql & " ,'"コピー元のYes/Noフラグ値 "' " strsql = strsql & ")" db.Execute (strsql) RS.MoveNext Loop End If RS.Close db.Close

  • 条件分に数値型は可能?

    ACCESS97を使用しています。 SQLの中で 数値型の場合、条件式に適用できないのでしょうか? 例えば 下記の場合 Set DB = CurrentDb() strSQL = "SELECT * FROM テーブルA WHERE " strSQL = strSQL + "コード ='" & YU(i) & "'" strSQL = strSQL + " AND ラベルNO='" & RA(i) & "';" Set RS = DB.OpenRecordset(strSQL, dbOpenDynaset, dbReadOnly) YU(i)は、文字型、RA(i)は数値型です。 RA(i)で"抽出条件でデータ型が合いません"と出ます。 コードは文字型、ラベルNOは数値型です。数値型では条件として適用できないのでしょうか? 可能な場合、上のような表現ではできないのでしょうか?

  • フォーム上のテキストボックスにテーブル値を改行代入

    Access2013を使用しています。 フォーム上のテキストボックスにテーブルAの項目Bを複数レコード分を改行しながら 代入したいのです。 Set CN = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open "テーブルA", CN, adOpenStatic, adLockOptimistic Do Until rs.EOF   If rs!項目B <> "" Then    Me!テキストボックス = rs!項目B & vbLf   End If   rs.MoveNext Loop 上記ですと、当たり前ですが最終レコードの項目Bのみがセットされます。 検索ワードがよくないのか、同様の問合せを見つけることができません。 よろしくお願いします。

  • 項目が一致したフィールドを追加

    インポートしたデータを項目名が一致したフィールドを作業テーブルに追加クエリしたい。 ご回答ありがとうございます。是非教えてください。 ・インポートは先頭行をフィールド名として使ってません。 項目名_PP(20個)にある項目名とインポートした一時テーブルにある項目と一致したフィールドを作業テーブルに追加したいのですが取得した20フィールドを作業テーブルに追加をどうやっていいかわかりません。 作業テーブルも20項目あるのですが・・ご教授お願いします。 Set db = CurrentDb() Dim rs As DAO.Recordset Dim rstop As DAO.Recordset Dim SQL As String Dim SQLTop As String Dim iCntTop As Integer Dim sERRTXT As String Dim bFlg As Boolean Dim sSQLNM As String SQL = "項目名_PP" SQLTop = "一時テーブル" If F_RecordsetOpen(SQLTop, rstop, dbOpenSnapshot, dbReadOnly) Then If F_RecordsetOpen(SQL, rs, dbOpenSnapshot, dbReadOnly) Then Do Until rs.EOF For iCntTop = 0 To 254 sSQLNM = "" '項目名が一致したら(=必要項目)ループを抜ける If rstop.Fields(iCntTop) = rs![項目名] Then sSQLNM = rstop.Fields(iCntTop).Name Debug.Print sSQLNM Exit For End If Next iCntTop If Trim(sSQLNM) <> "" Then ' SQL = " INSERT INTO 作業テーブル ' 'sSQLNMでループで抜けたフィールドを追加作業テーブルに追加したいのですが・・・ Call F_ExecuteSQL(SQL) End If rs.MoveNext Loop End If Call S_RecordsetClose(rs) End If Call S_RecordsetClose(rstop) End Sub

  • AccessのフォームでAND検索

    Accessで今、土地物件を検索するものを作っています。 物件はテーブルに200件くらいあります。 そのテーブルのフィールドに「土地面積(坪)」と「価格」いう名前のフィールドがあるのですが、この2つは【○○~○○】という具合にフォームでボタンを押せば範囲検索が出来るようになっています。 だけど、OR条件になってしまいます。 出来れば、それをAND条件で検索できる様にしたいのです。 ソースは今このようになっています↓↓ テキスト:「tubo1」「tubo2」「kakaku1」「kakaku2」 Private Sub コマンド55_Click() Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("物件情報", dbOpenDynaset) If tubo1 <> "" Then If tubo2 <> "" Then    rs.Filter = "[土地面積(坪)] >=" & tubo1 & " And [土地面積(坪)] <=" & tubo2 Else rs.Filter = "[土地面積(坪)] =" & tubo1 End If If kin1 <> "" Then If kin2 <> "" Then rs.Filter = "[価格] >=" & kakaku1 & " And [価格] <=" & kakaku2 Else rs.Filter = "[価格] =" & kakaku1 End If End If End If Set rs = rs.OpenRecordset Set Me.Recordset = rs Me.Requery Set rs = Nothing Set db = Nothing End Sub です。宜しくお願い致します。 ちなみにAccess2007です。

専門家に質問してみよう