Buho, Octubre de 2005 ===================== Este ejemplo trata de lo siguiente. Supongamos que estamos corriendo una apliacacion Access en un entorno de RED Windows. La base de datos de las tablas vinculadas (Datos.Mdb) se encuentra en un ordenador-servidor de la RED y los formularios (programa.Mdb) se encuentra distribuidos en «N» ordenadores de dicha Red, con tablas vinculadas al Datos.Mdb situado en el servidor. Este es el escenario de trabajo. En un momento dado, el administrador del sistema quiere, bien expulsar a todos los usuarios que actualmente estén conectados a la MDB de las tablas o bien quiere expulsar selectivamente a alguno de ellos, por cualquier motivo: Labores de mantenimiento etc etc. El administrador del sistema tiene acceso a Datos.mdb, que además de ser la MDb que contiene las tablas vinculadas de toda la aplicacion,dispone de un mecanismo para poder desconectar usuarios. En efecto...supongamos que hay 5 puestos de trabajo funcionando con la aplicacion. El adminisitrador del sistema abre Datos.mdb Lo primero que se le muestra es un formulario donde se le indica que ordenadores de la RED y qué usuarios están actualmente utilizando la aplicación. En ese mismo formulario se le da la posibilidad de expulsar masivamente a todos los usuarios. Esto se consigue de la siguiente manera. Existe una tabla llamada «TblDesconecta» perteneciente a Datos.MDb y linkada a todos los puestos de trabajo. Conun simple Clik en un botón de comando, pone un campo de dicha tabla a TRUE. En el resto de los puestos de trabajo (Programa.MDB) cuando se lanza la aplicacion por primera vez, se abre un formulario de inicio oculto. Este es fundamental para el buen funcionamiento de este sistema. Este formulario de inicio oculto tiene codigo en su evento Al Cronometro que lo que hace es estar testeando cada X tiempo la tabla vinculada «TblDesconecta». En el mismo momento que el adminisitrador del sistema haya puesto a TRUE el campo de dicha tabla desde el servidor, automaticamente los puestos que estén conectados recogen dicho cambio en el evento Timer del formulario oculto y se lanza el proceso de expulsión. Los usuarios son expulsados y no porán volver a entrar en la aplicacion hasta que el adminisitrador del sistema vuelva a poner a FALSE el campo de la tabla «TblDesconecta». El sistema funciona así. Ahora bien...¿Y si deseamos expulsar a un usuario concreto y no a todos? Aquí el tema ya cambia. Habrá uchas maneras de hacerlo, pero Buho se ingenió de esta forma: Dado que en una RED de Windows cada puesto de trabajo está identificado por un nombre y por uan IP lo que hacemos es utilizar la API del Winsock para expulsar puestos de trabajo concretos. De nuevo nos situamos en Datos.Mdb El asministrador del sistema tiene monitorizados a todos los equipos y usuarios que actualmente están usando Datos.Mdb Pulsa (Hace Click) sobre elcuadro de lista y obre un equipo en concreto. Al hacer eso, se abre un nuevo formulario donde tiene dos posibilidades (A) Enviar un aviso personalizado a ese usuario (B) Mandar una orden a través de Winsock para expulsar a ese ordenador concreto. Para ello, tanto en Datos.mdb como en Programa.Mdb se ha hecho necesario implementar codigo: Se han metido los modulos de la API del Winsock (Sockets de Windows) Datos.MDB mediante el Winsock lanza una orden a una IP concreta. El ordenador cliente (Programa.MDB) en el formulario oculto, anteriomente descrito, tiene permanentemente un WInsock a la escucha. En el momento que dicho Winsock reciba la orden CIERRA, se desencadena una linea de codigo en Programa.Mdb: Docmd.Quit y el usuario de ese puesto es automaticamente expulsado. El sistema parece complejo de implementar, pero no lo es. Ua vez que se entiende la filosofía del sistema, es muy sencillo y de una logica bastante comun. Espero que sea de utilidad Buho, 13 de Octubre de 2005