none
Instalar aplicación en más de una máquina

    Pregunta

  • Buenas tardes estoy desarrollando una aplicación y me surgen algunas dudas y preguntas. Si mi aplicación se va a instalar en más de una computadora en una red debo entonces desde el momento que estoy desarrollando la aplicación darle a la dirección de la cadena de conexión el nombre de una pc que será como el servidor de la misma para que localice la base de datos desde cualquier otra computadora? y de ser así eso significaría que siempre tendré que tener un servidor con el nombre que así asigne en mi aplicación para que las computadoras clientes puedan ubicar la base de datos.

    Cómo hago para controlar que mientras dos o más usuarios están trabajando en distintas pcs pero por ejemplo creando facturas para que a la hora de guardar el documento el número de esa factura no se duplique, como hago para reservar ese número cuando un usuario abre el formulario para crear una factura y le aparece el último número de documento, otro usuario hace lo mismo y también requiere de un número de documento, al final uno de ellos podría no finalizar la transacción por equis motivo.

    Gracias espero me ayuden con su conocimiento y experiencia ante estas situaciones.

    martes, 7 de febrero de 2017 23:30

Respuestas

  • Hola:

    desde el momento que estoy desarrollando la aplicación darle a la dirección de la cadena de conexión el nombre de una pc que será como el servidor

     Mientras desarrollas puedes utilizar un archivo de base de datos local, o un servidor local, si estas utilizando SQl Server  podrías utilizar tu servidor local, osea, el que tienes en el equipo de desarrollo pero, para hacer mas fácil la administración de la cadena de conexión tendrás que utilizar el archivo de configuración App.Config que una de sus funciones es precisamente esa, almacenar la cadena de conexión.

     Si quieres ver un ejemplo de como utilizarla, por favor lee el siguiente articulo: App. Config, cadenas de conexión

    Cómo hago para controlar que mientras dos o más usuarios están trabajando en distintas pcs pero por ejemplo creando facturas para que a la hora de guardar el documento el número de esa factura no se duplique

     En este caso, antes de comentarte que hacer seria mejor que nos dijeras que motor de base de datos deseas utilizar, porque la solución podría ser tan sencillo como crear un campo del tipo Identity en el caso de SQL server o un AutoNumerico de Access, lo mas recomendable es que permitas que la Base de datos controle los Ids que serian las claves principal de tus registros, el folio si sera uno personalizado con letras y números, ya seria una lógica independiente.

    Access:

    Cómo crear un contador numérico personalizado multiusuario

     SQl Server:

    IDENTITY (propiedad de Transact-SQL)

    como hago para reservar ese número cuando un usuario abre el formulario para crear una factura y le aparece el último número de documento

     Mi sugerencia es que no muestres absolutamente nada de Ids ni folios al momento de estar creando la factura o documento, el usuario no la necesita en ese momento, lo que te recomiendo que es que ingreses los datos in preocuparte por el numero de folio o id y que únicamente después de que el proceso de guardado se haya realizado correctamente el usuario pueda visualizar en pantalla el Id o Folio generado de forma automática por el sistema, de esta manera te evitas estar pensando en como "separar" un posible Id.

     En los links te dejo información muy valiosa que podría serte de utilidad, por favor lee los artículos y si tienes mas dudas por favor coméntanos.

     


    Saludos desde Monterrey, Nuevo León, México!!!

    • Propuesto como respuesta Joyce_ACModerator miércoles, 8 de febrero de 2017 15:54
    • Marcado como respuesta Frank Jarquin sábado, 11 de febrero de 2017 0:49
    miércoles, 8 de febrero de 2017 12:54
  • Hola:

    En la tabla de FACTURAS el Pk de esa tabla suele ser algo como esto 20160124 que es la factura numero 124 del año 2016, en este caso el campo ID seria Char(8)
    La tabla CONTADOR tiene 1 campo NUMERO Smallint, y posee solo 1 registro que cuando cambias de año, lo inicializas con el valor 0
    El proceso es:
    Abres una transaccion
    Modificas el valor del campo NUMERO por un valor 1 unidad mas grande.
    Una vez modificado, si otro usuario va a dar de alta otra factura, en este paso de modificar le hace esperar a que el usuario anterior acabe el proceso (cuando se cierre su transaccion)
    De esta forma se consigue que no se duplique el numero de factura.
    Para construir el numero seria el año en curso mas el valor leido de numero con ceros a la izquierda
    Se inserta el registro en la tabla FACTURA
    Se cierra la transaccion. Co esto queda libre para que este proceso lo haga otro usuario

    P.D.
    Espero que se entienda

    Un saludo desde Bilbo
    Carlos
    • Propuesto como respuesta Joyce_ACModerator jueves, 9 de febrero de 2017 17:32
    • Marcado como respuesta Frank Jarquin sábado, 11 de febrero de 2017 0:49
    jueves, 9 de febrero de 2017 11:26

Todas las respuestas

  • Hola:

    No dices que motor de bases de datos vas a utilizar
    Si es acces, la base de datos tiene que estar en una carpeta compartida que la "vean" las maquinas cliente y en la cadena de conexion le pones la direccion de dicha carpeta.
    Si es SQL, en la cadena de conexion tienes que poner el nombre de la instacia o la direccionIP.

    Con respecto a NO duplicar el numero de factura.
    Te creas una tabla que contenga un unico registro con un campo numerico, le inicializas con valor cero; y la secuencia es la siguiente:
    Creas una transaccion
    1.-  UPDATE TABLA SET NUMERO=NUMERO+1
    2.-  SELECT NUMERO FROM TABLA
    3.-  INSERT INTO TABLA_FACTURA .....
    Cierras la transacción

    Un saludo desde Bilbo
    Carlos
    miércoles, 8 de febrero de 2017 6:51
  • Hola:

    desde el momento que estoy desarrollando la aplicación darle a la dirección de la cadena de conexión el nombre de una pc que será como el servidor

     Mientras desarrollas puedes utilizar un archivo de base de datos local, o un servidor local, si estas utilizando SQl Server  podrías utilizar tu servidor local, osea, el que tienes en el equipo de desarrollo pero, para hacer mas fácil la administración de la cadena de conexión tendrás que utilizar el archivo de configuración App.Config que una de sus funciones es precisamente esa, almacenar la cadena de conexión.

     Si quieres ver un ejemplo de como utilizarla, por favor lee el siguiente articulo: App. Config, cadenas de conexión

    Cómo hago para controlar que mientras dos o más usuarios están trabajando en distintas pcs pero por ejemplo creando facturas para que a la hora de guardar el documento el número de esa factura no se duplique

     En este caso, antes de comentarte que hacer seria mejor que nos dijeras que motor de base de datos deseas utilizar, porque la solución podría ser tan sencillo como crear un campo del tipo Identity en el caso de SQL server o un AutoNumerico de Access, lo mas recomendable es que permitas que la Base de datos controle los Ids que serian las claves principal de tus registros, el folio si sera uno personalizado con letras y números, ya seria una lógica independiente.

    Access:

    Cómo crear un contador numérico personalizado multiusuario

     SQl Server:

    IDENTITY (propiedad de Transact-SQL)

    como hago para reservar ese número cuando un usuario abre el formulario para crear una factura y le aparece el último número de documento

     Mi sugerencia es que no muestres absolutamente nada de Ids ni folios al momento de estar creando la factura o documento, el usuario no la necesita en ese momento, lo que te recomiendo que es que ingreses los datos in preocuparte por el numero de folio o id y que únicamente después de que el proceso de guardado se haya realizado correctamente el usuario pueda visualizar en pantalla el Id o Folio generado de forma automática por el sistema, de esta manera te evitas estar pensando en como "separar" un posible Id.

     En los links te dejo información muy valiosa que podría serte de utilidad, por favor lee los artículos y si tienes mas dudas por favor coméntanos.

     


    Saludos desde Monterrey, Nuevo León, México!!!

    • Propuesto como respuesta Joyce_ACModerator miércoles, 8 de febrero de 2017 15:54
    • Marcado como respuesta Frank Jarquin sábado, 11 de febrero de 2017 0:49
    miércoles, 8 de febrero de 2017 12:54
  • Muchas gracias a ambos por responder y tratar de guiarme en este proceso, trabajo con base de datos Mysql, en realidad lo de dirección de la base de datos lo he hecho como ustedes mencionan, le doy un nombre al servidor y la cadena de conexión busca ese PC y accede a la base de datos, programo por jovi, estudie Ingeniería en Sistemas hace muchos años más por una satisfacción personal de cumplir con una meta de tener un título profesional pero mi vida a estado dedicada a mi negocio propio, y diseñé mi propio sistema para mi empresa en aquellos años en Visual Basic 6.0 ahora estoy trasladándolo a Visual Studio y me costó un poco volver a ponerme al día aunque no he dejado todos estos años de hacer una que otra aplicación pero siempre en visual basic.

    La explicación de Carlos Herrero no me queda muy clara en la forma de como reservo ese número de documento en una tabla alternativa pero se les agradece a ambos el detalle de orientarme y tener más claro el panorama.

    jueves, 9 de febrero de 2017 3:28
  • Hola:

    En la tabla de FACTURAS el Pk de esa tabla suele ser algo como esto 20160124 que es la factura numero 124 del año 2016, en este caso el campo ID seria Char(8)
    La tabla CONTADOR tiene 1 campo NUMERO Smallint, y posee solo 1 registro que cuando cambias de año, lo inicializas con el valor 0
    El proceso es:
    Abres una transaccion
    Modificas el valor del campo NUMERO por un valor 1 unidad mas grande.
    Una vez modificado, si otro usuario va a dar de alta otra factura, en este paso de modificar le hace esperar a que el usuario anterior acabe el proceso (cuando se cierre su transaccion)
    De esta forma se consigue que no se duplique el numero de factura.
    Para construir el numero seria el año en curso mas el valor leido de numero con ceros a la izquierda
    Se inserta el registro en la tabla FACTURA
    Se cierra la transaccion. Co esto queda libre para que este proceso lo haga otro usuario

    P.D.
    Espero que se entienda

    Un saludo desde Bilbo
    Carlos
    • Propuesto como respuesta Joyce_ACModerator jueves, 9 de febrero de 2017 17:32
    • Marcado como respuesta Frank Jarquin sábado, 11 de febrero de 2017 0:49
    jueves, 9 de febrero de 2017 11:26