4

小規模なワーカー チーム (最大 15 人) が使用するアプリを開発しており、Access accdb ファイルにデータを保存します。1台のマシンで自分だけでアプリをテストしている場合は問題ありませんが、少なくとも2人がデータベースに接続している場合、アプリはユーザーに奇妙なエラーを与えます. データベースはネットワーク上の共有フォルダーに保存され、各ユーザーのアプリはそのフォルダーにアクセスして db ファイルを開きます。各ユーザーはデータベースのマシンに独自のシステム アカウントを持ち、コード内の各関数は他のスレッドからのデータベースへのアクセスをロックするため、一度に接続を開く試みは常に 1 つだけです。各接続は同じ関数で閉じられます。すべての db 関数は、1 つのシングルトン クラスで記述されます。

私が得るエラー:

System.Data.OleDb.OleDbException (0x80004005): Could not use 'D:\Shared\nscm\nscm_db.accdb'; file already in use.

System.Data.OleDb.OleDbException (0x80004005): Cannot open database ''.  It may not be a database that your application recognizes, or the file may be corrupt.

System.Data.OleDb.OleDbException (0x80004005): Too many active users. **(this error even when there's only two users!)**

これは私を夢中にさせています。マルチユーザー アクセスを適切にサポートしていないのは、JET4/ACE エンジンの問題ですか?

データベースを MS SQL Server Express や MySQL などの別のものに変更することを考えていますが、どれが移行しやすく、どれが本当に無料なのかわかりません。

あなたの助けと注意を前もってありがとう!

更新: データ変換は私にとって問題ではありません。アプリはまだ開発中のため、実際のデータはありません。私は、コードと SQL クエリの変更についてもっと心配しています。また、他の db テクノロジに切り替えた後、他の問題が発生しないかどうかもわかりません。

私の本当の質問は、現在のテクノロジーで何かを修正するために努力し続ける必要があるか、Access dbエンジンを使用しているか、既知の問題があるかです.これに時間を無駄にするのは無駄です.ある種の db サーバー (MySQL)?

4

2 に答える 2

3

あなたはここで薄い氷の上を歩いています。MSAccess はユーザー ベースをサポートする必要がありますが、これは別の種類のデータベースへの移行を検討できるシナリオです。つまり、ファイルベースのデータベースではなく、クライアントサーバーのデータベースです。結局のところ、現在 15 人のユーザーがいる場合、この数が増える可能性があり (うまくいけば)、ファイル ベースのデータベースに関する問題が指数関数的に増える可能性があります。

移行を選択した場合、SQLServer Express と MySql の両方が無料であると言えます。
あなたの場合、SQL Server Express をお勧めします。その T-SQL 構文は JET-SQL との互換性が高くなりますが、クエリ構文で VBA キーワードを使用する場合は特に違いがあります。
コードの観点からは、OleDbProvider を放棄して、SqlServer のネイティブ プロバイダーの使用を開始することをお勧めします。したがって、すべての OleDbConnection、OleDbCommand などを同等の SqlConnection、SqlCommand に変更する必要があります (これは、MySql を選択した場合にも当てはまります)。これらの変更はかなり機械的で反復的であるため、ここでは大きな問題はありません。ただし、コード内のすべてのデータ アクセス クエリを再テストして、同じ結果が返されることを確認する必要があります。

エラーについて:

  • Too many active users- これは、接続が正しく閉じられていないことが原因である可能性があります
  • Cannot open database- データベースが壊れているか、2GB の制限に達していますか?
  • Could not use- すべてのユーザーがアプリを終了した後、LDB ファイルが削除されているかどうかを確認します。繰り返しますが、これはアプリに何か問題があるという兆候である可能性があります
于 2012-04-07T21:50:34.563 に答える
0

Mysql は完全に無料でオープン ソースです。非常にユーザー フレンドリーであり、変換部分にはhttp://www.bullzip.com/products/a2m/info.phpを使用することをお勧めします。

于 2012-04-07T21:46:22.640 に答える