none
Como combertir una aplicacion monousuario a multiusuario

    Pregunta

  • Estimados, tengo una aplicación desarrollada en Visual Studio 2015 usando lenguaje VB.

    la aplicación se conecta a una base de datos access 2010 y permite agregar, eliminar, modificar y buscar datos en la BD Access.

    la cadena de conexión que uso es: 

    Public cnn As New OleDb.OleDbConnection("Provider=microsoft.ace.oledb.12.0;data Source=edictio.accdb")

    ahora, cuando publico la aplicación para poder instalarla en otra pc, una vez instalada tengo que copiar la base de datos en esta ruta 

    C:\Users\ASUS\AppData\Local\Apps\2.0\JA1862R4.GR3\9A9EVN42.5CG\wind..tion_25521aa37b8d3c32_0001.0000_b3824dcf93d1b959

    ya que cuando instala mi programa me indica que no se pudo acceder a la BD por que el archivo no se encuentra y me indica esa dirección, cuando pego la BD en esa ruta la aplicación funciona normal.

    lo que quiero es poder hacer que la aplicación tenga una ruta de conexión a la base de datos predeterminada que sea por red, es decir que cuando instale la aplicación en la PC A el programa sepa que la BD esta en la PC Servidor dentro de una carpeta compartida, igual para cuando instale en diferentes maquinas dentro de la red.

    por favor su ayuda para poder resolver este tema, ya que mi aplicación hoy por hoy es mono-usuario y quiero convertirla en multi-usuario.

    sábado, 11 de marzo de 2017 14:54

Respuestas

  • eloshmt,

    Mucho cuidado con el concepto de monousuario y multiusuario y del ámbito de lo que esperas conseguir, Microsoft Access no es un gestor de base de datos que soporte la concurrencia, si estimas que podrías tener mas de 10 usuarios en simultáneo te recomiendo que consideres la posibilidad de escalar a otros gestores de base de datos, como por ejemplo SQL Server.

    Por otro lado, si tienes el archivo de base de datos en un recurso compartido de red entonces la cadena de conexión debe acceder al archivo mediante una ruta de red, por ejemplo:

    Provider=Microsoft.ACE.OLEDB.12.0; Data Source=\\Servidor\RecursoCompartido\edictio.accdb;

    Así mismo, no es recomendable que escribas la cadena de conexión por cada instancia de la clase OleDbConnection, debes centralizar la cadena de conexión en una ubicación externa a la aplicación (por ejemplo, el archivo de configuración App.config) que te permita escribir cambios si fuese necesario, te recomiendo que leas el siguiente artículo App. Config, cadenas de conexión


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta eloshmt lunes, 13 de marzo de 2017 19:25
    sábado, 11 de marzo de 2017 15:21

Todas las respuestas

  • eloshmt,

    Mucho cuidado con el concepto de monousuario y multiusuario y del ámbito de lo que esperas conseguir, Microsoft Access no es un gestor de base de datos que soporte la concurrencia, si estimas que podrías tener mas de 10 usuarios en simultáneo te recomiendo que consideres la posibilidad de escalar a otros gestores de base de datos, como por ejemplo SQL Server.

    Por otro lado, si tienes el archivo de base de datos en un recurso compartido de red entonces la cadena de conexión debe acceder al archivo mediante una ruta de red, por ejemplo:

    Provider=Microsoft.ACE.OLEDB.12.0; Data Source=\\Servidor\RecursoCompartido\edictio.accdb;

    Así mismo, no es recomendable que escribas la cadena de conexión por cada instancia de la clase OleDbConnection, debes centralizar la cadena de conexión en una ubicación externa a la aplicación (por ejemplo, el archivo de configuración App.config) que te permita escribir cambios si fuese necesario, te recomiendo que leas el siguiente artículo App. Config, cadenas de conexión


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta eloshmt lunes, 13 de marzo de 2017 19:25
    sábado, 11 de marzo de 2017 15:21
  • Yo no usaría Access (a pesar que me agrada mucho por su sencillez) para una aplicación multi usuario. Yo pasaría la BBDD a MySql o Sql Server, La razón es que sí pueden operar con concurrencia.

    sábado, 11 de marzo de 2017 18:06
  • Williams, gracias por la respuesta y por el aporte a lo que es un app.config, no migro la base pro que no se trabajar con sql, es mas nunca lo he visto pero ya lo estoy descargando a ver que hago.

    el articulo que mencionas es interesante no sabia que existia la posibilidad de cambiar la cadena de conexion una vez publicado el programa, pero dime esto se puede aplicar tambien con access o es solo para sql????

    Gracias.

    lunes, 13 de marzo de 2017 19:28
  • Se que todo este hilo tiene un tiempo, pero igual quiero preguntar, a ver si me pueden dar una mano.

    Tengo un programa en VB6, con base de datos en access. En principio funcionaba en red con 2 computadoras (hasta ahi todo perfecto), hoy en dia agregaron 3 mas.

    Al acceder varios clientes sale el error de que el usuario X puso la base de datos en modo bloqueado y se cierra el programa.

    Vi varias soluciones en foros, entre ellas la de que la base access este en modo compartido. Asi estaba. El problema persistía. La carpeta en la que esta la base de datos esta compartida con permisos lectura, escritura etc para todos. El problema continuaba.

    Lei en otro foro que lo mejor era dividir la base de datos, dejar la base (backEnd) en una carpeta compartida con permisos para todos en el servidor y luego la base mdb linkeada al back-end del servidor en forma local en cada pc. El programa en cada PC tiene un archivo .udl de conexion configurado para acceder a ese .mdb.

    Sinceramente es un dolor de cabeza. El problema periste. Traté de modificar código fuente en VB modificando cursores y bloqueos y sigue igual.

    Creo que el panorama esta explicado y espero que se entienda.

    La pregunta es: si paso la base de datos access a SQL Server Lite, dejando el código VB tal como está, se terminarian los problemas? He visto que muchos opinan que migrar la base de datos a SQL Server es la solución por concurrencia de los usuarios al mismo tiempo a la base de datos, ahora, el error de que un usuario "bloquea" la base, se terminaría con una migración?

    Espero tu respuesta y que pueda ser de ayuda.

    mil gracias de antemano.

    viernes, 26 de enero de 2018 12:35