Je dois effectuer une opération de compactage et de réparation sur une base de données Access. Pour ce faire, toutes les connexions ouvertes à la base de données doivent être fermées. Malheureusement, il y a des connexions ouvertes que je ne peux pas toujours retracer et fermer correctement. Est-il possible de déconnecter toutes les connexions ouvertes par le biais du code?Déconnexion de toutes les connexions ouvertes à la base de données MS Access
Répondre
Il n'y a rien de particulier d'un fichier d'accès par rapport à-dire comme un fichier texte ou un simple fichier power point assis sur le disque. Nous parlons ici d'un fichier d'avion jane windows. Donc, votre vraie question est: pouvez-vous déconnecter un processus qui a un fichier Word ouvert ou tout autre fichier qui se trouve sur le disque dur?
Vous pourriez être en mesure de tuer le processus et la connexion, mais là encore vous ne seriez pas en mesure de vous assurer que les données en attente d'écriture dans ce fichier Word (ou accéder au fichier mdb) se produiraient. Donc, à ma connaissance, même si vous pouviez déterminer quel processus a ouvert ce fichier power point, je ne pense pas que vous pouvez tuer ce processus et fermer ce lien au fichier qui est ouvert et assurez-vous que les données en attente à écrire seront en fait écrites. Vous ne pouvez pas savoir ce que ce code et ce processus ont en attente en termes de mises à jour en attente d'être écrites sur le disque. Si l'échec d'écriture de données en attente dans un fichier Power Point peut ne pas être un gros problème, mais dans le cas des données, vous demandez des problèmes réels.
La seule vraie approche ici est une fermeture gracieuse et appropriée de l'application/processus qui a ce fichier Windows ouvert. Tout ce que votre code peut tenter est d'utiliser le fichier en exclusivité, et si vous ne pouvez pas le faire, vous devez informer l'utilisateur qu'un compact n'est pas possible avant l'utilisation exclusive du fichier peut être obtenu.
Vous pouvez certainement ouvrir les outils d'administration sur l'ordinateur, et vérifier les utilisateurs qui ont le fichier ouvert, mais la destruction de ces connexions est faite à vos risques et périls.
Cela peut intéresser: http://www.tek-tips.com/viewthread.cfm?qid=79802
Je sais que c'est une réponse tardive, mais ici, je vais ...
Bien déterminer si les données ont été enregistrées est une autre préoccupation tout à fait, si ce n'est pas un problème, il y a plusieurs options disponibles en fonction votre configuration. En supposant que la base de données MS Access et que vous êtes sur un réseau Windows, et vous connaissez le nom de l'ordinateur (s) de connecté de l'utilisateur, cela peut être une option:
Public Function StopProcess(PC As String) As Boolean
On Error GoTo Errhandler
Dim strComputer As String
Dim objWMIService As Variant
Dim colProcessList As Variant
Dim objProcess As Variant
' Add the user domain
strComputer = PC & ".yourdomain.com"
Set objWMIService = GetObject(_
"winmgmts:{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery(_
"SELECT * FROM Win32_Process WHERE Name = 'msaccess.exe'")
' Note: authority to do this must be provided prior for this function working
' Also, note this kills all open MS Access database the user has open
For Each objProcess In colProcessList
Call objProcess.Terminate
Next
Errhandler:
On Error Resume Next
End Function
Et puis de voir quels utilisateurs sont toujours connectés vous pouvez interroger la base de données JET en faisant quelque chose comme la procédure suivante outlined by Microsoft in a KB:
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
cn.Provider = "Microsoft.Jet.OLEDB.4.0"
cn.Open "Data Source=" & Path
Set rs = cn.OpenSchema(adSchemaProviderSpecific, , _
"{947bb102-5d43-11d1-bdbf-00c04fb92675}")
If not rs.EOF Then
' Note: Fields 0 = COMPUTER_NAME, 1 = LOGIN_NAME, _
' 2 = CONNECTED, 3 = SUSPECT_STATE
Debug.Print rs.Fields(0) & " - " & _
rs.Fields(1) & " - " & _
rs.Fields(2) & " - " & _
rs.Fields(3)
End If
J'espère que cela utile.
- 1. mysql: voir toutes les connexions ouvertes à une base de données donnée?
- 2. Suppression de toute connexion à la base de données MS Access à l'aide d'ADO.NET
- 3. Base de données parent-enfant (MS ACCESS)
- 4. Traçage des modifications de la base de données MS Access
- 5. MS Access 2003 - Importation d'un fichier texte dans la base de données MS Access Tableau
- 6. Table SQLServer liée dans la base de données MS Access
- 7. Comment compter les connexions db ouvertes?
- 8. Comment utiliser SubSonic avec la base de données MS Access
- 9. connexion de base de données dans MS Access 2007
- 10. Requête base de données MS Access dans VB 2008
- 11. Connexions de base de données PDO Problème
- 12. Toutes les requêtes MS Access vers le fichier SQL
- 13. Comment compresser une base de données MS Access
- 14. Normaliser une base de données MS Access existante
- 15. Base de données Liens - Oracle 10g et Ms Access 2007
- 16. base de données MS Access au format XML, .NET
- 17. Fermeture de toutes les connexions à une base de données particulière sans abattre le service entier
- 18. Stockage de fichiers PDF dans la base de données MS Access à l'aide de formulaires
- 19. Subroutine pour se connecter à la base de données MS Access
- 20. Maintenir la structure de la base de données compatible entre MS-Access et SQL Server
- 21. Examen des clés de la base de données MS Access à l'aide de VB6
- 22. Interruption de la requête MS Access
- 23. Connexion Excel oledb à l'accès au verrou de la base de données Ms-Access db
- 24. Comment utiliser la base de données SQLite à partir de MS Access?
- 25. Comment supprimer correctement toutes les connexions à une base de données d'accès
- 26. Problème Insertion de données dans la base de données MS Access en utilisant ADO via Python
- 27. Portage à partir de MS Access
- 28. Pourquoi y a-t-il des connexions ouvertes à mes bases de données?
- 29. INSERT d'ASP.NET à MS Access
- 30. MS Access - Incompatibilité de type de données