Page 6 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼クエリで抽出したレコード件数の表示 take4 02/8/28(水) 14:10 ┗Re:クエリで抽出したレコード件数の表示 イケガミ 02/8/28(水) 14:24 ┗Re:クエリで抽出したレコード件数の表示 take4 02/8/28(水) 15:03 ┣Re:クエリで抽出したレコード件数の表示 イケガミ 02/8/28(水) 15:14 ┣Re:クエリで抽出したレコード件数の表示 yu-ji 02/8/28(水) 15:30 ┃ ┗Re:クエリで抽出したレコード件数の表示 イケガミ 02/8/28(水) 17:55 ┃ ┗Re:クエリで抽出したレコード件数の表示 yu-ji 02/8/29(木) 9:37 ┗Re:クエリで抽出したレコード件数の表示 take4 02/8/28(水) 20:34 ─────────────────────────────────────── ■題名 : クエリで抽出したレコード件数の表示 ■名前 : take4 ■日付 : 02/8/28(水) 14:10 -------------------------------------------------------------------------
フォーム1のクエリ抽出条件をフォーム2のテキストBOXから求めています。 ここで、フォーム1のレコード件数を表示したいのですが、 Dim cnt As Integer Dim db As DAO.Database Dim rcd As DAO.Recordset Const dbName = "Query1" Set db = CurrentDb() Set rcd = db.OpenRecordset(dbName) cnt = rcd.RecordCount と作成したら、実行エラー"3061" パラメータが少なすぎます。1を指定してください。になります。 どなたか解決方法を知りませんか? |
> Const dbName = "Query1" > Set db = CurrentDb() > Set rcd = db.OpenRecordset(dbName) 元のクエリ(Query1)に Forms!フォーム名!テキストボックス名 のような参照をしてませんか? > Set rcd = db.OpenRecordset(dbName) rcd.MoveLast > cnt = rcd.RecordCount が必要だと思います。 |
▼イケガミ さん: >> Const dbName = "Query1" >> Set db = CurrentDb() >> Set rcd = db.OpenRecordset(dbName) > >元のクエリ(Query1)に >Forms!フォーム名!テキストボックス名 >のような参照をしてませんか? クエリではこの指定をしてます。 これだとだめなのですか? > >> Set rcd = db.OpenRecordset(dbName) >rcd.MoveLast >> cnt = rcd.RecordCount >が必要だと思います。 追加しましたが、同じ結果でした。 |
このコードがフォームのクラスモジュールで、 > Forms!フォーム名!テキストボックス名 が、そのフォーム上のテキストボックスだとした場合 > Dim cnt As Integer > Dim db As DAO.Database > Dim rcd As DAO.Recordset > > Const dbName = "Query1" '削除 > Set db = CurrentDb() Set rcd = db.OpenRecordset("Select * From TableName " _ & "Where FildName =" & Me!テキストボックス名 ") rcd.MoveLast > cnt = rcd.RecordCount のようにすれば件数を求めることができると思います。 |
▼take4 さん: >▼イケガミ さん: >>> Const dbName = "Query1" >>> Set db = CurrentDb() >>> Set rcd = db.OpenRecordset(dbName) >> >>元のクエリ(Query1)に >>Forms!フォーム名!テキストボックス名 >>のような参照をしてませんか? >クエリではこの指定をしてます。 >これだとだめなのですか? このままではダメですね。 エラーが出た時はここで止まってますよね? フォームのデータを条件にしたクエリをRecordSetで開く場合は、QueryDef を使ってパラメータを指定しないとダメらしいです。 こんな風になります。 set db = CurrentDB() set qdf = db.QueryDefs("Query1") qdf.Parameters(0) = [Forms]![フォーム名]![テキストボックス名] set rcd = qdf.OpenRecordset >>> Set rcd = db.OpenRecordset(dbName) >>rcd.MoveLast >>> cnt = rcd.RecordCount >>が必要だと思います。 >追加しましたが、同じ結果でした。 これはまた、別問題の指摘ですね。 MoveLastを使って、一度最後の行までデータを読みに行かないと RecordCountが本来の意味(=レコード行数)で使えない為です。 この辺の説明は、RecordCountのヘルプに詳しく書いてあるので、一度 読んでおくといいですよ。 |
To yu-ji さん フォローありがとうございます。 > フォームのデータを条件にしたクエリをRecordSetで開く場合は、QueryDef > を使ってパラメータを指定しないとダメらしいです。 こっちが正当な回答でしょうね。。 私がこの手の回答するときには、いつもSQL分でレコードセットを作成する ようにって回答しますが。。 #なぜかParametersはあんまり好きじゃないみたいで(笑) |
▼イケガミ さん: >フォローありがとうございます。 いえいえ。 かぶっちゃったなーと思いつつ、別の手段を使った回答だったので、 そのまま消さずに載っけちゃいました。 >> フォームのデータを条件にしたクエリをRecordSetで開く場合は、QueryDef >> を使ってパラメータを指定しないとダメらしいです。 >私がこの手の回答するときには、いつもSQL分でレコードセットを作成する >ようにって回答しますが。。 >#なぜかParametersはあんまり好きじゃないみたいで(笑) ダメ”らしい”ってことで分かるように、今回この方法初めて知りました(笑) 普段は自分もSQLでテーブルからSelectして使ってます。 ただ今回は、クエリーの中身がわからなかったので、SQLの書きようがなかった し、なんとかして出来ないのかなーーと、いろいろ検索してQueryDef使った方法 を見つけました。 #というか、こういった場合、パラメータを指定していないとエラーになること #を知りませんでした(^^; 勉強になりました(笑)。 ************** ちなみに、take4さん、もう見ていないかもしれませんが。 >実はレス頂いた内容あんまり理解していないのですが、そのまま記述したら >動いたので解決しました。 せっかくのチャンスなんで、お時間がある時でも、この機会に知らなかったことを 理解するようにしておいた方がいいと思いますよ(笑)。 #これからも、AccessVBAを使うことがあれば。 イケガミさんのレスでは、”OpenRecordsetでSQLが使える”ということがポイント かな?SQLをご存知なければ、クエリのSQLビューを使ってSQLを使うことができます。 このSQL使う方法を知っとけば、結構便利ですよ。 自分のレスでは、”QueryDef"と”Parameters”がポイントですね。 二つともヘルプに乗ってますが、理解するのが難しいかも? #自分が難しかっただけかも(笑) ただ、ちゃんと理解はしなくても、”そういうものがある”、”こういうことが できたはず”ということを頭の片隅にでも覚えておくだけでも、次にプログラムを 組む時に、かなり役立ちます(^^ 以上、余計なお世話でした。 |
イケガミさん、yu-jiさんアドバイスありがとうございます。 実はレス頂いた内容あんまり理解していないのですが、そのまま記述したら 動いたので解決しました。 |