none
Como hacer mi sistema multiusuario?? RRS feed

  • Pregunta

  • Hola!!! Tengo mi sistema prácticamente terminado, pero me surgió un problema. Necesito que sea multiusuario, para poder instalarlo en 2 pc en red. Mi DB la realice en MySql.  El sistema es para gestion de un comercio, cada usuario tiene su clave y quisiera que las 2 pc puedan realizar ventas por ejemplo.

    Desde ya muchas gracias!!!

    • Cambiado Enrique M. Montejo viernes, 1 de agosto de 2014 9:57 Pregunta relacionada con el acceso a datos con MySQL.
    martes, 22 de julio de 2014 23:09

Todas las respuestas

  • ¿En que ambiente hiciste el sistema?

    ¿Ya intentaste conectarte desde los dos sitios con el mismo usuario o porque dices que no se puede conectar?

    miércoles, 23 de julio de 2014 0:07
  • Gracias por Responder! El sistema lo realice utilizando la base de forma local(la coneccion la hago a 127.0.0.1). Lo que ahora tendria que hacer es que 1 de las pc sea el servidor asi puedo acceder de cualquiera de ellas. La verdad es que no se como realizarlo (como compartir la DB).
    miércoles, 23 de julio de 2014 0:14
  • Entonces el problema radica en lo último.

    Básicamente lo que necesitas es que uno de los equipos funcione como servidor y establecer la conexión al mismo.

    Quizás este enlace te pueda servir

    https://mx.answers.yahoo.com/question/index?qid=20080820080117AATitYJ

    miércoles, 23 de julio de 2014 1:37
  • Nuevamente muchisimas gracias!!! ahora otra consulta, planteo un ejemplo para que se entienda:

    Tengo 1 formulario que hace altas de clientes. Para ello cuando abro el formulario consulta la cantidad de filas que tiene la tabla clientes y le suma 1. este resultado seria el id del nuevo cliente. Si al mismo tiempo desde las 2 pc quiero hacer un alta y abro el formulario, las 2 muestran para crear el cliente con el mismo id. como sulciono esto? 

    miércoles, 23 de julio de 2014 1:48
  • >>Si al mismo tiempo desde las 2 pc quiero hacer un alta y abro el formulario, las 2 muestran para crear el cliente con el mismo id. como sulciono esto?

    ese es un tema de concurrencia

    podrias solucionarlo no mostrandole al usuario el id del cliente que va a tener, o sea no te adelantes al futuro

    sino que le pides al usuario ingrese los datos del cliente y cuando confirma el alta alli es cuando generas el id y luego le informas que se creo el usuario con id xx

    o sea no lo generes cuando abres el form, lo generas cuando se confirma la operacion, entonces solo sera un instante entre que haces el select max() y luego ejecutas el insert, son operacion inmediatas

    Nota: si te animas usar un campo id definido como identity (autonumerico) aun mejor

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    miércoles, 23 de julio de 2014 4:00
  • Muchas gracias!!! era lo que en algún momento pensé, pero ahora  se me complica para diseñar la parte de facturación. Lo había realizado de la misma manera, preguntaba la situación impositiva del cliente (Monotributista, Resp Inscripto) y según la situación impositiva de mi comercio leía en la base la ultima factura cargada y le mostraba la que se iba a generar, luego completaba los datos de los artículos, ahora tendría que hacer lo mismo de mostrar el numero de factura cuando grabo cual se genero no?  

    Ahora agrego otra pregunta, si el id lo hago autoincremental, como se su valor cuando estoy grabando el registro??

    • Editado CompuHiper88 miércoles, 23 de julio de 2014 13:41
    miércoles, 23 de julio de 2014 13:34
  • Hola:
    Para dar numeros de facturas, porque no te creas una tabla llamada CONTADOR (por ejemplo) con un campo numerico llamado NUMERO.
    Cuando empieza el año pones el valor de NUMERO igual a 0.
    Cuando vas a insertar 1 registro en la tabla FACTURA, el procedimiento seria:
    1.- Inicias una transaccion
    2.- Update CONTADOR Set NUMERO=NUMERO+1
    3.- Select NUMERO From CONTADOR
    3.- Insert Into FACTURA (ID_FACTURA, CAMPO1 ....) values (@Id, @Campo1....)
    El valor de @Id es el valor que has obtenido en la consulta del paso 3
    4.- Cierras la transaccion.

    De esta forma cuando el usuario1 esta dando de alta una factura, hasta que no termine nadie puede cambiar el valor del campo NUMERO.

    Un saludo desde Bilbo
    Carlos

    jueves, 24 de julio de 2014 7:41
  • Muchas gracias!! Voy a implementar tu idea. Ahora lo que me surge es el problema de la transacción.

    el UPDATE lo hago asi:

    Dim res As Integer = INSERT_UPDATE_DELETE("start transaction; UPDATE articulos SET pcompra = '10' WHERE codigo = '25' ")

     para controlar si lo habia realizado hacia esto :

    If res = 0 Then
    
    MsgBox("No se puede actualizar en este momento, vuelva a intentarlo más tarde", MsgBoxStyle.Critical, "Atención")
    Exit Sub
    Else
    
    
    End If

    lo que no se ahora es como insertar el COMMIT para que se grabe si se realizo bien o el ROLLBACK si ocurrio un error y que no modifique nada!!!!

    dejo la funcion que utilizo para INSERT, UPDATE, DELETE

     Public Function INSERT_UPDATE_DELETE(ByVal Str_Sql As String) As String
            ' NOTA: en res devolvemos el nº de filas afectadas si es correcto o 
            '       cero si no pudimos insertar
            '
            '       res debería consultarse luego de invocar la función
            '       forma de uso: dim res as integer = INSERT_UPDATE_DELETE("LA INSTRUCCION SQL")
            '                     if res = 0 then
            '                         MsgBox ("No pude ejecutar la instrucción SQL")
            '                     end if
    
            'creamos el objeto comando y le pasamos el parámetro que contiene la query y la conexion 
            Dim Comando As New MySqlCommand(Str_Sql, Con)
            'Try para capturar los errores
            Try
                'antes de abrir conexión nos aseguramos que no exista conexión establecida previa 
                If Not Con Is Nothing Then
                    Con.Close()
                End If
                'abrimos conexión 
                Con.Open()
                'adaptador que sirve de enlace intermedio entre la aplicación y la 
                'base de datos 
                Dim Da As New MySqlDataAdapter(Str_Sql, Con)
                Dim Dt As New DataTable
                Dim res As Integer
                If UCase(Left(Str_Sql, 6)) = "INSERT" Then
                    Dim empezar As Integer = InStr(Str_Sql, "INTO ") + 5
                    Dim terminar As Integer = InStr(Str_Sql, " (") - empezar
                    Dim tabla As String = Mid(Str_Sql, empezar, terminar)
                    Dim Dau As New MySqlDataAdapter("SELECT LAST_INSERT_ID() from " & tabla, Con)
                    Dim res1 As Integer = Comando.ExecuteNonQuery()
                    Dim Cmd As New MySqlCommandBuilder(Dau)
                    'llenamos la tabla 
                    Dau.Fill(Dt)
                    If Dt.Rows.Count = 0 Then
                        MsgBox("NO PUDE OBTENER EL ID")
                    Else
                        res = Dt.Rows(0).ItemArray(0).ToString
                    End If
                    Dt.Clear()
                Else : res = Comando.ExecuteNonQuery()
                End If
                Return res.ToString
            Catch ex As Exception
                MsgBox(ex.Message)
                Dim Res As Integer = 0
                Return Res
            Finally
                'cerramos la conexión 
                Con.Close()
                'y esto es muy importante, el objeto comando que habiamos creado 
                'lo eliminamos de la memoria 
                Comando = Nothing
                'finalizamos la captura de errores 
            End Try
        End Function



    jueves, 24 de julio de 2014 13:23