2010-06-16 4 views
0

Existe-t-il un moyen d'écrire un hook qui sera exécuté avant que les modifications ne soient validées dans un DB d'accès? Je suis à la recherche d'un moyen de bloquer les modifications si un processus spécifique interroge actuellement la base de données.Blocage des modifications de la base de données Microsoft Access

+0

Avez-vous essayé d'exécuter le processus spécifique avec un accès exclusif à la base de données? Cela empêcherait les autres processus de modifier la base de données pendant son exécution. –

+0

Eh bien le processus "spécifique" est un ensemble de scripts de déploiement qui calcule certaines informations de la base de données. Mais si la base de données est changée au milieu de l'exécution du déploiement, tout est bouché. J'ai entendu dire que la lecture de la base de données ou de certaines tables uniquement pouvait être effectuée par programmation à partir des scripts de déploiement, puis réactivée une fois le déploiement terminé. –

+0

Vous ne pouvez pas rendre la base de données en lecture seule, mais vous pouvez définir votre connexion pour qu'elle soit exclusive. Comment faire cela dépend de la façon dont vous accédez à la base de données Jet/ACE (ODBC, ADO/OLEDB). –

Répondre

1

Vous ne nous avez pas donné beaucoup d'informations pour travailler avec. Pouvez-vous adapter quelque chose comme Create and Use Flexible AutoNumber Fields alors processus spécifique d'abord ouvre une table exclusivement? Ensuite, toutes les autres opérations susceptibles de modifier les données devront attendre jusqu'à ce qu'elles puissent verrouiller la même table. Qu'est-ce que processus spécifique? Avez-vous une méthode pour déterminer quand/si elle lit les données de votre base de données? Si est externe à la base de données, comme le code ASP du serveur Web qui utilise ADO pour récupérer des données, vous pouvez voir si les propriétés de connexion ADO Mode et IsolationLevel peuvent aider.

Mise à jour: J'ai utilisé un formulaire pour tester la propriété adModeShareDenyWrite Mode pour une connexion ADO. Lorsque le formulaire est ouvert, les autres utilisateurs peuvent ouvrir la base de données, mais sans apporter de modifications. Toutefois, si un autre utilisateur a déjà ouvert la base de données lorsque le formulaire tente d'ouvrir la connexion, une erreur se produit. Peut-être que votre script de déploiement pourrait tenter d'ouvrir une connexion adModeShareDenyWrite, et de renflouer en cas d'erreur.

Option Compare Database 
Option Explicit 
Dim cn As ADODB.Connection 

Private Sub Form_Close() 
    If Not (cn Is Nothing) Then 
     cn.Close 
     Set cn = Nothing 
    End If 
End Sub 

Private Sub Form_Load() 
    Set cn = New ADODB.Connection 
    cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
     "Data Source=\\Cmpq\export\Access\backend\links2003.mdb;" & _ 
     "User Id=admin;Password=;" 
    cn.Mode = adModeShareDenyWrite 
    cn.Open 
End Sub 
+0

regardez mon commentaire à l'OP –

Questions connexes