none
bloqueo en visual studio

    Pregunta

  • hola tengo un programa de ventas en visual studio, cada treinta ventas se bloquea por lo que debo  reiniciar mi programa y vuelve a funcionar, la base de datos es en php y el motor es mysql no se que serà ya he intentado hacer varias cosas  aca hay algo del codigo que puede ser la verdad no se si sera eso.


        Private Sub estacompra()
            Try
                Dim sql As String

                sql = "SELECT ventas.id_venta,articulos.cod_product, articulos.nomb_product,medida.medida,ventas.peso,ventas.cant,ventas.valor_unitario,ventas.valor_iva,ventas.precio, articulos.inventario FROM ventas INNER JOIN usuarios ON (ventas.id_usuarios = usuarios.id_usuarios) INNER JOIN pos ON (ventas.id_caja = pos.id_caja) INNER JOIN articulos ON (ventas.id_product = articulos.id_product) INNER JOIN medida ON (articulos.id_medida = medida.id_medida) WHERE  usuarios.id_usuarios=" & Me.Label9.Text & " AND pos.id_caja= " & Me.Label12.Text & " AND ventas.activo = 1 order by ventas.id_venta desc"
                Dim Dt As New DataTable
                Dim Da As New MySqlDataAdapter(sql, varconex)
                Da.Fill(Dt)
                DataGridView1.DataSource = Dt
                DataGridView1.Columns(0).Width = 50
                DataGridView1.Columns(0).Visible = False
                DataGridView1.Columns(1).Width = 140
                DataGridView1.Columns(2).Width = 450
                DataGridView1.Columns(3).Width = 80
                DataGridView1.Columns(4).Width = 80
                DataGridView1.Columns(5).Width = 80
                DataGridView1.Columns(6).Width = 140
                DataGridView1.Columns(7).Width = 150
                DataGridView1.Columns(8).Width = 140
                DataGridView1.Columns(9).Width = 80

                'varconex.Close()
                'MsgBox(sql)
            Catch ex As Exception
                MsgBox("ERROR,  Por favor reparar tablas, cierre el programa e inicie nuevamente", vbExclamation, "Atención:      SKYNET")
                End
            End Try

        End Sub

    sábado, 15 de octubre de 2016 22:35

Respuestas

  • Hola Ferney Gomez,

    Te aparece por casualidad el mensaje de este bloque ?

    Catch ex As Exception
         MsgBox("ERROR,  Por favor rep.......
         End
    End Try

    En caso sea correcto, como vas a saber el error que se produce si nunca lo muestras ?

    El Catch es el encargado de capturar algún error producido dentro del código envuelto por el Try, por lo que tendrías que mostrar la información del error para saber qué es lo que lo está produciendo.

    Catch ex As Exception
       MessageBox.Show("Se produjo un error : " & ex.Message)
       'MessageBox.Show("Se produjo un error : " & ex.StackTrace)
    End Try

    Además deberías parametrizar tu consulta y evitar la concatenación directa.

     Using con As New SqlConnection("MiCadenaConexion")
    
          sql = ".... WHERE usuarios.id_usuarios= @userId AND pos.id_caja= @idCaja ....."
          Dim Da As New MySqlDataAdapter(Sql, varconex)
          Da.SelectCommand.Parameters.AddWithValue("@userId", Label9.Text)
          Da.SelectCommand.Parameters.AddWithValue("@idCaja", Label12.Text)
    
          Dim Dt As New DataTable
          Da.Fill(Dt)
    
          '.... resto de código
     End Using

    Procura usar using al usar SqlConnection para liberar el objeto y cerrar la conexión automáticamente.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    martes, 18 de octubre de 2016 3:16

Todas las respuestas

  • Hola:

    En el codigo que expones, lo que hace es una consulta a una base de datos MySQL y el resultado lo carga en un DataGridView.
    ¿Donde se bloquea?

    Un saludo desde Bilbo
    Carlos
    domingo, 16 de octubre de 2016 7:31
  • Hola Carlos el programa de ventas realiza a perfeccion hasta treinta ventas , si yo estoy facturando la venta numero 25 y salgo del programa y vuelvo a entrar el vuelve y trabaja hasta otras 55 facturas  y se bloquea no se si sa problema de php o de mysql o de visual studio ya he revisado el codigo y no se que pueda ser. cuando se congela la pantalla y lo dejo quieto un rato me sale el msgbox que aparece en elcodigo que inserte pero no veo nada extraño
    martes, 18 de octubre de 2016 2:48
  • Hola Ferney Gomez,

    Te aparece por casualidad el mensaje de este bloque ?

    Catch ex As Exception
         MsgBox("ERROR,  Por favor rep.......
         End
    End Try

    En caso sea correcto, como vas a saber el error que se produce si nunca lo muestras ?

    El Catch es el encargado de capturar algún error producido dentro del código envuelto por el Try, por lo que tendrías que mostrar la información del error para saber qué es lo que lo está produciendo.

    Catch ex As Exception
       MessageBox.Show("Se produjo un error : " & ex.Message)
       'MessageBox.Show("Se produjo un error : " & ex.StackTrace)
    End Try

    Además deberías parametrizar tu consulta y evitar la concatenación directa.

     Using con As New SqlConnection("MiCadenaConexion")
    
          sql = ".... WHERE usuarios.id_usuarios= @userId AND pos.id_caja= @idCaja ....."
          Dim Da As New MySqlDataAdapter(Sql, varconex)
          Da.SelectCommand.Parameters.AddWithValue("@userId", Label9.Text)
          Da.SelectCommand.Parameters.AddWithValue("@idCaja", Label12.Text)
    
          Dim Dt As New DataTable
          Da.Fill(Dt)
    
          '.... resto de código
     End Using

    Procura usar using al usar SqlConnection para liberar el objeto y cerrar la conexión automáticamente.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    martes, 18 de octubre de 2016 3:16
  • hola estube  esperando y el error que sale es:

    System.ApplicationException: MySqlException raised in OpenConnection, error connecting: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached

    esto ocurre cada 30 facturas se bloquea

    miércoles, 19 de octubre de 2016 0:41
  • he intentado dandole la propiedad propiedad de max pool size=100 y a 1 y no funciona
    miércoles, 19 de octubre de 2016 0:42
  • Hola Ferney Gomez,

    En tu código que muestras veo que la parte en la que cierras la conexión está en comentario. Por lo que esa conexión permanecerá abierta. Es por eso que se va acumulando las conexiones hasta el límite, y cuando reinicias la aplicación (cierras tu programa) todas las conexiones son liberadas.

    Procura siempre cerrar la conexión o mejor aún usa Using para liberar el objeto utilizado y cerrar la conexión automáticamente. (en el ejemplo que mostré anteriormente hice uso de ello.)

    Adjunto url's donde se plantean preguntas similares.

    How can I solve a connection pool problem

    The timeout period elapsed prior to obtaining a connection from the pool

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    miércoles, 19 de octubre de 2016 1:05