質問: ### 発生している問題 Windows10の特定バージョンで、Access2010のモジュール実行中に突然終了してしまう。エラーは出ず、デバッグにもなりません。 同じ動作をさせても、障害が発生しないこともありますが、同じ動作で障害の現象が頻発(ほぼ発生)します。 ブレイクポイントを設定して、トレースしながら実行すると障害発生しません。 Windows7,8.1,10でこれまで動作していました。(Windows10のパソコンでも発生しないものがあります) 複数台のWindows10のパソコンで障害の現象が発生しています。 Windows7,8.1,10環境で、access2010 Runtime 32bitの環境で、同じプログラムで正常動作するモジュールを作成したい。 ### 環境別症状 (1)Microsoft Windows 10 Pro 10.0.18362 + Access2010 Runtime SP2 32bitのパソコンで実行すると発生。Runtime実行の場合メッセージがでて終了します。 「指定したデータベースを見つけることができないか、またはデータベース名が指定されていません コマンドライン引数でデータベース名を指定し、必要に応じて、パス名も含めて指定してください。」というメッセージがでてOKを押すとACCESSが終了してしまいます。 (2)Microsoft Windows 10 Pro 10.0.18362 + Access2010 14.0.7232.5000 32bit のパソコンで実行すると。エラー表示無に突然終了します。 (3) Microsoft Windows 10 Pro 10.0.17134 + Access2010 Runtime SP2 32bitのパソコンでは 障害は発生しません。 (4)Windows7,Windows8.1では障害は発生していません。 ### 開発環境 Windows7のパソコン Microaodt Access2010 Version 14.0.7232.5000(32ビット)で開発したプログラムです。 参照設定は Visual Basic For Applications Microsoft Access 14.0 Object Library OLE Automation Micorosoft Office 14.0 Access database engine です。 原因がつかめずにいます。 確認すべきこと、回避策、対処などがありましたら、教えてください。 よろしくお願い申し上げます。
回答: 解決方法 DAOにてデータベースに接続しており、ユーザー関数(モジュール内)でデータベースの接続時、 Set db = CurrentDb()にて接続していました。 このdbはPublicで宣言しており、関数を呼び出す元のFORMでもSet db = CurrentDb()にて接続して、closeしない状態で、モジュールをよびだしていました。 これを、モジュール内は、プライベイトで定義した別名のデータベース(db2)に変更し、db2 = CurrentDb() にすることで、解決しました。 ユーザー関数は、クエリ内や、フォーム、レポートなどで呼び出す関数となるため、データベースに接続済みか否かの判定を入れて動作させる分岐が複雑になるので、プライベイトで別に定義して、接続し、関数内でcloseするように変更しました。 PUBLICのdbは、フォームや、レポートで、利用時に接続してcloseしています。 異常終了は、ユーザー関数を呼び出した時はいつも、ということでなく、同じ操作をすると同じところで 異常終了していました。関数を繰り返し使用しているうちに、壊れてしまうということだったのかと思われます。 ありがとうございました。