Microsoft Access 掲示板

accessのバックグラウンドプロセスについて

15 コメント
views
4 フォロー

こんばんは。

以前「vbsからのaccess起動について」でお世話になりました、まゆです。
その節はありがとうございました。

早速ですが、社内の全ユーザーのPC入替が終了し、
Windows10になり、私のaccessも2016になりました(私以外はランタイム環境です)
入替後から複数のユーザーで起きているのですが、
accessを最適化して終了した後にバックグラウンドプロセスが残り、再度accessが開かない現象が起きています。
今のところタスクの終了を各人で行って対応して頂いています。

色々調べましたが同じ様な現象が起こっている方がいらっしゃっても、原因がいまいちわかりません。
このプロセスが残る件で、何か情報をお知りの方はいらっしゃいませんか?

このままの対応であれば、徐々にvb.netに変えられないか、と打診されています。

お手数おかけしますが、宜しくお願い致します。

まゆ
作成: 2021/05/20 (木) 23:10:34
通報 ...
1

データベースを複数のユーザーで共有しているということでしょうか。

データベースはフロントエンドデータベースとバックエンドデータベースに分割していますか。

「accessを最適化して終了した」とは具体的にどのようにしていますか。

2

ご返答、ありがとうございます。

以前もお話ししたのと同じaccessですので、
フロントエンドとバックエンドに分割しています。そして起動用のaccessもあります。

「最適化して終了」では以下を試しました。

①終了ボタンのvbaに
Documd.Quit
accessのオプションで閉じる時に最適化するにチェック
②終了ボタンのvbaに
Documd.Runmacro マクロ
accessのオプションで閉じる時に最適化するにチェック

です。
私以外はランタイム環境ですので、必ずオプションで設定しています。

最適化しているとは思いますが、
(Windows7まではしていた)
バックグラウンドプロセスが残ってしまいます。
別の単独のaccessやaccdbのaccessも開くと何個も残っています。
バックグラウンドプロセスが残らない場合もあり、何が原因なのか打つ手がない状態です。

テキストボックスをリッチテキスト形式にするのが原因と書かれているサイトも拝見しましたが、リッチテキスト形式にした事もありませんし、普通のテキスト形式である事も確認しました。

vbは勉強中ですが、できればこのままaccessを使い続けたいので、ご存知でしたらご教示下さい。
宜しくお願い致します。

3

「accessのオプションで閉じる時に最適化するにチェック」で最適化しているということは、フロントエンドを最適化していることになりますが、分割している場合は、フロントエンドの最適化は通常は必要ないです。
フロントエンド側にワークテーブルがある場合は必要ですか、フロントエンド側でワークテーブルを使っているのてしょうか。

また、バックエンドは定期的な最適化が必要ですが、フロントエンド側から接続している間は最適化は実行できません。
ユーザーが使用していない深夜などに自動で最適化を実行するようにする必要があります。
私の場合は、
最適化する前にバックアップもとっておいた方かいいので、タスクスケジューラなどで、バックエンドのバックアップと最適化を深夜に実行するよう設定します。

ということで、私自身は、「accessのオプションで閉じる時に最適化する」を使ったことがないのでそのような現象を経験したことがありません。

本当にフロントエンド側の最適化が必要ですか。
バックエンド側のバックアップと最適化は定期的に実行してますか。
上記の2点をよくよく検討してみてください。

4

ご返答ありがとうございます。

テーブル、かなりの行数を保持しています。
月に一回バックエンドから一定期間のデータをコピーし、各人で保持させています。
通常はそのデータを検索したり、一部のテキストをコピーして別のシステムに貼り付けたりして使っています。
バックエンドも月に一回更新前にバックアップをとり、更新後に最適化する様にしています。

教えていただいた起動用のaccessでもバックグラウンドプロセスが残っていました。こちらは「起動しています」と表示するだけのフォームを開いていたのですが、フォームの表示をやめるとバックグラウンドプロセスは残らなくなりました。
他のaccessでもフォームを開く時に色々処理を書いていたのですが、変更したところ残らなくなりました。
ランタイム環境でもテストしてみたのですが、バックグラウンドプロセスが残るPCと残らないPCがあるようです。

Microsoftコミュニティでも似たような現象がありましたが、これといった解決策も見つけられませんでした。

5

当方のAccessファイルで「閉じる時に最適化する」を設定して試してみましたが、「バックグラウンドプロセスが残るという現象は発生しませんでした。
WEB検索してもおっしゃる通り解決法は見つかりませんね。

とりあえずAccessファイルが破損している可能性がありますので、
新規Accessファイルを作成して、現状のファイルからすべてのオブジェクトをインポートして、新規Accessファイルでも試してみてください。

それで解決しないようなら、「閉じる時に最適化する」は使わずに、タスクマネージャーでPC起動時か終了時に外部から最適化を実行するようにしてはどうでしょうか。
VBAを使って最適化する方法は下記で紹介しています。

Accessデータベースファイルを最適化する関数 - hatena chips

6
まゆ 2021/05/26 (水) 21:17:29 81a37@d1249

こんばんは。

色々試してみましたが、結局解決しませんでした…。
とりあえずは、下記の対応で当分は対応しようと思います。

①起動用のaccessの起動
(フォームを表示せず、単体の起動でバックグラウンドプロセスが残らないようにします)
②本体のaccessの使用(最適化はそのままの設定)
③本体を終了(バックグラウンドプロセスが残る)

accessのバックグラウンドプロセスが残っていても、起動用accessから開くと通常通り使用できました。
ただし、起動→本体終了を繰り返した分だけバックグラウンドプロセスは残ります。
私以外のPCは退社時に電源をオフにしますので、
タスクキルもせず、そのままにしようかと思います。
(本当はよくないかと思いますが…)
私のPCは夜間自動更新がありますので、タスクキルのバッチファイルでも作成して、しばらく運用してみようと思います。

「閉じる時に最適化」が原因なのか、とも思いましたが、単体運用しているmdbでは同じ設定でもバックグラウンドプロセスが一度も残らなかったので、違ったようです。

何かご存知の情報などありましたら、ご教示頂ければ幸いです。

7

まずは問題を切り分けましょう。

問題のファイルの「閉じる時に最適化」をオフにしたときは、バックグラウンドプロセスが残りませんか。

残るなら、「閉じる時に最適化」が原因ではないので、別の部分に原因があることになります。

残らないなら「閉じる時に最適化」をオフにして運用する方法を検討しましょう。
方法としてはタスクスケジューラでWindowsの起動時または終了時に問題のファイルを最適化するプログラムを実行するようにすればいいでしょう。

Accessの最適化をバッチファイルで行う方法 – 外資系SEパパのブログ

Accessデータベースファイルを最適化する関数 - hatena chips

8

ご返答、ありがとうございます。

色々試してみましたが、最適化が原因ではないようです…。

業務中に使用しているaccessが3〜4種類あり、
それぞれチェックしたいのですが、なかなか進んでいません。申し訳ありません。

フォームを開いて終了しただけでバックグラウンドプロセスが残るものとたまに残るもの、また全く残らないものもあります。
それぞれフォームの作りは違うので、まだこれといった原因を特定できていません。

とりあえず、お知らせまで。

9
名前なし 2021/11/06 (土) 11:38:38 1f45b@05b8b

お久しぶりです。
かなり期間が空いてしまいましたが、
バックグラウンドプロセスが残らなくなりましたので、お知らせ致します。

結果としてはaccessの問題ではなく、社内のネットワークが原因だったようです。
新しいネットワークに変更になった途端にバックグラウンドプロセスが全く出なくなりました。
大変お騒がせしました…。

ただし結局起動用のaccessをvb.netにて新たに作成指示があり、現在格闘中です(アイコンが全て同じな為、間違った操作をしている方が複数いるそうです)

色々ご対応下さり、ありがとうございました。

10
hiroton 2021/11/08 (月) 08:20:48 1e0a0@f966d

vb.net自体に価値があっていずれ覚える必要があるなら頑張ってくださいですが、デスクトップのアイコンが問題なだけならショートカットを作ってアイコンを変更する(VBS(インストーラもどき)をつくる)とか、VBSをEXE化してリソースを弄ってアイコンを設定するとか別な方法もありそうです

11
MM 2021/12/10 (金) 15:38:51 faf36@28a7a

同様の問題が特定PCのみで発生しています。
Powershellにて対応しています。

killNoWindowMsaccess.ps1
プロセスが存在し、かつウィンドウが存在しない MSACCESS.EXE を強制終了します。
プロセス残留のせいでAccessが起動しない際に、問題のあるプロセスを手動で強制終了させるために使います。
https://carbon.now.sh/jVlhZh9jXK6uKvAjYoLI

killExpiredTaskByPid.ps1
プロセスIDを指定して、指定秒数待機後に強制終了させます。
Access終了時に外部プロセスから自分自身を遅延強制終了させるのに使います。
https://carbon.now.sh/jVlhZh9jXK6uKvAjYoLI

12
MM 2021/12/10 (金) 15:42:15 faf36@28a7a

訂正
killExpiredTaskByPid.ps1
プロセスIDを指定して、指定秒数待機後に強制終了させます。
Access終了時に外部プロセスから自分自身を遅延強制終了させるのに使います。
https://carbon.now.sh/5JBoWByWsQFrDSuawvAs

13
さらもか 2022/02/07 (月) 16:33:06 5f240@363ff

全く同じ環境ではないので、断言できませんが、2箇所の顧客のところでこの問題が解決したように思えるので、報告します。ただし、この幻象は突然起こるので本当に解決したかを判断するのはもっと先になると思います。ただ、なにか参考になればと思い報告します。
サーバーのデータベースはSQLサーバー2017でODBCでクライアントと接続しています。
クライアントの環境は、Windows10で、アクセスは、2019開発版のクライアントと2013実行版の方が使用しています。元のアクセスアプリは、2003で作成したMDBです。
まず、2019で新規のデータベースMDBを作成しますが、このとき、フォルダ指定とファイル名指定のボタンを押して、ファイル種類を2000-2003のMDBを選択します。このとき重要なのが、ファイル名はすべてアルファベットにすることです。漢字が入ってると、作成しても同じ不具合が残ってしまいます。
この空のMDBに、元のMDBのテーブルからフォーム等すべてのオブジェクトをインポートします。タブ表示かウィンドウ表示かはオプションであとで選んで下さい。
それと、実行版ですが、2016の実行版ではやはり同じ不具合が残ります。2013の実行版ですとうまく行きました。
この方法で、まだ1週間しか経っていないので、本当にこれで治ったか確信できませんが、今の所2箇所の顧客で正常に動作しています。
この情報がお役に立てば喜ばしいです。

14
さらもか 2022/02/10 (木) 09:57:09 a2613@2d79d

本日、別の顧客でも同様の不具合が発生しました。環境は、Office365のアクセスです。同様にMDBを作成し直して、実行したところ、不具合が発生しました。原因は、ファイル名にアルファベットとアンダーバーを使用していたことでした。アンダーバーをなくし、アルファベットのみに変更したら、何度起動・終了を繰り返してもOKでした。

15
りんご 2022/02/10 (木) 20:57:48 c564b@0e907

>> 13
>> 14

 もう一度状況を整理するのはどうでしょう?具体的に不具合やエラーコードやコードを含めて質問を立て直すといいですよね。確認済みだと思いますが、ファイル名を参照してあれやこれや動作するような仕組みになっていませんよね?