Necesito realizar una operación de Compactar y Reparar en una base de datos de Access. Para hacer eso, todas las conexiones abiertas a la base de datos deben ser cerradas. Lamentablemente, hay conexiones abiertas que no siempre puedo rastrear y cerrar correctamente. ¿Hay alguna forma de desconectar todas las conexiones abiertas a través del código?Desconectar todas las conexiones abiertas a la base de datos de MS Access
Respuesta
No hay nada especial acerca de un archivo de acceso digamos, en comparación con un archivo de texto o un archivo de Power Point sencilla sentado en el disco. Estamos hablando de un archivo de ventanas plano jane aquí.
Por lo tanto, su verdadera pregunta es ¿puede desconectar un proceso que tiene un archivo de palabras abierto o cualquier archivo viejo que simplemente está sentado en el disco duro?
Es posible que pueda matar el proceso y la conexión, pero de nuevo no podrá asegurarse de que se realicen las escrituras de datos pendientes en ese archivo de palabras (o acceda al archivo mdb).
Por lo que sé, incluso si pudieras determinar qué proceso tiene ese archivo de punto de arranque abierto, no creo que puedas matar ese proceso de manera confiable y cerrar eso conecta al archivo que está abierto y asegúrate de que los datos pendientes de escribir se escribirán de hecho. No puede saber qué código y proceso tiene pendiente en términos de actualizaciones que esperan ser escritas en el disco.
Si bien la falla en la escritura de datos pendientes en un archivo de power point puede no ser tan importante, pero en el caso de los datos, usted está buscando problemas reales.
El único enfoque real aquí es un apagado correcto y adecuado de la aplicación/proceso que tiene ese archivo de Windows abierto.
Todo lo que su código puede intentar es obtener un uso exclusivo del archivo, y si no puede hacerlo, entonces debe informar al usuario que no es posible un compacto hasta que el uso exclusivo del archivo Puede ser obtenido.
Sin duda puede abrir las herramientas de administración en la computadora, y comprobar los usuarios que tienen el archivo abierto, pero matar a esas conexiones de usuario se realiza bajo su propio riesgo.
Esto puede ser de interés: http://www.tek-tips.com/viewthread.cfm?qid=79802
Sé que esto es una respuesta tardía, pero aquí voy ...
Aunque la determinación de si los datos se ha guardado es otra preocupación por completo, si eso no es un problema, hay varias opciones disponibles en función de tu configuración Suponiendo que la base de datos de MS Access y se encuentra en una red de Windows, y que conoce el nombre (s) del ordenador del usuario de iniciada la sesión, esto puede ser una opción:
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
Y después de ver lo que los usuarios todavía se registran en la que podría consultar la base de datos JET haciendo algo como el procedimiento outlined by Microsoft in a KB siguiente:
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
espero que encuentre útil esta información.
- 1. mysql: ver todas las conexiones abiertas a una base de datos determinada?
- 2. ¿Cómo eliminar datos en todas las tablas de ms-access a la vez?
- 3. ¿Es costoso mantener abiertas las conexiones a la base de datos?
- 4. ¿Cómo usar la base de datos SQLite desde MS Access?
- 5. ms-access: hacer algo en la base de datos open
- 6. insertar datos en la base de datos de MS Access con ADO a través de Python
- 7. Sincronizar datos de MS Access a MS SQL
- 8. Cómo convertir la codificación de la base de datos de MS Access a UTF-8?
- 9. Completar una base de datos de MS Access en Linux
- 10. Uso de VBA para exportar todas las consultas SQL de MS Access a archivos de texto
- 11. Creando una base de datos MS Access usando python
- 12. Socket.IO: ¿son las conexiones abiertas una preocupación?
- 13. Cómo comprimir una base de datos MS Access
- 14. Si un programa de consola termina, ¿las conexiones a la base de datos utilizadas en el programa permanecerán abiertas?
- 15. ¿Cómo contar conexiones db abiertas?
- 16. Importación de MS ACCESS DB a mySql?
- 17. Conexión a la base de datos MS Access 2007 (.accdb) usando pyodbc
- 18. Recuperar datos URL JSON en MS Access
- 19. ¿Cómo cierro todas las pestañas abiertas a la vez?
- 20. Base de datos y conexiones
- 21. ¿Cómo accedo a una base de datos de MS Access desde Oracle?
- 22. Obtenga todas las conexiones TCP abiertas mediante la aplicación utilizando C#
- 23. ¿Con qué frecuencia debo cerrar las conexiones a la base de datos?
- 24. c3p0 cómo cerrar todas las conexiones a la base de datos y volver a abrirlas cuando sea necesario?
- 25. ¿Por qué "Sí" es un valor de -1 en la base de datos de MS Access?
- 26. H2 Conexiones múltiples a la base de datos
- 27. Exportar base de datos MS Access a SQL Server 2008 Express
- 28. Incrustar base de datos de MS Access en la aplicación C# WinForm
- 29. base de datos Access en Android
- 30. Conexión agrupación con la base de datos de Access