2010-07-19 64 views

Respuesta

3

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.

0

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.

Cuestiones relacionadas