2009-05-21 5 views
1

私は、MS Accessデータベースにユーザーが通常1日に1回は実行するが、多少はあるかもしれないプロセスを持っている。数分かかるため、メインテーブルを削除して再作成するため、一時的な排他アクセスが必要です。MS Accessをオンザフライで独占に変更する

プロセスの開始前にdbに他のユーザーがいるかどうかを確認するコードがありますが、最初にアクセスを「排他」に変更してアクセスをオープンに戻す方法があります終わり?

+1

なぜあなたはメインテーブルを削除して再作成していますか? – Malfist

答えて

0

アクセスは、データベースを開くときにのみ排他/共有モードを設定します。オープン/クローズを行う別のデータベースを持たない限り、「オンザフライ」で行うことはできません。

したがって、他のデータベースのテーブルを削除して再作成する「メンテナンス」データベースを作成することができます。メンテナンスデータベースは、データベースを排他モードで開くことができます。

ところで、おそらくこれを行うのは良いことではありません。テーブルを削除/再作成するたびにデータベースのサイズが増え、サイズを制御するためには通常のコンパクトが必要になります。可能であれば、この操作を必要としない別のデザインを見つけてください。

+0

ありがとう、ありがとう。私は毎日、削除され、再ロードされる20,000以上のレコードがあり、サイズの増加はレコードを削除してから新しいレコードを追加するよりもはるかに小さいので、この方法でやっていました。それは何倍も高速です。時々コンパクトで大したことはありません。再度、感謝します。 –

0

/exclコマンドライン引数を指定してAccessを実行すると、データベースが排他モードで開きます。

しかし、あなたがAccessからこれをやっているかどうかはわかりません。

0

テーブルとタイマーを隠しフォームで使用できます。タイマーは、Accessデータベース内のテーブルの値をチェックします。値がすべての人をキックするように設定されているとき、それはみんなをキックする。隠されたフォームの 例コード:

Private Sub Form_Timer() 
'On Error GoTo Err_Handler 
Dim fLogout As Boolean 
    'checks to see if the table is set to false 
    fLogout = DLookup("on_off", "tblAdminSettings", "Control = 'logoff?'") 

If fLogout = True Then 
'this is your timer it allows everyone to be logged off 
      T1 = Now() 
     T2 = DateAdd("s", 10, T1) 
    Do Until T2 <= T1 
     T1 = Now() 
    Loop 
DoCmd.SetWarnings False 

DoCmd.Quit 

    End If 

Exit_Here: 
    Exit Sub 
Err_Handler: 
    MsgBox Err.Description, vbExclamation, "Error Your Killing me Smalls" 
Resume Exit_Here 
End Sub 

あなたはそれが常に近くになります賢明な他のデータベースを開いたときに戻って値をfalseに設定する方法を持っていることを確認することを忘れないでください。

関連する問題