none
Desconectar a usuarios de ACCESS RRS feed

  • Pregunta

  • Estimados, tengo una app multiusuario con access y quería saber si existe alguna manera de desconectar (a la fuerza) a todos los usuarios que esten conectados a la base. Tengo una rutina que compacta la base cada x tiempo, pero si algun usuario dejo la app abierta no me deja compactar. Puedo desconectar los usuarios por codigo?.

    Gracias!

    lunes, 14 de mayo de 2012 15:31

Todas las respuestas

  • Hola, puedes utilizar mensajes con el control Winsock. El usuario que va a compactar mandaría un mensaje al resto de puestos y estos, al  recibir el mensaje, piden al usuario conformidad para cerrar la conexión e informan mediante otro mensaje cuando hayan cerrado la conexión.

    Saludos,

    Javier J

    lunes, 14 de mayo de 2012 15:36
  • Lo que comenta Javier es ciertamente una opción.  Para que le quede más claro, No, no existe forma de desconectar a los usuarios, al menos no existe forma de hacerlo mediante lo que prove MS Access o la biblioteca OLEDB para Access.

    Para desconectar usuarios de una base de datos MS Access debe desconectarse el archivo.  En Computer Management puede hacerse a mano, así que debe haber forma de hacerlo programáticamente, pero el código deberá correr en el servidor que aloja la base de datos.  Buscando un poco encontré lo que creo son las funciones correctas para realizar dicha operación:  http://msdn.microsoft.com/en-us/library/windows/desktop/bb525394(v=vs.85).aspx.  En específico, se usaría NetFileEnum() para enumerar los archivos abiertos, y luego se utilizaría NetFileClose() para cerrar los archivos deseados.


    Jose R. MCP

    lunes, 14 de mayo de 2012 16:18
  •    Hola Javier, el tema es que por lo general la compactación se hace el fin de semana, cuano NO están los usuarios. Si alguno deja abierta la aplicación produce el error. Por eso preguntaba si se pueden desconectar a la fuera y a traves de código a los usuarios conectados. Otra opción, pero no se si puede, es "limpiar" el archivo de bloqueo (.ldb) que genera el access.

    Sigo aguardando ayuda,

    saludos!

    Pablo

    lunes, 14 de mayo de 2012 16:18
  • Hay un modelo muuuuy sencillo. Un formulario oculto, consulta un valor en una tabla cada cierto tiempo.

    Esta tablita le permitirá al administrador colocar un valor X. Si el formulario oculto consulta cada cierto tiempo y si se cumple la condición, se hace visible y le indica que en tantos minutos se cerrará la aplicación.

    Ese form oculto no debe tener botón de cerrar, ni permitir botón derecho, etc para que no detengan el reloj. Una vez alcanzado el tiempo, lo sacas con application.quit.

    agrego: en el evento unload del form también puedes sacar al usuario.

    • Editado guarracuco lunes, 14 de mayo de 2012 16:46
    lunes, 14 de mayo de 2012 16:44