• ベストアンサー

Access あるクエリを利用しているクエリの一覧表示

Accessについて質問させてください。 初心者的質問で申し訳ありませんが、 おわかりになる方がおられましたら教えていただけると助かります。 ・質問内容: あるクエリを利用しているクエリの一覧をみる機能はあるでしょうか? たとえば、クエリAを利用しているクエリBとクエリC・・・があったとします。 クエリAに変更を加えた場合に、他のクエリに影響がないかチェックしたいと考えた場合に どのクエリがクエリAを利用しているかを知りたいというのが理由です。 お手数ですが、以上よろしくお願いいたします。

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.3

横レス失礼致します。 > 入力テーブルまたはクエリ'MSysObject'が見つかりませんでした。 nda23さんの原文に「s」の脱字があります。 下記のものに修正すれば、エラーにならなくなるはずです。 修正版: SELECT A.Name AS クエリ名,B.Name1 AS 参照名 FROM (MSysObjects As A LEFT JOIN MSysQueries AS B ON A.Id=B.ObjectId) LEFT JOIN MSysObjects AS C ON B.Name1=C.Name WHERE A.Type=5 AND B.Attribute=5 AND C.Type=5; ※上記SQL内の「MSysObjects」や「MSysQueries」は、テーブル名です。  これらのテーブルは初期設定では見られませんが、以下の手順を踏むと表示させる  ことができるようになります:    1)メニューで「ツール(T)→オプション(O)」を選択    2)『オプション』ダイアログが開いたら、『表示』タブを選択    3)右側の上から2番目にある『システム オブジェクト(Y)』のチェックをオンにした後、     『OK』ボタンをクリック  これで、データベースウィンドウでテーブルの一覧を表示させると、「MSys」で始まる  テーブル群が表示されます。 ・・・なのですが、Access2003なのでしたら、標準機能の『オブジェクトの依存関係』を 使用してしまった方が楽なように思います。 (「調べるクエリが変わる毎に、わざわざSQL文を編集」といった手間が不要なので) なお、内部的には、結局上記SQLと同様の処理(上記テーブル群の参照)をしているので、 サブクエリやユニオンクエリなどは、やはり対象外です。 (ただ、対象外になるクエリも別に一覧化されるので、個別確認は比較的容易) 以下、その使用方法を説明します: 1)データベースウィンドウでクエリの一覧を表示 2)調べたいクエリを右クリックし、一番下の選択肢「オブジェクトの依存関係」をクリック 3)「オブジェクトの依存関係情報を生成するには、[名前の自動修正情報をトラックする]~」   のメッセージが表示された場合は、『OK』をクリック   (上記SQLが正常に動くようなら、多分表示されません) 4)「オブジェクトの依存関係を表示するには、先に依存関係情報を更新する必要が~」の   メッセージが表示された場合も、『OK』をクリック   ※上記メッセージも含め、『ヘルプ』は確認しておくことをお勧めします。    (同じファイルでは、2回目以降は(多分)表示されません) 5)画面右側に『オブジェクトの依存関係』ウィンドウが表示されるので、「このオブジェクトに  依存するオブジェクト」を選択すると、その下に、右クリックしたクエリを使用している  テーブルやクエリ、フォームの一覧が表示されます。  (一番下には、この機能で確認できないサブクエリやユニオンクエリなどが表示されるので、   こちらは個別に確認します)  ※表示されたクエリ名などはハイパーリンクになっており、クリックするとそれぞれがデザイン    ビューで展開されます。 ・・・以上です。

sugiyam0
質問者

お礼

ご丁寧にありがとうございます。 早速ためさせていただきました。 非常によく理解できました。 これからも使えそうな技です! ありがとうございました。

その他の回答 (2)

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

MSysPbject ではなく、MSysyObjects です。 日本語では単数/複数という概念が乏しいのですが、英語では 単数=オブジェクト 複数=コレクション(オブジェクトの集合体) という明確な使い分けがあります。この辺の感覚に慣れてくると、 MSの色々なオブジェクトなりメソッドなりが見えてきますよ。

sugiyam0
質問者

お礼

ご回答ありがとうございます。 恥ずかしながら、 そもそもAccessにSQLビューがあること自体感知しておりませんでしたので大変勉強になりました。

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

Accessのバージョンにもよりますが、Access2003ではシステム管理テーブルの MsysObjectsとMsysQueriesを使うと不完全ではありますが、参照している テーブル、またはクエリの名前を知ることができます。 クエリを新規作成し、SQLビューで、以下のSQLをコピペしてください。 SELECT A.Name AS クエリ名,B.Name1 AS 参照名 FROM (MSysObjects As A LEFT JOIN MSysQueries AS B ON A.Id=B.ObjectId) LEFT JOIN MSysObject AS C ON B.Name1=C.Name WHERE A.Type=5 AND B.Attribute=5 AND C.Type=5 ※Type=5はクエリを指しています。 不完全と言ったのは、サブクエリで使用しているクエリは検出しないからです。 他にも拾えないケースがあるかも知れませんが、大体はカバーできると思います。

sugiyam0
質問者

お礼

ご連絡が遅くなり大変申し訳ありません。 丁寧なご回答ありがとうございます。 早速試してみましたが、 「入力テーブルまたはクエリ'MSysObject'が見つかりませんでした。そのテーブルやクエリが存在していること、または名前が正しいことを確認してください。」 と警告が出ます。 バージョンが違うのでしょうか。 利用しているAccessは2003です。

関連するQ&A