none
problema multiusuario en as.net RRS feed

  • Pregunta

  • asp.net  vb

    mysql

    buenas tardes 

    expertos si me puede orientar por fa tengo un formulario de ingreso de cotización donde insertos los  productos cotizados funciona graba y avanza el correlativo del numero de la  cotización bien hasta hay (campo en común numerocotizacion)

    el problema se va genera cuando haya mas usuarios haciendo cotizaciones como lo para hacerlo multiusario por fa

    mis tablas

    cotización

     datos._Rut_Proveedor = TxtRut.Text
                datos._Proveedor = TxtProveedor.Text
                datos._Contacto = TxtContacto.Text
                datos._Direccion = TxtDireccion.Text
                datos._ciudad = TxtCiudad.Text
                datos._fecha = TxtFecha.Text
                datos._fono = TxtTelefono.Text
                datos._correo = TxtCorreo.Text
                datos._NumeroCotizacion = TxtNumeroCotizacion.Text
                datos._validez = TxtValidez.Text
                datos._garantia = TxtGarantia.Text
                datos._fecha_entrega = TxtFechaEntrega.Text
                datos._SumaTotal = TxtTotalNeto.Text
                datos._PorcentajeIva = TxtIva.Text
                datos._Totalcotizacion = TxtTotalCotizacion.Text
                datos._TotalNeto = TxtTotalNeto.Text
                datos._dvdcotizacion = Txtdv.Text

    detalle_cotizacion

               datos._Codigo_Producto = TxtCodigo.Text
                datos._Cantidad = TxtCantidad.Text
                datos._Descripcion = TxtDescripcion.Text
                datos._Precio = TxtPrecio.Text
                datos._Total = TxtTotal.Text
                datos._NumeroCotizacion = TxtNumeroCotizacion.Text

    viernes, 12 de junio de 2015 17:34

Respuestas


  • >>cuando voy ingresando datos a la grilla necesita el numerocotizacion como lo haria en esa forma como dices tu

    datos._Codigo_Producto = MaximoNumero();

    //aqui insertas

    TxtCodigo.Text = datos._Codigo_Producto

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta djnilo lunes, 15 de junio de 2015 14:16
    viernes, 12 de junio de 2015 18:20

Todas las respuestas

  • hola

    es que el id o codigo no deberias generarlo previamente, se genera cuando se crea la entidad y se le informa al usuario cual fue el generado

    o sea eso de mostrarlo previamente es incorrecto si estas desarrollando para varios usuario concurrentes

    ademas deberias usar una key como identity

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 12 de junio de 2015 17:37
  • leandro el numerocotizacion lo calculo 

      Public Function MaximoNumero() As Integer
    
            Using conn As New MySqlConnection(connString)
                conn.Open()
    
                Dim query As String = "SELECT IFNULL(MAX(NumeroCotizacion),0) from cotizacion"
                Dim cmd As New MySqlCommand(query, conn)
                Dim max As Integer = Convert.ToInt32(cmd.ExecuteScalar())
    
                Return max + 1
            End Using
    
        End Function
    

    viernes, 12 de junio de 2015 17:47
  • hola

    claro pero ese deberias hacerlo en el momento que realizas el INSERT y el id generado se lo muestras como resultado de la transaccion al usuario

    o sea no lo generas previo cuando muestras la pantalla


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 12 de junio de 2015 18:08
  • cuando voy ingresando datos a la grilla necesita el numerocotizacion como lo haria en esa forma como dices tu

     datos._Codigo_Producto = TxtCodigo.Text
                datos._Cantidad = TxtCantidad.Text
                datos._Descripcion = TxtDescripcion.Text
                datos._Precio = TxtPrecio.Text
                datos._Total = TxtTotal.Text
                datos._Numero_Cotizacion = TxtNumeroCotizacion.Text
    
    
                If insertar.insertardetallecotizacion(datos) Then
                    ' MsgBox("los datos se insertaron correctamente...")
                    'Label1.Text = "los datos se insertaron correctamente..."
                    Call calcular()
                    LimpiarDetalle()
                    LLenarGrid()
                    TxtCodigo.Focus()
                Else
                    ' MsgBox("Error al insertar datos...")
                    'Label1.Text = "Error al insertar datos..."
    
                End If

    viernes, 12 de junio de 2015 18:10

  • >>cuando voy ingresando datos a la grilla necesita el numerocotizacion como lo haria en esa forma como dices tu

    datos._Codigo_Producto = MaximoNumero();

    //aqui insertas

    TxtCodigo.Text = datos._Codigo_Producto

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta djnilo lunes, 15 de junio de 2015 14:16
    viernes, 12 de junio de 2015 18:20
  • leandro me surgio o problema si me puedes ayudar por fa  al momento de calcular los datos introduccidos en la grilla me genera un error ya que no se estan calculado los datos a travez del txtnumerocotizacion  si no que el numeromaximo es el que genera el correlativo .
     Public Function calcular() As Decimal
    
            conn.Open()
    
            Dim query As String = "select SUM(Total) From detalle_cotizacion where Numero_Cotizacion = ?nrocotizacion"
            Dim cmd As New MySqlCommand(query, conn)
            cmd.Parameters.AddWithValue("?nrocotizacion", TxtNumeroCotizacion.Text)
    
            Dim total As Decimal = Convert.ToDecimal(cmd.ExecuteScalar())
    
            TxtSumaTotal.Text = total.ToString()
    
            TxtTotalNeto.Text = TxtSumaTotal.Text
    
            TxtIva.Text = Convert.ToString(Math.Round(TxtTotalNeto.Text * (19 / 100), 0))
            Dim suma As Decimal = Convert.ToDecimal(TxtTotalNeto.Text) + Convert.ToDecimal(TxtIva.Text)
            TxtTotalCotizacion.Text = Convert.ToString(Math.Round(suma, 2))
    
    
            Return total
            conn.Close()
    
        End Function
      Public Function MaximoNumero() As Integer
    
            Using conn As New MySqlConnection(connString)
                conn.Open()
    
                Dim query As String = "SELECT IFNULL(MAX(NumeroCotizacion),0) from cotizacion"
                Dim cmd As New MySqlCommand(query, conn)
                Dim max As Integer = Convert.ToInt32(cmd.ExecuteScalar())
    
                Return max + 1
            End Using
    
        End Function


    lunes, 15 de junio de 2015 13:07
  • gracias por responder leandro
    lunes, 15 de junio de 2015 14:16