過去ログ

                                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を指定してください。になります。
どなたか解決方法を知りませんか?

 ───────────────────────────────────────  ■題名 : Re:クエリで抽出したレコード件数の表示  ■名前 : イケガミ <ikegami_kumamoto@dosule.com>  ■日付 : 02/8/28(水) 14:24  -------------------------------------------------------------------------
   >   Const dbName = "Query1"
>   Set db = CurrentDb()
>   Set rcd = db.OpenRecordset(dbName)

元のクエリ(Query1)に
Forms!フォーム名!テキストボックス名
のような参照をしてませんか?

>   Set rcd = db.OpenRecordset(dbName)
rcd.MoveLast
>   cnt = rcd.RecordCount
が必要だと思います。

 ───────────────────────────────────────  ■題名 : Re:クエリで抽出したレコード件数の表示  ■名前 : take4  ■日付 : 02/8/28(水) 15:03  -------------------------------------------------------------------------
   ▼イケガミ さん:
>>   Const dbName = "Query1"
>>   Set db = CurrentDb()
>>   Set rcd = db.OpenRecordset(dbName)
>
>元のクエリ(Query1)に
>Forms!フォーム名!テキストボックス名
>のような参照をしてませんか?
クエリではこの指定をしてます。
これだとだめなのですか?
>
>>   Set rcd = db.OpenRecordset(dbName)
>rcd.MoveLast
>>   cnt = rcd.RecordCount
>が必要だと思います。
追加しましたが、同じ結果でした。

 ───────────────────────────────────────  ■題名 : Re:クエリで抽出したレコード件数の表示  ■名前 : イケガミ <ikegami_kumamoto@dosule.com>  ■日付 : 02/8/28(水) 15:14  -------------------------------------------------------------------------
   このコードがフォームのクラスモジュールで、
> 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

のようにすれば件数を求めることができると思います。

 ───────────────────────────────────────  ■題名 : Re:クエリで抽出したレコード件数の表示  ■名前 : yu-ji  ■日付 : 02/8/28(水) 15:30  -------------------------------------------------------------------------
   ▼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のヘルプに詳しく書いてあるので、一度
読んでおくといいですよ。

 ───────────────────────────────────────  ■題名 : Re:クエリで抽出したレコード件数の表示  ■名前 : イケガミ <ikegami_kumamoto@dosule.com>  ■日付 : 02/8/28(水) 17:55  -------------------------------------------------------------------------
   To yu-ji さん
フォローありがとうございます。

> フォームのデータを条件にしたクエリをRecordSetで開く場合は、QueryDef
> を使ってパラメータを指定しないとダメらしいです。
こっちが正当な回答でしょうね。。

私がこの手の回答するときには、いつもSQL分でレコードセットを作成する
ようにって回答しますが。。
#なぜかParametersはあんまり好きじゃないみたいで(笑)

 ───────────────────────────────────────  ■題名 : Re:クエリで抽出したレコード件数の表示  ■名前 : yu-ji  ■日付 : 02/8/29(木) 9:37  -------------------------------------------------------------------------
   ▼イケガミ さん:
>フォローありがとうございます。

いえいえ。
かぶっちゃったなーと思いつつ、別の手段を使った回答だったので、
そのまま消さずに載っけちゃいました。

>> フォームのデータを条件にしたクエリをRecordSetで開く場合は、QueryDef
>> を使ってパラメータを指定しないとダメらしいです。
>私がこの手の回答するときには、いつもSQL分でレコードセットを作成する
>ようにって回答しますが。。
>#なぜかParametersはあんまり好きじゃないみたいで(笑)

ダメ”らしい”ってことで分かるように、今回この方法初めて知りました(笑)
普段は自分もSQLでテーブルからSelectして使ってます。
ただ今回は、クエリーの中身がわからなかったので、SQLの書きようがなかった
し、なんとかして出来ないのかなーーと、いろいろ検索してQueryDef使った方法
を見つけました。
#というか、こういった場合、パラメータを指定していないとエラーになること
#を知りませんでした(^^;

勉強になりました(笑)。

**************

ちなみに、take4さん、もう見ていないかもしれませんが。

>実はレス頂いた内容あんまり理解していないのですが、そのまま記述したら
>動いたので解決しました。

せっかくのチャンスなんで、お時間がある時でも、この機会に知らなかったことを
理解するようにしておいた方がいいと思いますよ(笑)。
#これからも、AccessVBAを使うことがあれば。

イケガミさんのレスでは、”OpenRecordsetでSQLが使える”ということがポイント
かな?SQLをご存知なければ、クエリのSQLビューを使ってSQLを使うことができます。
このSQL使う方法を知っとけば、結構便利ですよ。

自分のレスでは、”QueryDef"と”Parameters”がポイントですね。
二つともヘルプに乗ってますが、理解するのが難しいかも?
#自分が難しかっただけかも(笑)

ただ、ちゃんと理解はしなくても、”そういうものがある”、”こういうことが
できたはず”ということを頭の片隅にでも覚えておくだけでも、次にプログラムを
組む時に、かなり役立ちます(^^

以上、余計なお世話でした。

 ───────────────────────────────────────  ■題名 : Re:クエリで抽出したレコード件数の表示  ■名前 : take4  ■日付 : 02/8/28(水) 20:34  -------------------------------------------------------------------------
   イケガミさん、yu-jiさんアドバイスありがとうございます。

実はレス頂いた内容あんまり理解していないのですが、そのまま記述したら
動いたので解決しました。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 6