11

Windows XP (Service Pack 3) [5.1.2600] を実行し、4 GB の RAM を搭載したデュオ コア マシンで Access 2003 を使用しています。

定期的に、「この操作を実行するのに十分なメモリがありません。不要なプログラムを閉じて、操作をやり直してください。」というエラー メッセージが表示されます。

タスク マネージャーを確認すると、十分な空きメモリがあることがわかります。他の開いているプログラムを閉じても違いはありません。

これは、さまざまな状況で散発的に発生します。フォームのデザインや VBA コードの変更を保存している場合や、複数のフォームを開いて使用している場合などです。

デザインの変更を保存しようとしたときにこのエラーが発生した場合、Access オブジェクトは破損しており、回復できません。

これを引き起こしている可能性のあるものについての提案は大歓迎です。

MTIA

4

7 に答える 7

11

フロントエンドのVBAプロジェクトが破損している可能性があります。最初から再構築してから、適切なAccessコーディング手法を使用する必要があります。

  1. VBEオプションで、COMPILE ON DEMANDをオフにします(理由の詳細については、 Michael KaplanのDECOMPILEに関する記事を参照してください)。

  2. VBEオプションで、REQUIREVARIABLEDECLARATIONをオンにします。

  3. VBEで、[コンパイル]ボタンに簡単にアクセスできるようにツールバーをカスタマイズします([デバッグ]メニューにあります)。また、ブレークモードでエラーをデバッグするのに便利なため、([表示]メニューから)[コールスタック]ボタンを追加することをお勧めします。ここでのポイントは、デバッグとコンパイルをできるだけ簡単にすることです。

  4. 環境をセットアップしたら、新しく復元したプロジェクトのすべてのモジュールを調べて、それがないすべてのモジュールの先頭にOPTIONEXPLICITを追加します。次にコンパイルします。無効なコードがある場所をすばやく見つけて、修正する必要があります。

  5. 今後、プログラミングするときは、2行または3行のコードごとに頻繁にコンパイルしてください。コーディングするときは、おそらく1日に100回以上プロジェクトをコンパイルします。

  6. プロジェクトを定期的に逆コンパイルし、圧縮して再コンパイルします。これにより、通常の開発中に蓄積するクラッドがすべて削除されます。

これらのプラクティスにより、破損していないプロジェクトのコードが可能な限りクリーンな状態に保たれます。すでに破損しているプロジェクトを回復することはできません。

プロジェクトを再構築する方法に関しては、Application.SaveAsTextを使用してすべてのオブジェクトをエクスポートし、Application.LoadFromTextを使用して新しい空のデータベースにインポートするという抜本的なルートをたどると思います。これは、既存の破損したフロントエンドから単純にインポートするよりも優れています。これは、インポートによって、SaveAsText/LoadFromTextサイクルに耐えられない破損した構造がインポートされる可能性があるためです。

私はAccessで毎日プログラムを作成し、スタンドアロンのクラスモジュールを多数含む、多くのコードを使用する重要なアプリを操作しています。私は5年以上の間、コードの破損に対するオブジェクトを失っていません。それは、私がまだA97を使用していた当時のことです。

于 2009-10-16T00:04:03.803 に答える
5

私のこの古い投稿に出くわし、かなりの関心を集めているのを見て、更新が必要になるのではないかと思いました。

2 年後、2007 年のアプリの多くの作業と古い 2003 年 (および '97 年) のアプリを行った結果、2007 年は 2003 年よりも厄介なクラッシュが発生しにくいことがわかりました。レポート esp.) は簡単に破損します。

私は今でも、David-W-Fenton による提案 1-6 (上記) に忠実に従い、さらに Application.SaveAsText を使用しています (上記の Tony Toews の提案とリンクを参照してください)。

最近、私が取り組んでいるのが 97、2003、2007 のいずれであっても、Access が「おかしい|クラッシュする|不可解なエラーをスローする」などのヒントを与えた場合、私は次のことを行います。

  1. Access アプリをすぐに閉じる
  2. mdb/accdb ファイルのバックアップ
  3. [Shift] を押したままアプリを再度開くと、何も実行されません
  4. Application.SaveAsText を使用してすべてのオブジェクトをテキストとしてエクスポートします (別のバックアップとして)
  5. /decompile スイッチを使用してアプリを閉じてから再度開く
  6. VBA コードを再コンパイルする
  7. 圧縮/修復を行います。

これですべてが解決するわけではありませんが、Access オブジェクトの破損の数は、私が観察できるものから大幅に減少しています。

于 2011-08-30T11:46:42.303 に答える
4

なんてこった。

私は Access を選択したプラットフォームとして使用するショップで長年働いていました。最終的に、アプリケーションが非常に大きくなり、Access 2003 の内部メモリ制限に達し始めました。彼らは、あなたが抱えているのとまったく同じ問題を経験し始めました。お気づきのように、これが発生した場合、メモリの問題の外部兆候はありません。

同社はこの問題について Microsoft と詳しく話し合っており、Microsoft は最終的にパッチを提供したと思います。したがって、あなたが経験していることと同様の状況のように思われる場合は、Microsoft と話し合うことをお勧めします。Microsoft は同じパッチを提供できる可能性があります。

最終的に長期的な解決策は、アプリケーションをより小さな断片に分割することです。Access 2007 に移行しても効果はありませんでした。実際、Access 2007 には可動部分が多いため、事態はさらに悪化しました。

于 2009-10-15T22:40:53.820 に答える
3

迅速な解決策; 動作保証:

VBA を開く ( Alt-F11) すぐに表示されるウィンドウで、次のように入力します。

Application.SaveAsText acForm, "corrupt form name here", CurrentProject.Path & "\zzTempRevive"

それから

Application.LoadFromText acForm, "corrupt form name here", CurrentProject.Path & "\zzTempRevive"

それだけです:)これが他の人に役立つことを願っています!

于 2011-12-19T06:29:50.540 に答える
1

破損する可能性が最も高いのはフォームまたはレポートであることがわかっているので、新しい mdb を作成し、テーブル (添付)、クエリ、スクリプト (1 つだけ)、モジュール、およびメニューのみをインポートしました。次に、関数を介してフォームとレポートをインポートするために LoadFromText を使用し、通常の逆コンパイル/コンパイルと圧縮/修復などを行いました。

これまでのところ、木材に触れてください。ここ数日、別のクラッシュが発生していないので、おそらくこの回復方法を使い続けるでしょう。

ご提案いただきありがとうございます。

于 2009-10-20T02:35:17.340 に答える
1

これは、Access が実際の問題を認識していない場合の既定のエラー メッセージでもあります。MDB が特に大きい場合、たとえばモジュールを含む 800 を超えるフォームとレポートがある場合、MDE を作成するときにメッセージが表示されますが、MDB が大きすぎる可能性があります。 ACC2000:「Microsoft Access は MDE データベースを作成できませんでした」エラー メッセージ

私は時々これが自分で起こったことがあります。また、現在の MDB はそれほど大きくありません。圧縮と修復では、テーブル、インデックス、またはリレーションシップ以外のオブジェクトのエラーは検出されないことに注意してください。したがって、別の MDB にインポートすることが、これらのエラーを修正する唯一の方法です。

ネットワーク経由でこの MDB に取り組んでいますか? それが、この問題を引き起こす可能性があると私が考えることができる唯一のことです。

于 2009-10-15T23:31:30.957 に答える
0

私は何度もこの問題に遭遇し、最終的に機能する解決策を見つけました。問題の原因はわかりませんが、解決方法は知っています。

通常、フォームを開いたときにエラーが発生します。あなたがする必要があるのは、そのフォームを完全に再作成することです。これを行う最も簡単な方法は、最初に文書化されていない関数 Application.SaveAsText を使用してフォームをテキスト ファイルにエクスポートすることです。次に、データベースからフォームを削除し、Application.LoadFromText で再ロードします。

于 2009-10-16T14:14:07.923 に答える