文書番号: 248910 - 最終更新日: 2003年5月27日 - リビジョン: 1.0

[ACC2000] フォームの開閉を何度も繰り返すとメモリ不足エラーが発生する

この記事は、以前は次の ID で公開されていました: JP248910


この記事では、Microsoft Access データベース (.mdb) と Microsoft Access プロジェクト (.adp) について説明します。

目次

すべて展開する | すべて折りたたむ

現象

Microsoft Windows 95 または Microsoft Windows 98 上で実行する Access 2000 データベースまたはプロジェクトで、同一セッション中にフォームを何度も繰り返し開いたり閉じたりすると、システムの反応が遅くなり、次のエラー メッセージが表示されることがあります。
メモリ不足のため、表示を更新できません。不要なアプリケーションを終了して、再度実行してください。
および
ウィンドウを作成できません。システム リソースまたはメモリが不足しています。
不要なアプリケーションを終了し、再度実行してください。

メモリを解放する方法については、Microsoft Windows のオンライン ヘルプの「メモリ、トラブルシューティング」を参照してください。

原因

Windows 95 または Windows 98 上の Access 2000 でフォームを開いて閉じるたびに、フォント用にシステム GDI リソースが使用され、そのまま解放されません。ほとんどの場合、このことには気付きません。ところが、24x7 環境などで長期間データベースを開いたままにし、そのデータベースのフォームを何百回も開いたり閉じたりしていると、最終的にパフォーマンスの問題とメモリ不足エラーが発生することがあります。この現象が発生するまでにフォームを開くことができる回数は、フォームの構造と Windows で他に動作しているプログラムによって異なります。

メモ : 中国語バージョンなどフォントを多用する国際バージョンの Access 2000 の場合、この問題が発生するまでにフォームを開閉できる回数は少なくなります。したがって、これらのバージョンでは、この問題がより頻繁に発生する可能性があります。

解決方法

この問題を解決するには、Microsoft Office 2000 Service Release 1 (SR-1) を入手する必要があります。

SR-1 の入手方法については、次の Microsoft Knowledge Base の記事を参照してください。
245025? (http://support.microsoft.com/kb/245025/JA/ ) [OFF2000] Office 2000 SR-1 の入手とインストール方法
この問題を一時的に回避するには、システム リソースを解放します。このためには、Access のすべてのインスタンスをいったん閉じてから、データベースを再度開きます。

メモ : この問題は Windows NT または Windows 2000 では発生しません。

SendKeys メソッドを使用してフォームの開閉の繰り返しを自動化している場合は、このメソッドの代わりに DoCmd.OpenForm メソッドと DoCmd.CloseForm メソッドを使うようにします。これらのメソッドではこの問題は発生しません。

状況

弊社では、これを Access 2000 の問題として確認しております。この問題は、Microsoft Office 2000 SR-1 で修正済みです。

詳細

警告 : この例の手順を実行すると、サンプル データベース Northwind.mdb が変更されます。Northwind.mdb ファイルのバックアップを作成し、そのデータベースのコピーに対してこれらの手順を実行することをお勧めします。

再現手順

  1. Windows 95 または Windows 98 が動作しているコンピュータで、サンプル データベース Northwind.mdb を開きます。
  2. [ツール] メニューの [マクロ] をポイントし、[Visual Basic Editor] をクリックします。
  3. Visual Basic Editor で、[挿入] メニューの [標準モジュール] をクリックします。
  4. 手順 3. で作成した標準モジュールに次のコードを入力します。
    Function memFormTest(stTestForm As String, intIter As Integer)
    
        Dim i As Integer
        
        DoCmd.SelectObject acForm, stTestForm
        
        For i = 1 To intIter
            Debug.Print "Opening form " & stForm & " for the " & i & " time"
            SendKeys "{F11}", False: DoEvents
            SendKeys "%o", False: DoEvents
            SendKeys "^{F4}", False: DoEvents
        Next
        
    End Function
    
  5. [ファイル] メニューの [Northwind の上書き保存] をクリックし、手順 3. で作成した標準モジュールを Module1 という名前で保存します。
  6. Visual Basic Editor を開いたまま、Access 2000 に戻り、[商品区分] フォームを開きます。
  7. [商品区分] フォームをアクティブにし、Alt + F11 キーを押して Visual Basic Editor に戻ります。
  8. [イミディエイト] ウィンドウに次の行を入力し、Enter キーを押します。
    ?memFormTest("商品区分","2000")
    
    Access 2000 で [商品区分] フォームが開いて閉じる動作を繰り返します。

    重要 : エラーが表示されるまでは、コンピュータで他の操作を行わないでください。また、キーボードまたはマウスには触れないようにしてください。
  9. この資料の「現象」に記載されているエラー メッセージのいずれかが表示された後、[OK] を数回クリックして、もう 1 つのエラー メッセージを表示します。
  10. エラーを表示した後、プロシージャの実行が停止するまで Ctrl + Break キーを押します。
  11. Visual Basic Editor で、[イミディエイト] ウィンドウの下までスクロールします。システム リソースの損失が深刻な状態になるまでの回数が表示されています。

    メモ : この回数はシステムによって異なる可能性があります。

関連情報

この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 248910? (http://support.microsoft.com/kb/248910/EN-US/ ) (最終更新日 2000-03-17) をもとに作成したものです。


この資料は以下の製品について記述したものです。
  • Microsoft Access 2000 Standard Edition
キーワード:?
kberrmsg kbbug access9 閉じる kbdta メモリ不足 kbpending sr-1 リソース sr1 フォーム acc2000 エラー acc9 9.0 開く KB248910
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"
 

サポート技術情報の翻訳