staplemomo
@staplemomo

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Accessの競合・矛盾が起きる場合の対策

解決したいこと

Accessの競合・矛盾が起きる場合の対策

ExcelとAccess(データベース)をADOで連携するツールを使用しています。使用人数は最大で30人ほどです。

使用人数が集中する10時〜11時半ごろ、1週間に1〜2回の頻度で、Accessが壊れます。
コネクション、レコードセットの部分でエラー処理は入れているのですが、何らかの原因でAccessそのものに矛盾が起きた状態になるor誰かがAccessを掴んだ状態のままになります。矛盾が起きた場合は最適化、掴んでしまった場合はPCを落とさないとAccessをコピーしたり移動させることができなくなります。

データベースを最適化する処理は作成しており、毎日実行していただいてます。
ツールを開発した当初より、使用人数やデータが増えている(データベースは約10万KB)ため、データベースにある4つのテーブルのうち、容量が大きい2つを別DBに分けることも検討してますが、2つのテーブルを跨って検索したり、データを取得する処理もあるため、できれば1つのデータベースのままにしておきたいです。

0

3Answer

当方でも「このデータベースは矛盾がある状態なので...」が出ました。MSのサイトの記載に倣ってクライアントPCのレジストリを変更し.accdbの修復はできました。

しかし共有フォルダはQNAPのNASに置いておりWindowsサーバーではないためこちらはレジストリ変更などできません。さてどうしたもんか、と調べるうち、当のQNAPのサポートサイトに「データベースなどの同じファイルに複数のユーザーが同時にアクセスする必要があるネットワークでは、oplocks を無効にする必要があります。」とありました。まさに当案件です。Webコンソールから共有フォルダのプロパティでoplocksを無効にして対処しました。

誰かのご参考になりましたら幸いです。

#MariaDBやSQLServerへデータを置いてODBC接続、も検討はしてみたのですが
 かなり大規模な改修になるためなかなか踏み切れません。

1Like

同時アクセスで矛盾が起きないようロックがかかるのですが
その時にクライアントでエラーが起きるとロックされたままになります
ロックはそれを示すファイルがあるので消せば解除されるのですが
データに矛盾が起きるのはそもそもデータベースの処理を間違っていると思われます

それとAccessの利用推奨人数は 20人ぐらい(実際はそれより少なくてもエラーは出る)なので
そもそもAccessを利用することに問題がありそうです

ODBCやADOは使い方さえわかれば無料で使える便利な物で
私も利用していましたがせいぜい2~3人の話です

エラーが起きているところの手順を書けば問題点がわかるかと思います

0Like

AccessはネットワークDBではありません。業務拡大により、ネットワーク利用になる場合、MSの標準対応方法なら、SQLserverにデータ移行するでしょう。

データベースのデータをSQLserverに移します。個々の端末は同じAccessにアクセスしなくて、SQLserverに接続するようにすれば大丈夫です。

もし、Accessに大量のクエリがあったら、AccessのTBをSQLserverのTBへのリンクで置換します。もともとのクエリはそのまま利用可能です。この加工後のAccessは、個々の端末に配って利用してもらう方法もあります。

0Like

Your answer might help someone💌