ms-access
アクセスクラッシュのトラブルシューティング方法
サーチ…
前書き
備考
テスト中に式から他の変数を削除してください
ネットワーク破損
クライアントをネットワークから読み込まないでください。それをローカルドライブに置き、そこから実行してください。
コーポレートビルド
「コンピュータビルド」を使用していて、Decompiling、Testing Memory、またはBinaryデータを取り除くことで成功していない企業環境にいる場合、ITチームがユーザーにテストエンジンを提供できるようになるまで、 Windows、Office、およびService Packのみがインストールされています。
無人インストールを使用せずに、すべてのソフトウェアと更新プログラムを手作業でインストールする必要があります。テスト用にこのマシンにウイルス対策ソフトウェアをインストールしないでください。
多くのIT部門がビルドでOne-Fit-All-Allアプローチを試行するだけで、そのビルドはすべて相互に基づいていることを理解してください。時間が経つと、ソフトウェアの競合が発生し、Accessがクラッシュしたり、異常に動作したりする可能性があります。
悪いパワー
メモリの例で述べたように、電力の変動はコンピュータのエラーを引き起こす可能性があります。データベースが工業用建物内にある場合は、パワーコンディショナまたはクリーンな電力を供給するUPS(金属酸化物バリスターを通過する主なものではなく、バッテリーから外してください)に手を入れてください。
また、電源バーまたはコンセントに差し込まれている電源ケーブルを確認してください。ゲージと電圧仕様が十分であることを確認してください。 IT部門は、電源コードをステーションに接続したままにして、マシンを取り外すだけです。長年の後、彼らはより繁栄した電源を使用していますが、ケーブルを切り替えていません。違いがあります。不確かな場合は、新しい太いケーブルを用意してください。
データベースの逆コンパイル
これは、常にあなたの最初の修正プログラムでなければなりません。良い方針は、各リリースの前にデータベースを逆コンパイルすることです。
デコンパイルのショートカットを作成します 。これは、データベースを "/ decompile"スイッチでロードします。
- データベースファイルを右クリックします。コピーを選択
- エクスプローラウィンドウで右クリックし、[ショートカットを貼り付け]を選択します。
- ショートカットを右クリックし、[プロパティ]を選択します。
- [ターゲット]ボックスで、行の最後に移動し、追加
/decompile - [OK]をクリックしてショートカットを閉じます。
シフト付きデータベースを開く。
Shiftキーを押しながらこのショートカットをダブルクリックします。これにより、データベース内で自動実行が実行されなくなります。ナビゲーションウィンドウにまっすぐ進む必要があります。データベースを圧縮して修復します。データベースがロードされたら、[圧縮および修復]ボタンをクリックする必要があります。
- ツールリボンの[ Compact and Repair Database ]ボタンを探します。
- Shiftキーを押したままにします。 Compact and Repair(コンパクトと修復)ボタンをクリックしたまま押し続けます。
データベースの再コンパイル
- VBAウィンドウに移動(Ctrl + G)
- メニューから[デバッグ] - > [コンパイル]を選択します
これは完全な逆コンパイルプロセスです。一般的には、Accessクラッシュや奇妙なフォーム動作の99%を修正する必要があります。
コンピュータのメモリをテストする
クラッシュがランダムまたは散発的な場合は、この手順を実行します。データベースを1回実行するたびにクラッシュが発生した場合、この手順では問題は解決しません(最初の場所で不正なメモリが原因で破損が発生した可能性があります)。
オペレーティングシステム外で起動し、複数のパスを実行するメモリテスターを使用してください。 MemTest86 (Commercial)とMemTest86 + (Open Source)の2つの一般的な選択肢があります。
テストを開始し、勤務時間中に実行させます。これは、電源回路のノイズなどビル内のその他の要因によってメモリエラーが発生する可能性があるため、変数を同じに保つためです。
メモリエラーがある場合は、コンピュータのメモリが不良であるかどうか、またはその他の要因によって識別される必要があります。しかし、これはこの文書の範囲を超えています。
フォームからバイナリデータを削除する
場合によっては、単一のフォームまたはレポートで常にクラッシュが発生するか、印刷時にのみクラッシュが発生することがあります。フォーム/レポート内のバイナリデータが破損している可能性があります。
フォーム/レポートオブジェクトをテキストとして保存文書化されていない関数が2つあります。 Application.SaveAsTextおよびApplication.LoadFromText。これらの関数を使用してフォーム/レポート定義をエクスポートし、定義をクリーンアップしてから、再度インポートすることができます。
- 続行する前にデータベースのバックアップを作成する
- VBAイミディエイトウィンドウ(Control + G)に移動します。
-
Application.SaveAsText acForm, "MyForm", CurrentProject.Path & "\MyForm.txt"(MyFormをフォーム/レポートの名前に置き換えてください。修正したレポートが壊れている場合はacReportを使用してください) - データベースウィンドウ内で元のフォームアイテムの名前を変更します(たとえば、名前をMyForm.Bakに変更)。
フォーム/レポート定義ファイルをクリーンアップする
メモ帳でエクスポートされたファイル(MyForm.txtなど)を開きます。
"Checksum ="行を削除します(3行目にあるはずです)
バイナリデータをクリアする
バイナリデータブロックを識別します。ファイルを調べると、 "Parameter = Begin"で始まる行が表示されます。これらの行に続いて、コード化されたバイナリデータの行があります。最後に、バイナリブロックは "End"のみからなる行で終了します。バイナリデータブロックには、最初の行(Begin文付き)と最後の行までのすべての行(End Statement付き)が含まれます。
注:これらのブロックはすべて、フォームコントロール定義の前に表示する必要があります
次のパラメータのバイナリデータブロックを削除します。
- 名前マップ
- PrtMip
- PrtDevMode
- PrtDevNames
- PrtDevModeW
- PrtDevNamesW
他の問題を探します。ファイルを開いている間は、残りのファイルをスクロールして、特にVBAモジュールコードの下にある目を引っ張るものを探します。あなたは残りの部分から出てくるものを探し、腐敗するかもしれません。
ファイルを保存します。
フォーム/レポートをAccessとTestに戻す
- フォームをAccessに再度読み込みます。
- Accessで、直接ウィンドウ(Control + G)に移動し、
- タイプ
Application.LoadFromText acForm, "MyForm", CurrentProject.Path & "\MyForm.txt" - Decompile / Compact Repair / Recompile(ドキュメント内の他の例を参照)
- テストするフォーム/レポートを開きます。うまくいけば、すべてが今働いています。
- 古い破損したフォームを削除する(MyForm.bakなど)
将来この腐敗を防ぐ
レポート/フォーム内の壊れたバイナリデータの最も一般的な原因は、複数のコンピュータ/ユーザーがそれぞれ独自のコピーを持つ代わりに同じデータベースクライアントファイルを使用する場合です。このため、各ユーザーは自分のデスクトップに自分のクライアントファイルを置く必要があります。
「OLEオブジェクト」フィールドを削除する
画像やその他のデータがOLEオブジェクトとしてAccess自体に保存されている場合は、より良いアプローチが必要です。 OLEデータが格納されると、それはそれを格納するコンピュータ上のソフトウェア(およびソフトウェアのバージョン)に従って格納される。別のコンピュータがフォーム上にそのOLEオブジェクトデータを表示するようになっても、正確なソフトウェア/バージョンがインストールされていないと、アプリケーションがクラッシュすることがよくあります。
画像データを保存する場合は、ファイル名を保存し、代わりに画像を標準の場所に保存することをお勧めします。新しいバージョンのアクセスには、これを行うためのネイティブコントロールがあります。
データベース全体を再構築する
これはたくさんの作業です。これを他のすべてのオプションを使い果たした後の最後の手段として実行してください。別のマシン上の異なるユーザーに対して問題が発生している場合にのみ、これを行う必要があります。すべてのユーザーに発生していない場合は、データベースコンテナが破損している可能性は低いです。
バイナリデータを削除する手順と同様に、データベースを一から再構築します。このプロセスは少し儀式的ですが、可能な腐敗を「保存」しないよう注意して細心の注意を払うと、そのプロセスは非常に効果的です。
新しいアクセスデータベースコンテナを作成します。
- Accessの[File]タブで、[New]を選択できます。新しい空のデータベースをACCDB形式で作成します。
すべてのオブジェクトを新しいコンテナに移動する
オブジェクトを移動するには、Access内のインポート/エクスポート機能を使用しないでください、単にクリックしてドラッグしないでください。これを行うと、破損したアイテムを新しいコンテナにコピーできます。
テーブル:
- 古いアクセスコンテナの各テーブルに対して、新しいコンテナに新しいテーブルを作成します。
- デザインビューから、フィールド定義をコピー/ペーストします。
- 両方のデータベースで一致するようにテーブルのプロパティを確認します
- 任意のデータマクロを移動してください(これについては、マクロのセクションを参照してください)
- データを移動するには、古いデータをXMLまたはCSVにエクスポートし、その形式からインポートします。
クエリ:
- 各クエリをSQLビューに読み込みます。
- SQLテキストをコピー/貼り付けします。
- 新しいデータベースに貼り付けます。
- クエリのプロパティを比較して一致することを確認します。
フォーム/レポート:
- フォーム/レポートごとに、Application.SaveAsText関数を使用してフォーム/レポートをテキストファイルにエクスポートします。
- バイナリデータを削除します(このプロセスを理解するには、フォームドキュメントからバイナリデータを削除するを参照してください)
- Application.LoadFromText関数を使用して、オブジェクトを新しいデータベースに再インポートします。
マクロ
マクロを移動するには3つの方法があります。
- 新しいデータベースコンテナに手動で各マクロを再作成します。
-
acMacroパラメーターでApplication.SaveAsText/Application.LoadFromTextメソッドを使用します。 - 各マクロのマクロ定義のコピー/貼り付け
- すべてのマクロ要素を選択するには、「すべて」(Control + A)を選択します。コピー(Ctrl + C)。
- 空白のメモ帳文書を開き、マクロXMLを貼り付ける(Control + V)。
- 新しいデータベースコンテナに新しい空白マクロを作成します。
- メモ帳で、すべてのテキストを選択します(Control + A)。次に、コピー(Ctrl + C)
- 空白のマクロで、[貼り付け](Ctrl + V)をクリックします。マクロが表示されます。それを保存。
モジュール
- 各モジュールに対して、すべてのコード(Control + A)を選択し、新しいデータベースコンテナに貼り付けます(Control + V)。
- データベースのプロパティ(VBAウィンドウで、[ツール] - > [クライアントのプロパティ]を選択してください)を確認してください。
データマクロ
各データマクロに対して、SaveAsText / LoadFromTextメソッドを使用します。
- VBAイミディエイトウィンドウ(Control + G)に移動します。
-
Application.SaveAsText acTableDataMacro, "MyTableName", CurrentProject.Path & "\MyTableName.txt"をデータマクロを含むテーブルの名前に置き換えます。 - ファイルに腐敗の兆候がないか見直してください
- 新しいデータベースコンテナで、
Application.LoadFromText acTableDataMacro, "MyTableName", CurrentProject.Path & "\MyTableName.txt"を使用して定義をロードしますApplication.LoadFromText acTableDataMacro, "MyTableName", CurrentProject.Path & "\MyTableName.txt"
前述したように、これはたくさんの作業ですが、結果はあります。この方法は、Access 97データベースを2000に、またはAccess 2000データベースを2003に移行する場合にも使用する必要があります。