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
Répondre
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
regardez mon commentaire à l'OP –
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. –
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é. –
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). –