• ベストアンサー

【Access2010】リンク先のmdbファイルを

A.mdbファイル内のとあるテーブルを複数のmdbファイルにリンクしてあります。 A.mdbファイルを移動するため、そのテーブルがリンクされているmdbファイルすべてを調べる方法はありませんか?

  • KO1014
  • お礼率97% (531/546)

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

No3です。 Access2010で動くかわからないものを載せても、 思いましたが、システムテーブルの検索ではなく TableDefのConnectプロパティを検索する方法が Access2010で受け入れらるならばと思い、載せる ことにしました。 以下を標準モジュールに貼り付け実行してみてください。 実行するのは、 Sub cmdSearch() です。 一応、実行するファイルはどのファイルでもかまいません。 一応、特定のドライブ以下のフォルダーの検索仕様です。 なお、貼り付けたあとは保存し、必ずファイルを最適化 してください。 Sub cmdSearch() Dim colFiles As New Collection Dim strBaseFile As String Dim strSearchFile As Variant Dim strSearchDir As String 'リンクされているファイルのパス。質問のA.mdbのパス strBaseFile = "C:\Users\hogehoge\Desktop\\OKWeb2\A.mdb" '検索を開始するディレクトリ strSearchDir = "C:\Users\hogehoge\Desktop" funcSearchDir colFiles, strSearchDir, "*.mdb", True For Each strSearchFile In colFiles If funcMDB(strBaseFile, strSearchFile) = True Then Debug.Print strSearchFile End If Next strSearchFile End Sub Function funcMDB(strBaseFile As Variant, strFile As Variant) As Boolean Dim db As DAO.Database Dim tdf As TableDef Set db = OpenDatabase(strFile) For Each tdf In db.TableDefs If InStr(tdf.Connect, strBaseFile) > 0 Then funcMDB = True Exit For End If Next tdf Set tdf = Nothing db.Close: Set db = Nothing End Function Function funcSearchDir(colFiles As Collection, strFolder As String, strFileDoc As String, hasSubFolder As Boolean) Dim strTemp As String Dim colFolders As New Collection Dim strFolderName As Variant strFolder = funcSerchFolder(strFolder) strTemp = Dir(strFolder & strFileDoc) Do While strTemp <> vbNullString colFiles.Add strFolder & strTemp strTemp = Dir Loop If hasSubFolder = True Then strTemp = Dir(strFolder, vbDirectory) Do While strTemp <> vbNullString If (strTemp <> ".") And (strTemp <> "..") Then If (GetAttr(strFolder & strTemp) And vbDirectory) <> 0 Then colFolders.Add strTemp End If End If strTemp = Dir Loop For Each strFolderName In colFolders Call funcSearchDir(colFiles, strFolder & strFolderName, strFileDoc, True) Next strFolderName End If End Function Function funcSerchFolder(strFolder As String) As String If Len(strFolder) > 0 Then If Right(strFolder, 1) = "\" Then funcSerchFolder = strFolder Else funcSerchFolder = strFolder & "\" End If End If End Function

KO1014
質問者

お礼

何度もご回答ありがとうございました。 せっかく詳細に記載していただいたのですが、当方の知識では貼付け方や設定方法が全然分かりません・・・ 大変申し訳ありません。 該当するmdbファイルを開いた時に都度設定し直すしかないようです。

その他の回答 (3)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

すみません。勘違いでしたね。 リンクテーブルをデザインビューで開き、 テーブルのプロパティを開くと説明の項に DATABASE=C:\Users\hogehoge\Desktop\OKWeb\A.mdb;TABLE=リンク先テーブル名 が表示されます。これはファイルを開きテーブルに用があるときに 応じて接続します。リンク先のファイルでテーブル名を変更すると 見つからないというエラーが生じます。 この接続情報はファイルのシステムテーブルに格納されていますが、 リンクされているテーブルには接続されているという情報は ありません。 したがって、横着な方法ですと、 いずれかのファイルを起動してテーブルを参照するときに エラーが生じるのを待って起動したファイルが参照していた テーブルの確認をすることになる、というような原始的な 方法を取るか、あるいはコードを書いてWindowsの全ディレクトリ、 全フォルダ、全ファイルを順次検索し、ファイルの拡張子がmdbの ファイルを見つけ出し、見つけたファイルのMSysObjectsという システムテーブルに接続し、テーブルのDatabaseフィールドに A.mdbがフルパスで存在し、かつNameフィールドにリンクされて いるテーブル名があり、Typeフィールドが6のレコードが存在 するか確認する、というコードを書くことになります。 が、 ここで問題になるのがMSysObjectsというシステムテーブルの 読み取り権限です。たぶん、Access2010くらいから格段にシステムへの アプローチが厳しくなり、ただでさえ以前のAccessでも他のファイルへの アプローチは厳しいものがありました。 したがって、Access2010では他のファイルのMSysObjectsの読み取りは かなり面倒かあるいは不可能にちかいかもしれません。 上記の内容のコードは書けますが、残念ながらAccess2010では 不可能かもしれません。 以上です。

KO1014
質問者

お礼

再度のご回答ありがとうございました。

  • Nobu-W
  • ベストアンサー率39% (725/1832)
回答No.2

https://hamachan.info/win8/access/link_h.html 参考になりませんか? m(_ _)m  

参考URL:
https://hamachan.info/win8/access/link_h.html
KO1014
質問者

お礼

ご回答ありがとうございました。 この方法は存じています。 No.1の回答者様と同じく、当方の知りたいこととは逆ですね。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

新しいクエリをSQLビューで開き、以下を貼り付け 実行してみてください。 SELECT Database, Name, Type FROM MSysObjects WHERE Type=6 ORDER BY Name; Databaseに接続先のファイル名 Nameにテーブル名 が表示されます。

KO1014
質問者

お礼

ご回答ありがとうございました。 これはリンク元のmdbファイルを調べる方法ですね。 今回はリンク先のmdbファイルが知りたいのです。

関連するQ&A

  • MDBファイルでのリンク更新

    リンクテーブルになっている場合、フォルダを移動するとリンクが切れてしまいます。 リンク更新のサンプルはいくつかあったのですが、それらは元テーブルとリンクの名前が同じ場合についてでした。 リンク名とテーブル名が異なっている場合はどうなるのでしょうか? または、A.MDBのリンクAに対してB.MDB上の同じ構造のテーブルA, テーブルB, テーブルCを順に切り替えて処理したい場合、どのように指定してやるといいのでしょうか?

  • Accessのテーブルへのリンク

    いま、ASPのDBとして使っているAccessのファイル A.mdbがあります その中の一つのテーブルを別のAccessファイル B.mdbにリンクして、参照したいと思っています。 しかし、B.mdbからリンクするときに インポートすると、A.mdbの変更が反映されず、 リンクすると、B.mdbで変更したものがA.mdbにも反映されて困っています. やりたいことはB.mdbから安全に(変更なしで)A.mdbのテーブルを 閲覧したいのです. ・A.mdbの変更をB.mdbに反映したい ・B.mdbのテーブルの変更はA.mdbに影響がない と言うことです. どうかお力添えを よろしくお願いします.

  • mdbファイル

    こんにちは。 Accesseのmdbファイルにていて教えてください。 OracleテーブルのPrimaryKeyのような設定をmdbのテーブに出来るのでしょうか? 例えばOracleのAテーブルの構造が以下の場合 mdbのテーブルでは、どのように設定するのしょうか? Oracleテーブル テーブル名:test 項目1:A 項目2:B 項目3:C 項目4:D Primary key A,C,D

  • ACCESSのマクロで別のPCにあるmdbを起動

    初心者です。 AというPCにテーブル更新用のB.mdbファイル(主にテーブル作成クエリ)を作成して共有フォルダにおいて、CというPCに別のD.mdbファイルを作成しています。 B.mdbで作成されたテーブルをD.mdbファイルにリンクしておき、さまざまなクエリでテータをとっています。 この場合、CというPCにあるD.mdbからマクロでAというPCにあるB.mdb起動してすべてのテーブルを更新させたいですが、可能でしょうか? 事情がありまして、上記のことができれば大変助かります。 B.mdbファイルにはすべてのテーブルを更新するようにマクロを作成してAutoExecとしています。 同じPCである別のmdbを起動する場合は、マクロ→アプリケーションでコマンドラインに下記のように記述して動きましたが、別のPCにあるmdbを起動する場合はどうすればいいのか教えていただけないでしょうか? 「""C:\Program Files\Microsoft Office\OFFICE11\MSACCESS.EXE" "C:\PartManagement7\01_IFS Work Table_1.mdb"」 ちなみに、AというPCはXPで、ACCESS 2003で、CというPCはWindows7でACCESS 2003です。

  • 異なるファイルのテーブルの移動及びリンク設定

    a.mdbとb.mdbとがあります そしてa.mdbに「計画表」というテーブルがあります。 バージョンは97形式です a.mdbのVBAのモジュールに、SQL文でコードを書きたいのですがどうすればいいのかわかりません やりたいことは下記です 1.a.mdbからb.mdbへ計画表を移動 2.a.mdbに、移動したb.mdb内の計画表のリンクテーブルを作成 といった具合です IN旬でCREATE TABLEを試してみましたがうまくいきません よろしくおねがいします

  • ACCESSファイル(MDBファイル)の最適化が出来ません

    皆様,宜しくお願いします。 アクセス97で作成したMDBファイルが最近最適化出来なくなってしまいました。 このファイルが保存してあるPC(OSはNT4.0,ADMINISTRATORにてログオン)にて最適化をかけた所,[’ファイル名.mdb’の読み取り権限がないため,レコ-ドを読み取ることができません]というメッセ-ジが出て最適化出来ませんでした。 最適化時このファイルは自分しか開いていませんし,特別な設定などファイル作成当時から何もしていません。これまではどんなPC(ユ-ザ名)からでも最適化出来ました。 参考になるか分かりませんが このファイルのユ-ザ-/グル-プの権限は 管理者          --すべての権限あり 管理者グル-プ及びユ-ザグル-プ--すべての権限あり   また,オブジェクトの所有者は全て[管理者]になっております。 利用環境はNT4.0とWIN2000の複数ユ-ザがファイル内のDATAを常に参照/更新/変更しています。DATAの中にはORACLEリンクもあります。 ファイルがどこか壊れてしまったのでしょうか?現在使用することは出来ています。 どうぞ宜しくお願いします。

  • OpenOffice BaseでAccessの「テーブルのリンク」

    Accessでは「テーブルのリンク」で複数のDBのテーブルのリンクを作成することができますが、 同じことをOpenOffice Baseにて行うことはできますか? やりたいことは、OpenOfficeがインストールされているWindowsマシンから、 複数のLinuxマシンのDB(PostgreSQL・MySQL)や当該Winマシンのmdbと接続し、 サーバ・DBを跨いでテーブルの結合(Viewの作成)をしたいのです。 現在、ODBC経由でそれぞれのDBとの接続をし、それぞれをOpenOfficeで リンクすることはできていますが、1つのodbファイルから全てのDBを 参照する方法がわかりません。 既存の複数システムのDBなので、それぞれのDBに手を入れることや、 DB設計を変えることはできません。 また、Windowsマシンにmdbファイルは置かれていますが、Officeは インストールされていません。 OpenOfficeについてあまり知識がないのですが、 ご教示いただけると助かります。

  • 他のPWがかかっているファイルからのリンクテーブル

    アクセス2003です。 test1.mdb test2.mdb があります。 そして test1.mdb→PWなし test2.mdb→ツール→セキュリティからパスワードをかけました。 test1.mdbを起動して一部のテーブルをtest2.mdbからリンクテーブルとして繋いでいます。 (test2.mdbのファイルは開いていない) test2.mdbからリンクテーブルしているテーブル1を開こうとすると 「パスワードが正しくありません」(3031)となり開くことが出来ません。 作業をする上で test2.mdbのファイルは開きたくないのです。 回避方法、もしくは VBAなどで他のファイルのパスワードを開く方法があれば教えてください。 よろしくお願い致します。

  • アクセスMDBファイルが壊れた

    アクセスMDBファイル(access2000)が壊れたようでテーブルを開こうとすると下記のようなメッセージが出ます。(これは、このデータベースからデータを拾っているaspファイルの一部のようです。)そのままOKを押すと開けることもあれば、開けないこともあります。 #テーブルをコピーしてもだめ #「修復」をしてもだめ #MDBファイル全体をコピーしてもだめ #あとの手を思いつきません。 ----ここからメッセージ---- クエリ式 'szObject = wszTableName OR szReferencedObject = wszTableName' の 構文エラー

  • アクセスの共有 これだときついですか?

    会社の共有フォルダにテーブル(be.mdb)を置いて フォームが入っているMDBファイルを自分のHDにおいて リンクテーブルにして作業をしていますが テーブルを開くのに1分くらいかかり、使い物になりません。 他のファイル(エクセルやPDF)を移動するのもかなりの時間がかかります。 やはりこの状態からの複数のPCでのアクセスファイルの共有はきついでしょうか? よろしくお願いします。

専門家に質問してみよう