- 締切済み
ACCESSのフォームで、絞込み検索すると重複したレコードが増えてしま
ACCESSのフォームで、絞込み検索すると重複したレコードが増えてしまいます。 ACCESSのフォームで、コンボボックスを6ほど設置し、条件を絞り込んでデータを抽出するシステムを作成しました。 抽出自体は問題なく出来ているのですが、再クエリを実行した時、同じ抽出条件と結果が複数レコード表示されてしまいます。 調査した結果、フォームプロパティのレコードソースに設定していますクエリの実行結果の件数と同じ件数分増えてしまうようです。 そして、そのフォームをしばらく使用していますと、「これ以上テーブルを開くことができません。」とのメッセージが出てしまいます。 これも何か関係しているのでしょうか? いろいろと調べてみましたが、解決する事ができませんでした。ご指導、宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- layy
- ベストアンサー率23% (292/1222)
>フォームプロパティのレコードソースに設定していますクエリ 何クエリですか?。 この結果をいったんテーブル作成クエリにして、どういう結果か検証してみては?。 xxクエリ→フォーム を xxクエリ→テーブル作成クエリ→(できたテーブルを元にした)クエリ→フォーム 結果は同じですが、 1回目、2回目、・・・・と どのレコードがどう増えて?いるか検証できると思います。 あやしいと思われるイベントに メッセージボックス等で情報表示するよう、わなを仕掛けるか、 クエリの結果を目視できるようにしてみます。 テーブルAとテーブルBからテーブルAを追加更新するようなクエリがあると またそれを行えば (AとBからAを追加更新した結果のA)とBからAをまた追加更新する ・・・ 繰り返すと件数が多くなるのはこういう感じでしょうか?。 結果が全く重複しているのであれば 「distinct」が使えるか検討します。
- piroin654
- ベストアンサー率75% (692/917)
>そして、そのフォームをしばらく使用していますと、 >「これ以上テーブルを開くことができません。」とのメッセージが出てしまいます。 エラーメッセージがいきなり出るのではなく、使い続けると 出てくる、というのであれば、フォームのコード、あるいは 関数の呼び出しで、 Set rs = db.Openrecordset("テーブル名", dbOpenDynaset) のようにして、プロシージャの終わりに、 rs.Close Set rs = Nothing のようにオブジェクトの破棄を明示していない、という ことはないですか。
補足
早速のご回答ありがとうございます。 VBA初心者ですので、間違っている可能性もありますが、上記記載して頂いていますプログラムを追加してみた所、「実行時エラー '424':オブジェクトが必要です。」と、エラーが発生してしまいます。 Private Sub コマンド28_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Set rs = db.Openrecordset("テーブル名", dbOpenDynaset) Me.Requery rs.Close Set rs = Nothing End Sub 上記のように入力しています。コマンド28のボタンをクリックすると、リクエリをして、コンボボックスによる条件で、抽出する仕組みです。 Me.Requeryを、DoCmd.Requeryと変更して入力しても同じ結果になります。 追加入力する場所が違うのでしょうか?
補足
お返事が遅くなりました。 >フォームプロパティのレコードソースに設定していますクエリ >何クエリですか?。 絞込み検索クエリになります。 後、フォームのレコード数が増えてしまうのは、通常の結果のようでした。 しかし、印刷しますと、そのレコード件数分同じ印刷物が出力されてしまいます。 レポートに関しましても、同じ結果のようです。 レコード件数分、印刷されてしまうのを制限する方法はあるのでしょうか?