Microsoft Access 掲示板

重大なエラーが発生しました。との注記が…

7 コメント
views
4 フォロー

お世話になります。仕事上、複数人の社員でアクセスファイルを共有しているのですが、時々、「前回開いたときに重大なエラーが発生しました」との注記が出て、止まってしまうことが多々あります。現在は使用者全員がファイルを閉じてから、一人だけがファイルを開き修復をするというようにしていますが、根本原因がわかりません。なぜこのような症状が出てしまうのかお教えいただけたら幸いです。よろしくお願い致します。

rYIqAoFuZQf4ClO
作成: 2020/04/22 (水) 16:12:03
通報 ...
1

Accessのマルチユーザー管理はOSのファイル共有を利用した簡易的なものなので、
同時アクセス数とネットワーク環境によっては、エラー(ファイル破損)が発生する可能性はあります。

いちばんいいのは、バックエンドデータベースをSQLサーバーなどのRDBMSに変更することですが、コスト的に難しい場合もあるでしょう。

Access デスクトップ データベースを共有する方法 - Access

とりあえずの対策としては、

  • データベースを分割する。
  • なるべく同じレコードに複数ユーザーが同時アクセスしないような設計にする。
  • 閲覧用フォームと更新・追加用フォームは分けて、更新フォームは更新するレコードのみ読み込む、追加用フォームは「データ入力用」プロパティを「はい」にする。(非連結フォームにするとさらに安全性が高まりますが、高度なスキルが必要です。)
  • バックエンドデータベースファイルを定期的にバックアップしておく。
  • バックエンドデータベースファイルを置いておくサーバーPCはなるべく性能の良いものにする。

1ケタ台の人数での共有ならたいていこれで安定的運用が可能です(個人的経験による感想)。

2
rYIqAoFuZQf4ClO 2020/04/22 (水) 21:34:51

返信いただきありがとうございます。
私はまだ勤続年数が短く、このソフトに触れてから日が浅い為、内容の咀嚼に時間がかかってしまい、大変恐縮なのですが、確認させてください。

まず、同時に使用する人数が多いとエラーの発生する可能性が生じてしまうのは理解しました。また、その日の就業後にバックアップ(コピー)の作成は行うようにしています。

データベースの分割利用についてはすでに導入しており、もともと施工管理の係と営業の係で同一のデータベースで情報管理をしていたものをそれぞれの課で独立させて利用しています。同時少人数は多くても6人程度です。

以下、質問なのですが

1.同じレコードに同時にアクセスしないようにするというのは、データの追加、更新を行うPCを決めておき、その他は閲覧のみを行うように決めるという手法で良いのでしょうか?

2.更新用フォームと追加用フォームは同義ではないのでしょうか?

3.現在6人ほどで同時使用しているデータベースを10人ほどで共有することになった場合はエラーの発生する可能性、頻度はやはり上がってしまうのでしょうか?

4.社用パソコンのOSのアップデートを行ってから、ACCESSの起動の時間が大幅に短くなりました。会社の先輩方の言うようには、立ち上げやデータ入力の時間は大幅に短くなったが、エラーの発生回数は多くなったように感じる、とのことでした。OSのアップデートとエラーの発生回数に因果関係があったりするのでしょうか?

3

この手の質問は、環境や運用に左右されますので、一般論でのアドバイスは難しいです。

私自身の経験からの一例として参考事例ということになります。

私の場合は下記のような環境でここ10年以上の運用でデータベースの破損はありません。

有線LANで1台のサーバーPCに8台のクライアントPCを接続
サーバーPC Windows Sever 2012 Essentials
クライアントPC Windows10 Access2013
最大同時入力人数 5人

1.同じレコードに同時にアクセスしないようにするというのは、データの追加、更新を行うPCを決めておき、その他は閲覧のみを行うように決めるという手法で良いのでしょうか?

取引先毎に担当を決めておき、データ更新、追加はその担当が行うという運用です。
担当以外のデータは閲覧のみにします。

2.更新用フォームと追加用フォームは同義ではないのでしょうか?

フォームは共通でもいいのですが、フォームのプロパティの設計を下記のように変更します。

更新用フォーム
 データ入力用 いいえ
 更新の許可 はい
 追加の許可 いいえ
 削除の許可 いいえ
 レコードロック 編集済みレコード

追加用フォーム
 データ入力用 はい
 更新の許可 はい
 追加の許可 はい
 削除の許可 はい
 レコードロック 編集済みレコード

一覧表示の閲覧は、リストボックスに表示させるか、
帳票フォームで「レコードセット」を「スナップショット」にしておきます。

3.現在6人ほどで同時使用しているデータベースを10人ほどで共有することになった場合はエラーの発生する可能性、頻度はやはり上がってしまうのでしょうか?

これについては私からはなんとも言えません。
人数が増えればその分エラー発生の可能性は高くなるような気がしますが、根拠やデータは持ち合わせてません。

4.社用パソコンのOSのアップデートを行ってから、ACCESSの起動の時間が大幅に短くなりました。会社の先輩方の言うようには、立ち上げやデータ入力の時間は大幅に短くなったが、エラーの発生回数は多くなったように感じる、とのことでした。OSのアップデートとエラーの発生回数に因果関係があったりするのでしょうか?

Access関係の掲示板やMSの情報をチェックしてますが、そのような情報は見たことはないですね。

4
hiroton 2020/04/23 (木) 16:19:53 18f69@f966d

>> 1のhatenaさん提示のリンクの先にありますが

各ユーザーはフロント エンド データベースのローカル コピーを使用してデータを操作します。

これ、正しくできていますか?
データベースの分割はすでにできているということですが、分割した後のフロントエンド用ACCESSファイルはサーバーの中に置いたままで、ユーザーが全員共有して同じファイルを使っていませんか?

質問には

現在は使用者全員がファイルを閉じてから、一人だけがファイルを開き修復をする

とありますので、かなり疑わしいポイントです。

5
rYIqAoFuZQf4ClO 2020/04/24 (金) 15:56:10

1.取引先毎に担当を決めておき、データ更新、追加はその担当が行うという運用です。
担当以外のデータは閲覧のみにします。

・これについては仕事の関係上、担当者以外が各レコードの編集を行うことはしていません。そもそもの設定から担当者はイジれないような設定にしたほうがいいのでしょうか?

2.フォームは共通でもいいのですが、フォームのプロパティの設計を下記のように変更します。

更新用フォーム
 データ入力用 いいえ
 更新の許可 はい
 追加の許可 いいえ
 削除の許可 いいえ
 レコードロック 編集済みレコード

追加用フォーム
 データ入力用 はい
 更新の許可 はい
 追加の許可 はい
 削除の許可 はい
 レコードロック 編集済みレコード

一覧表示の閲覧は、リストボックスに表示させるか、
帳票フォームで「レコードセット」を「スナップショット」にしておきます。

・レコードを新たに作成する用と既存のレコードを編集する用にわけるという理解をしましたが、合ってますでしょうか?

6

・レコードを新たに作成する用と既存のレコードを編集する用にわけるという理解をしましたが、合ってますでしょうか?

フォームを分けてもいいのですが、一つのフォームで開く時にVBAでプロパティを変更するという方法だと、変更があったとき一つのフォームの修正で済みますので楽です。

例えば、フォームのプロパティは、更新用に設定しておいて、
更新用として呼び出すときは、

Docmd.OpenForm "フォーム名", acNormal, , "主キーフィールド=" & Me.主キーフィールド

追加用として呼び出すときは、

Docmd.OpenForm "フォーム名", acNormal, , , acFormAdd

という感じでOKです。

7
名前なし 2020/06/11 (木) 15:40:43 3f80a@c9e80

同じような時期に同様の事象にとても苦労しましたので参考にしてください。
結果を先に書くと Window10のUPDATEの影響で共有方法が変わってしまったようでした。

利用環境は、access2010で作成したaccdbを access2016で使用しています。
データ部だけをサーバに置き10人程度で参照、追加、更新等を同時に実施しています。
データ部へのアクセスにレコードロックはかけていません(まれにDirtyとなることもあります)

ある日、ACCESSの設定変更していないのに突然サーバにあるDBに接続できなくなりました。
まったく原因がわからず、ネットで数日間調べていました。
その間もDB障害が発生し、その都度最適化をしていました。
やっと1件だけ同じ現象を解消したとの記事があり、適応してみました。

内容は 「暗号化方法の設定」を変更しました。
ACCESS→ ファイル→ オプション→ クライアントの設定→ 規定の暗号化方法使用する(高度なセキュリティ)
規定の暗号化方法使用する(高度なセキュリティ) → 以前の暗号方法を使用する にしました。
これにより以前と同様使用できるようになりました。
適宜、オプションの中身を確認するようにしています。

最近も「クライアント設定」を確認したところ「レコードレベルでロックして開く」
にチェックが入っていました。こんなチェックは付けた覚えがありません。
これも全端末の設定を外しています。