- ベストアンサー
Access 2003でサブフォームが更新されない問題について
- Access 2003でリストボックスの値を変更しても、サブフォームが更新されない問題について質問です。
- サブフォームのレコードソースはクエリから引用しており、コードを実行しても更新されません。
- 解決策が分からず困っているので、詳しい方に教えていただきたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
確認したところ、クエリのSQL文の更新は、その前に開かれていた フォームに対しては反映されないようです。 (レコードソースにクエリが指定されている場合、クエリそのものを 使用しているというより、そこに記述されたSQL文が使用されて いる、ということかもしれません) 解決策としては、レコードソース(RecordSource)の再設定、という ことになるかと思います。 とりあえず、運用上「計画クエリ」のSQL文が、現在のサブフォームのSQL分と 整合性を求めるかどうかで、2通りの対処が考えられます。 【解決策1:「計画クエリ」のSQL文を連動させる必要がある場合】 計画クエリのSQL文を差し替えた後に、レコードソースに同クエリを 再設定します。 Dim db As DAO.Database, qry As DAO.QueryDef Set db = CurrentDb Set qry = db.QueryDefs("計画クエリ") qry.SQL = newSQL 'ここではレコードセットを開く必要はないので、そのまま閉じます qry.Close 'CurrentDbの場合、Closeは不要(無効)かと思います(多分(汗)) Set db = Nothing Me!計画クエリのサブフォーム.Form.RecordSource = "計画クエリ" 【解決策2:「計画クエリ」のSQL文を連動させなくてもよい場合】 フォーム・サブフォームのレコードソースには、テーブルやクエリだけでなく、 SQL文も指定可能なので、計画クエリのSQL文は変更せずに、 レコードソースを直接編集します。 こちらの場合、切替に要するコードは1行だけです。 Me!計画クエリのサブフォーム.Form.RecordSource = newSQL ・・・以上です。
その他の回答 (1)
- piroin654
- ベストアンサー率75% (692/917)
提示されたコードはよくわからないので、 以下の部分について、 >Me!計画クエリのサブフォーム.Form.Requery 一般的には Forms!メインフォーム名!サブフォームを表示するメインフォームのコントロール名.Form.Requery あるいは、 Forms!メインフォーム名!サブフォームを表示するメインフォームのコントロール名.Requery という参照のしかたをしますが、Meを使って、 Me!埋め込みの名前.Form.Requery あるいは、 Me!埋め込みの名前.Requery としても参照できます。したがって、 サブフォームを表示するメインフォームのコントロール名 = 計画クエリのサブフォーム に設定していればいいのですが、 何もしなければ、埋め込み0というような 名前を使うようになります。 つまり、Me!の後に来るのはサブフォーム の名前ではない、ということです。 メインフォームの埋め込みのプロパティ から名前を確認するか、設定を変えるか してみてください。 話がずれていたらスルーしてください。
お礼
ご回答ありがとうございます。 サブフォームのRecordSourceを再設定してあげればよかったのですね。 RecordSourceでSQLを指定するだけで更新するとは知りませんでした。 こちらの思うとおりに動作しました。 ありがとうございました。