• 締切済み

アクセス 取得される件数が違う

Q一覧というクエリは実際は300レコードアリ、フィルタ後200レコードになるのに、 VBAで rs.Open "Q一覧", cn, adOpenStatic, adLockPessimistic Debug.Print rs.RecordCount で見れ見ると、 フィルタ前の300件が取得されてしまいます。 なぜフィルタが適用されてないのでしょうか? Q一覧は、 クエリ1とクエリ2を結合させて作ったクエリですが 元々がテーブルではなくクエリだからこの現象が起こるのでしょうか?

みんなの回答

  • okgoo3
  • ベストアンサー率74% (20/27)
回答No.4

選択クエリをダブルクリックしてテーブルのような見た目で開いた場合のフィルター設定は、クエリーの定義には含まれない。 だから 「クエリーを開く」 → 「フィルターでいろんな条件で絞ってみる」 という手順の操作になる。 同じクエリーをプログラム側から開く場合も同様。 クエリーを開いただけでは、そのクエリーに定義されている内容でレコードを抽出しているだけであって、必要であればそのあとにフィルター操作を行う必要がある。 もしそのクエリーにフィルターで指定した条件も含めたいのであれば、クエリーの定義そのものに手を加えればよい。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

下記が、根本の点で見当違いならすみません。 参考 同様の質問 http://www.accessclub.jp/bbs5/0039/vba12291.html ーー クエリの結果は、アクセスでは、テーブルと同等に扱えるのは常識です。ただそのクエリを指定して使う都度、元テーブル群から、SQL文が実行されるのではないですか。 これをユーザーは、実態としてそういうテーブル類似のものが存在すると思って扱っても良いということでしょう。 ーー 一方フィルタをかけて、画面に出来上がっている、フィルタ結果は、ファイル的に実態が作られてあるのでしょうか。 その段階では、レコードファイル的に、絞った後のものができていないとしたら、その段階でrs.Recordcountしたら、絞る前の元の件数を表示する。 この点、大誤りしていたらごめんなさい。そういう観点から見直したらどうでしょう。

  • oboroxx
  • ベストアンサー率40% (317/792)
回答No.2

あまりアクセスに詳しくはないのですが、「フィルタ後」というのは何でしょうか? このフィルタというのがクエリのSQL文のWHERE句でないなら、VBAでのカウントは正しいように思われます。

回答No.1

Q、なぜフィルタが適用されてないのでしょうか? A、フィルターの適用を指示していないからでは・・・。 RS.Filter = "XXXXX"