2010-12-08 56 views
1

Microsoft Accessデータベースで作業している人は、どうすれば私のプログラムをチェックインできますか? 1人のユーザが自分のプログラム(C#)でデータベース上で動作することができるので、アクセスが複数のユーザにとってあまり良くないので、これをチェックする方法が必要です。誰かがAccessデータベースに接続しているかどうかを確認する方法

ありがとう

+2

データベースファイルを開いたときにAccessでロック(* .ldb)ファイルが作成されませんか? * .ldbが存在するかどうかを確認できます。 – froeschli

+0

これは私がしていないものです – Will

答えて

4
+0

このアドバイスのおかげで、私はプログラムの接続文字列を排他モードでデータベースを開くように変更しましたが、変更はありません。私が排他モードでプログラムを使用してdbを開くと、dbがすでに開いているというエラーを表示せずに、どのコンピュータからでもアクセスできます。 私は以下の接続文字列を使用しました: プロバイダ= Microsoft.Jet.OLEDB.4.0;データソース=#SERVERPATH#; OLE DBサービス= -4;モード= \ "排他共有\"; Jet OLEDB:データベースロックモード= 1; Jet OLEDB:データベースパスワード= passwort1; –

+0

数値定数を使用してみてください。Mode = 12 – Tim

1

OK:

  1. アクセスは、複数のユーザーと罰金ではありませんない理由はありません - ネットワーク上のパフォーマンスが低下することができるが、より良い選択肢がありますが。
  2. オープンされている場合は.ldbファイルがありますが、これは接続が閉じられていると消えるべきであるため、これは最良の方法ではない可能性があります。 - さらに、コメントに示唆されているように、その信頼性がありません(ただし、DBが閉じている場合は大きな問題があります)。
  3. @Timは、右の排他モードで見ているという点で最初のソリューションを持っている
  4. 私はおそらく、アクセス
  5. にそして場合にのみ、任意のメカニズムに代わって、あなた自身の「ロック」ファイルを置くのではなく頼ることをお勧めしたい
  6. あなたがファイルへの接続を制限したい理由は、同時アクセスの問題であり、適切なツールを使用しているかどうかを真剣に検討する必要があります。
+1

マルチユーザーシナリオでのアクセスは用途によって異なります。複数の同時読み取りは、複数の同時挿入よりも実行できます。挿入されたすべてのレコードはテーブルの "caboose"に追加されるため、そのページには大きな競合が生じることがあります。また、任意の共有ファイルのバイト範囲ロックアーキテクチャ(真正のクライアント/サーバーエンジンとは異なる)の場合と同様に、ネットワーク接続が不安定である場合、またはクライアントPCにヒザックアップがある場合、サーバー上のデータは不適切な瞬間にトランスポート層またはクライアントの問題が発生した場合に破損します。単一のユーザーであっても、これらの問題があります。マルチは悪化する。 – Tim

+0

私は物事を一度簡単にしました。私はそれを後悔した;) –

+0

誰かがデータベースを開いているかどうかについて決定的な何かをLDBファイル(または1つの欠如)が存在すると仮定してはいけません。つまり、Jet/ACEが接続を終了した後もファイルシステムに残る可能性があるため、誰かがデータベースを使用しているとは限りません(ただし、これは格納先フォルダに対するDELETE権限を持つJet/ACEのデフォルトの動作ではありません) 。 –

関連する問題