2

ネットワーク化されたMSAccessデータベースに保存されているバックエンドデータに依存するMSAccessベースのシステムがあります。ランダムなネットワークの問題が発生すると、これらのデータベースが破損することがあります。そのため、コンパクトを定期的に起動して修復できるようなプロセスを追加する必要があると考えました。

問題は、このデータベースが常に複数のユーザーによって使用されており、データベースが使用されていないときに特定の時間が利用可能になることを保証するものではないということです。だから私の質問は次のとおりです。

1)フロントエンドアプリ(MS Accessまたは.NET)がデータベースに接続しようとしたときにデータベースがc / rされている場合、どうなりますか?それは大丈夫ですか?

2)バックエンドのMS Accessデータベースを使用できるようになるまで、フロントエンドアプリをすべて待機させるための優れたソリューションとして、SOは何を推奨しますか?フロントエンドアプリに必要な変更が少ないほど良いです。

ありがとうございました!

4

3 に答える 3

4

これは、Access 開発者の間で比較的頻繁に尋ねられる質問です。

これには 2 つの部分があります。

  1. サーバー上でスケジュールするデータベースをバックアップおよび圧縮するためのコード。

  2. #1のコードを実行できるように、一度に全員を自動的にログアウトするようにフロントエンドに配置するコード。

通常、オフィスは現地時間の午前 8 時から午後 6 時までしか開いていないため、通常のファイルの準備として、午前 1 時にバックエンドでバックアップと圧縮を行えるように、通常は午前 0 時頃に全員を追い出すのが安全です。サーバーのバックアップは、たとえば午前 2 時に発生する可能性があります。

バックアップ/コンパクト用の VBScript は、比較的簡単に記述できます。それについて助けが必要な場合は、尋ねてください。

フロント エンドには、真夜中に開始してアプリを終了するように設定されたタイマーが設定されたアプリが開いているときに開く非表示のフォームが必要です。それをどの程度精巧にしたいかによって異なります。潜在的な落とし穴は、ユーザーがレコードを開始し、保存できない状態にある場合です (何らかの理由で検証ルールに失敗する)。これは複雑になる可能性があります (エラーをトラップし、スタンプ レコードを元に戻してからシャットダウンする必要があります) が、ユーザーが保存できないレコードを作成できないようにアプリを設計することをお勧めします。

重要な点は、バックアップ/コンパクトの実行がスケジュールされている時点で残っている接続のスケジューリングとシャットダウンの両方を計画する必要があるということです。

于 2010-11-13T21:43:10.520 に答える
1

私が理解していることから、データベースを自動的に圧縮することは悪い考えです。圧縮する前に回復可能なエラーが発生した場合、後でデータベースが完全に読み取れなくなる可能性があります。バックアップからの復元が必要になります。

1>フロントエンドが圧縮/修復中のデータベースにアクセスしようとすると、フロントエンドクライアントはデータベースが利用できないと通知され、不用意に削除されたと思います。このためのエラーハンドラを作成できると思いますが、それには私が提供するよりも多くのVBAの知識が必要です。

2>可能であれば、複数のクライアントを処理する場合、予備のWindowsボックス上のMicrosoft SQL Server Expressであっても、バックエンドのRDBMSのパフォーマンスは常に向上します。「悪いこと」(ネットワークの切断、クライアントのロックアップなど)が発生したときに、データが破損しない可能性が高くなります。通常、トランザクションを含むRDBMSがこれに適したルートです。

これに対する解決策に関しては、プログラムでアイデアが不足しているのではないかと思います。ごめん。

于 2010-11-12T22:23:47.890 に答える
0

アクセス セキュリティに関する Garry Robinson の本は、この問題を扱っています。一読の価値あり。Garry の Web サイト (vb123.com) では、接続されている各ワークステーションに警告を発し、x 秒後にフロント エンドをシャットダウンするツールなど、多数の管理ツールとセキュリティ ツールが含まれたツールボックスを販売しています。

本は:

実際の Microsoft Access データベースの保護とセキュリティ

企業環境で Access を使用している場合は、必読です。

于 2010-11-13T11:38:44.903 に答える