まりふのひと

破損した mdb からオブジェクトをインポートする

目的は、破損した mdb の復活です。通常であれば、

    1. mdb を開く
    2. [ツール]メニュー ⇒[データベース ユーティリティ]⇒[データベースの最適化/修復]をクリック

で行うのですが、

    • 肝心の mdb が開けないと、この方法は使えません。
    • 更に、これ(最適化/修復)を行っても効果ないこともあります。

このような場合、「出来たら儲けもの」的感覚で行う方法です。

新しいデータベースを作成し、破損したデータベースからオブジェクトをインポートする

クロソフト サポートオンラインに載っている方法
  1. Access を起動します。
  2. 新しい Access 2003 データベースを作成します。
  3. [ファイル]メニューの [外部データの取り込み] をポイントし、[インポート] をクリックします。
  4. [インポート] ダイアログ ボックスの [ファイルの種類] ボックスの一覧の [Microsoft Office Access (*.mdb;*.adp;*.mda;*.mde;*.ade)] をクリックします。
  5. [ファイルの場所] ボックスで、インポートする古い Access データベースを保存するドライブおよびフォルダを選択します。
  6. そのファイルをクリックし、[インポート] をクリックします。
  7. インポートするオブジェクトを 1 つまたは複数クリックします。
    • 注) すべてのオブジェクトを同時に選択しないでください。一度に選択するのは、1 つまたはいくつかのオブジェクトにします。これにより、破損したオブジェクトの識別が容易になります。一定の順序でデータベース オブジェクトをインポートする必要があります。たとえば、テーブル、フォーム、レポートの順にインポートします。
    • オブジェクトのグループでエラーが発生する場合は、エラーの原因となっているオブジェクトが見つかるまで、(オブジェクトの数に応じて) そのグループから一度にインポートするオブジェクトの数を少しにするか、1 つずつインポートします。
  8. [OK] をクリックし、選択したオブジェクトをインポートします。
  9. 他のすべてのオブジェクトが新しいデータベースにインポートされるまで、手順 3. 〜 8. を繰り返します。
    • 注)オブジェクトをインポートしたときにオブジェクトでエラーが発生する場合、オブジェクトが完全に壊れている可能性があります。この問題が発生した場合は、バックアップのデータベースからオブジェクトをインポートするか、オブジェクトを作成し直します。
  10. 新しいデータベースで、インポートしたすべてのモジュールをコンパイルします。これを行うには、以下の手順を実行します。
    1. データベース ウィンドウの [モジュール] をクリックします。
    2. モジュールをクリックし、[デザイン] をクリックします。
    3. [デバッグ] メニューの [コンパイル] をクリックします。
  11. Access 2003 を終了します。

参考
  • 破損した mdb を開くショートカットアイコンが作成してある場合
    • ショートカット元のファイル名を変更すると、ショートカットアイコンのリンク先のファイル名も変わってしまいます。(たぶん)
      ショートカットアイコンで開く場合は、リンク先を一度確認した方がいいでしょう。
  • mdb を新規作成後、ファイル名を変更しても「プロジェクト名」は変わらない (VBA を使っていない時は、関係ないかもしれません)
    1. 例えば、破損したのは abc.mdb だったとします。
    2. 新しい new.mdb を作成(この時点で、プロジェクト名が new になる)し、abc.mdb よりインポートします。
    3. その後、abc.mdb を削除し、new.mdb のファイル名を abc.mdb に変えます。
      • abc.mdb の VBE を起動
      • [ツール]メニューをクリックすると、[new のプロパティ]となっています。
      • クリックすると、プロジェクト名を変更できます。
      • ファイル名とプロジェクト名を一致させる必要はありません。
  • 上記の不整合を避ける私流わたしりゅうの方法
    1. 破損した mdb のコピーを作成する。([Ctrl]+ドラッグ)
    2. 破損した mdb を削除する。
    3. 新しい mdb を破損した mdb と同じ名前で作成し、
    4. 破損した mdb のコピーより、オブジェクトをインポートする。