• ベストアンサー

非連結サブフォームのレコードソース

非連結のサブフォームに親フォームで設定された条件で レコードソースを更新しているのですが、 「2467指定した式で閉じているかまたは存在しないオブジェクトを参照しています」とエラーが出ます。 色々調べた結果フィルタで対処する方法しか見つかりませんでした。 参考URL:http://www.accessclub.jp/bbs3/0132/superbeg45961.html フィルタを使用するために、既定でレコードソースを設定してしまうと レコードソースとなっているリンクテーブルが非常に重いため、開くまで非常に時間がかかってしまいます。 フィルタを使わずに回避する方法はないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

1です 2と3で手法が違いますがその辺りの解説は?

その他の回答 (3)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

条件を適当に設定したSQL自体のクエリは正しく動くのでしょうか?

forgedcode
質問者

補足

nda23様 クエリ自体は全く問題ありません。 現在はサブフォームのレコードソースにクエリ名を指定し メインフォームでボタンクリック時に QueryDefを利用しクエリーを生成してから メインフォーム内のサブフォームのソースオブジェクトにサブフォーム名を設定してます。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

レコードソースを動的に更新することは良く使う手です。 フィルタとかオブジェクトは使わず、SQL(文字列)を書き込む方法で 実現できるはずです。 Dim SQL As String SQL = "SELECT ~ WHERE A=" & 画面項目 '画面による条件指定 Me.SubForm.Form.RecordSource = SQL Me.SubForm.Form.Requery 'やらなくても良いと思うが、念のため Recordsetは再クエリした結果、生成されるオブジェクトなので、 ここへ何かを代入するのは話が逆(つまり、間違い)です。

forgedcode
質問者

補足

nda23様 Private Sub メインフォームボタン_Click() Me!サブフォーム.Form.RecordSource = SELECT * FROM TBL_SUB" & _ " WHERE ID = '"& Parent!iD &"'" End Sub としているのでnda23様と同じ形で実行しています(変数を通すか通さないかはありますが) この形で現状上記エラーが出てしまいます。

回答No.1

非連結・・・ではないですよね? レコードソースを更新・・・具体的にどのように?

関連するQ&A