Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1303 / 2272 ツリー ←次へ | 前へ→

【7808】クエリの抽出結果の件数を取得したい MIKA 06/5/10(水) 21:31 質問[未読]
【7809】Re:クエリの抽出結果の件数を取得したい まさ7251 06/5/10(水) 22:23 発言[未読]
【7810】Re:クエリの抽出結果の件数を取得したい MIKA 06/5/11(木) 22:00 お礼[未読]
【7811】Re:クエリの抽出結果の件数を取得したい まさ7251 06/5/11(木) 22:31 発言[未読]
【7814】Re:クエリの抽出結果の件数を取得したい 小僧 06/5/12(金) 9:38 発言[未読]
【7816】Re:クエリの抽出結果の件数を取得したい MIKA 06/5/12(金) 22:20 お礼[未読]

【7808】クエリの抽出結果の件数を取得したい
質問  MIKA  - 06/5/10(水) 21:31 -

引用なし
パスワード
   いつも参考にさせていただいています。以前こちらのサイトに質問をした事があったのですが、クエリの抽出結果の件数をカウントして36656件以上だったら何もしない。36656件以下ならクエリを実行するVBAの書き方を質問し、独自で解ったつもりでいたのですが、これではクエリの抽出結果ではなく同じ名前のテーブルの件数をカウントしていることに気が付きました。
クエリの結果を表示する前に変数に代入するには、どのように書けば良いのでしょうか?
ご指導宜しくお願いします。

Private Sub コマンド0_Click()

  Dim rs     As Recordset
  Dim rsCount   As Double

  Set rs = CurrentDb.OpenRecordset("入出金")
  rs.MoveLast
  rsCount = rs.RecordCount

  If rsCount < 36656 Then
  
  MsgBox "入出金の実行結果" & vbCrLf & _
      rsCount & "件のレコードが抽出されました"
  DoCmd.OpenQuery "入出金"
  Else
 
  MsgBox "入出金の実行結果" & vbCrLf & _
      rsCount & "件のレコードが抽出されました。条件を変えて実行してください"
   
  Exit Sub

  End If

  End Sub

【7809】Re:クエリの抽出結果の件数を取得したい
発言  まさ7251  - 06/5/10(水) 22:23 -

引用なし
パスワード
   ▼MIKA さん:
>これではクエリの抽出結果ではなく同じ名前のテーブルの件数を
>カウントしていることに気が付きました。

テーブルとクエリに同じ名前を付けることは出来ません。
"入出金"というのは、テーブルまたはクエリなのですか?
どこかで何かを勘違いしていませんか?

>クエリの結果を表示する前に変数に代入するには、どのように書けば良いのでしょうか?

以下、質問とは直接関係ありませんが。
前回の質問でYU-TANGさんより、
> DCount 関数を使ってはいけない、あるいは使えないという制約
> がある特殊な状況ですか?
とあった点への返答もないままですか?

DCountなら1行ですむのを、なぜレコードセットを使っているのでしょうか?

【7810】Re:クエリの抽出結果の件数を取得したい
お礼  MIKA  - 06/5/11(木) 22:00 -

引用なし
パスワード
   ご指導ありがとうございます。

私の書いたVBAですと、テーブルのレコードをカウントするとうまくいくのですが、クエリだと件数がうまくカウント出来ませんでした。
EXCELのVBAから勉強して、ACCESSのVBAは始めたばかりなのですが、クエリを格納しないと(Set・・・・のように)件数がカウント出来ないのかと思い、テーブルではなくクエリのSet方法を知りたいと思いました。
テーブル作成クエリで抽出した後でしたらちゃんと件数を抽出出来ましたので、その方法にしようと思います。
「Count」を使うと抽出出来るのは以前YU-TANGさんにご指導頂きお礼と作成した文を公開したのですが、言葉が足りなかったでしょうか?


▼まさ7251 さん:
>▼MIKA さん:
>>これではクエリの抽出結果ではなく同じ名前のテーブルの件数を
>>カウントしていることに気が付きました。
>
>テーブルとクエリに同じ名前を付けることは出来ません。
>"入出金"というのは、テーブルまたはクエリなのですか?
>どこかで何かを勘違いしていませんか?
>
>>クエリの結果を表示する前に変数に代入するには、どのように書けば良いのでしょうか?
>
>以下、質問とは直接関係ありませんが。
>前回の質問でYU-TANGさんより、
>> DCount 関数を使ってはいけない、あるいは使えないという制約
>> がある特殊な状況ですか?
>とあった点への返答もないままですか?
>
>DCountなら1行ですむのを、なぜレコードセットを使っているのでしょうか?

【7811】Re:クエリの抽出結果の件数を取得したい
発言  まさ7251  - 06/5/11(木) 22:31 -

引用なし
パスワード
   >「Count」を使うと抽出出来るのは以前YU-TANGさんにご指導頂き
> お礼と作成した文を公開したのですが、言葉が足りなかったでしょうか?

なぜDCountを使わないのですか?何か理由があるのですか?
という問いに対しての返答がなかったので、
聞いてみたまでです。

気に障ったようでしたら申し訳ありません。

【7814】Re:クエリの抽出結果の件数を取得したい
発言  小僧  - 06/5/12(金) 9:38 -

引用なし
パスワード
   ▼MIKAさん、まさ7251 さん:
おはようございます。


>> テーブルのレコードをカウントするとうまくいくのですが、
>> クエリだと件数がうまくカウント出来ませんでした。

クエリの内容が公開されてないので断言はできませんが、
通常ならクエリだとできない、という事はないと思いますよ。


>>「Count」を使うと抽出出来るのは

YU-TANG さんも まさ7251 さんも
「Count」でなく、「DCount」と仰っているのには気づいておられますか?

MsgBox DCount("*","入出金")

の1行で結果を出せる(はず)なのに
何故わざわざレコードセットを取得しているのでしょうか?
という話の流れだと思うのですがいかがでしょう。


>> テーブル作成クエリで抽出した後でしたらちゃんと件数を抽出出来ましたので、
>> その方法にしようと思います。

何回もテーブルを作成したり消去したりするとMDBのファイル量が肥大してしまいます。
最適化すると戻る場合もありますが、ゴミが残ってしまう場合もあります。

今後も長く使っていこうと思われているシステムでしたら
できる限り余計なオブジェクトは作成しない方が良いと思われます。

【7816】Re:クエリの抽出結果の件数を取得したい
お礼  MIKA  - 06/5/12(金) 22:20 -

引用なし
パスワード
   ▼小僧 さん:
ご指導ありがとうございます。
Dcountで試してみたらちゃんと件数を抽出出来ました。
確かにテーブル作成クエリは動作が遅くなるので気になっていました。
親切にご指導いただいて有難うございました。
とても勉強になりました。これからも頑張ります!


>▼MIKAさん、まさ7251 さん:

>おはようございます。
>
>
>>> テーブルのレコードをカウントするとうまくいくのですが、
>>> クエリだと件数がうまくカウント出来ませんでした。
>
>クエリの内容が公開されてないので断言はできませんが、
>通常ならクエリだとできない、という事はないと思いますよ。
>
>
>>>「Count」を使うと抽出出来るのは
>
>YU-TANG さんも まさ7251 さんも
>「Count」でなく、「DCount」と仰っているのには気づいておられますか?
>
>MsgBox DCount("*","入出金")
>
>の1行で結果を出せる(はず)なのに
>何故わざわざレコードセットを取得しているのでしょうか?
>という話の流れだと思うのですがいかがでしょう。
>
>
>>> テーブル作成クエリで抽出した後でしたらちゃんと件数を抽出出来ましたので、
>>> その方法にしようと思います。
>
>何回もテーブルを作成したり消去したりするとMDBのファイル量が肥大してしまいます。
>最適化すると戻る場合もありますが、ゴミが残ってしまう場合もあります。
>
>今後も長く使っていこうと思われているシステムでしたら
>できる限り余計なオブジェクトは作成しない方が良いと思われます。

1303 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078229
(SS)C-BOARD v3.8 is Free