none
Buscar codigo usando textbox con el boton buscar y el resultado se muestre en un datagridview RRS feed

  • Pregunta

  • Buen día estoy realizando un mini y fácil proyecto pero estoy estancado me siento frustrado ya mire varios videos y no doy con el resultado y necesito de su ayuda porfavor<o:p></o:p>

    estoy usando visual basic con sql server

    el proyecto consiste en: buscar los registros que están en 3 tablas los campos son: codigo, descripcion, precio, um, upc y las tablas son articulos, upc, unimedproducto <o:p></o:p>

    por medio de un textbox donde pongo el codigo a buscar usando el botón buscar y un checkbox con la opción de UPC si esta esta opción esta activa  se mostrara el campo upc de lo contrario no<o:p></o:p>

    dejo un codigo que recien implemente junto con el query de sql y una captura del proyecto(no me permite por los momentos), su ayuda seria de mucha ayuda... 

    buen dia

    Imports System.Data
    Imports System.Data.SqlClient


    Public Class Form1

        'Dim conexion As SqlConnection
        'Dim adaptador As SqlDataAdapter
        'Dim dt As DataTable

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

            Try
                Dim conexion = New SqlConnection("Data Source = server; Initial Catalog = BDD; Integrated Security = false; User Id= usuario; Password = contraseña;")<o:p></o:p>

                Dim adaptador As New SqlDataAdapter("select a.codpro, a.descripcion, u.precio_base, a.uni_med_base, up.upc, a.bloqueado from ARTICULO a left join upc up on a.CODPRO = up.CODPRO  left join UNIMEDPRODUCTO u on a.CODPRO = u.CODPRO where CODPRO LIKE '" + TextBox1.Text + "%'", conexion)<o:p></o:p>

                Dim dt = New DataTable 'crea la tabla
                adaptador.Fill(dt) 'se llena la tabla con la informacion proveniente del adaptador
                Me.DataGridView1.DataSource = dt
            Catch ex As Exception
                MessageBox.Show("Error al llenar datagridview" + ex.ToString)
            End Try

        End Sub
    End Class<o:p></o:p>


    • Editado St3ven miércoles, 24 de febrero de 2021 21:32
    miércoles, 24 de febrero de 2021 20:47

Respuestas

  • Tal como tienes escrito el código, tienes un "catch ex as Exception" que intercepta todos los errores. Para poder resolver el problema es necesario que sepamos cuál es exactamente el error que ha ocurrido.

    Según el código que pusiste, escribes MessageBox.Show("Error al llenar datagridview" + ex.ToString). Esa última parte +ex.ToString debería estar añadiendo el texto del mensaje de error justo después de "Error al llenar el datagridview". Precisamente esa parte que viene después, que es la que describe el error, es la que necesitamos conocer.

    A veces no es suficiente con eso, porque la excepción contiene otras excepciones anidadas, y es en éstas últimas en donde está la clave para saber cuál es el error. Por este motivo, es preferible que no confíes exclusivamente en el MessageBox para resentar ex.ToString, sino que uses el debugger para examinar en detalle todo el contenido de la excepción. Una forma de hacerlo es cambiar las opciones en Visual Studio para hacer que el debugger se detenga sobre la línea del error, en lugar de seguir por el Catch. Otra opción es poner un punto de ruptura dentro del catch. Otra opción es colocar provisionalmente entre comentarios el bloque Catch (y la correspondiente sentencia Try) mientras haces la depuración.

    Por cierto, ahora que me fijo en tu código, hay un error en la sentencia SQL: Has puesto u.precio_base pero no tienes ningún alias "u". Solo tienes "a" y "up". Si el (único) error fuera este, lo habríamos detectado inmediatamente con solo leer el texto de la excepción.

    jueves, 25 de febrero de 2021 7:33

Todas las respuestas

  • Así a simple vista tiene bastante buen aspecto. En principio, debería funcionar. ¿Qué problema concreto presenta? ¿Qué síntomas se observan?
    miércoles, 24 de febrero de 2021 21:41
  • Hola Steven,

    Gracias por levantar tu consulta en los foros de MSDN. Sería de ayuda que nos compartiera que problema está teniendo para que la comunidad te pueda asesorar mejor.

    Saludos,

    Eric Ruiz

    ____________________________

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    miércoles, 24 de febrero de 2021 22:22
    Moderador
  • Muchas gracias alberto por tu disponibilidad ayudar

    resulta que cuando pongo el codigo en el textbox y doy click en el boton buscar me envia el mensaje del catch "no se piudo llenar el datagridview"

    lo he intentando de varias formas y nada aun

    jueves, 25 de febrero de 2021 0:51
  • Tal como tienes escrito el código, tienes un "catch ex as Exception" que intercepta todos los errores. Para poder resolver el problema es necesario que sepamos cuál es exactamente el error que ha ocurrido.

    Según el código que pusiste, escribes MessageBox.Show("Error al llenar datagridview" + ex.ToString). Esa última parte +ex.ToString debería estar añadiendo el texto del mensaje de error justo después de "Error al llenar el datagridview". Precisamente esa parte que viene después, que es la que describe el error, es la que necesitamos conocer.

    A veces no es suficiente con eso, porque la excepción contiene otras excepciones anidadas, y es en éstas últimas en donde está la clave para saber cuál es el error. Por este motivo, es preferible que no confíes exclusivamente en el MessageBox para resentar ex.ToString, sino que uses el debugger para examinar en detalle todo el contenido de la excepción. Una forma de hacerlo es cambiar las opciones en Visual Studio para hacer que el debugger se detenga sobre la línea del error, en lugar de seguir por el Catch. Otra opción es poner un punto de ruptura dentro del catch. Otra opción es colocar provisionalmente entre comentarios el bloque Catch (y la correspondiente sentencia Try) mientras haces la depuración.

    Por cierto, ahora que me fijo en tu código, hay un error en la sentencia SQL: Has puesto u.precio_base pero no tienes ningún alias "u". Solo tienes "a" y "up". Si el (único) error fuera este, lo habríamos detectado inmediatamente con solo leer el texto de la excepción.

    jueves, 25 de febrero de 2021 7:33
  • hola alberto muchas gracias

    ya solucione ese detalle en la clausula where tenia que ser asi: where a.codpro pero no termina mi proyecto aun me solicitaron lo siguiente: 

    que por medio de un textbox( o que componente me recomiendan) recorra los codigos que se ingresan pueden ser pegados o escritos ejemplo: 000000154 00000125 000000456 y al presionar buscar obtener el resultado

    de paso como seria un query para saber que los datos son idénticos usando 3 servidores con la misma BDD y tablas idénticas; los servidores son srvcomayaguela, srvpresidencial, srvvillasdelsol con el servidor que estoy trabajando es el srvpedregal, la base de datos se llama pos_tda

    de la tabla UNIMEDPRODUCTO obtengo el campo precio_base, de la tabla UPC obtengo el campo UPC, y de la tabla articulo el resto de campos ya linkie los servidores mi duda como usar los left join ya que son servidores y tablas a la misma vez

    dejo el código como va hasta ahorita:

     Private Sub btnBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuscar.Click
            Try
                Dim conexion = New SqlConnection("Data Source = server; Initial Catalog = bdd; Integrated Security = false; User Id= usuario; Password = password;")

                If chUPC.Checked = True Then
                    Dim adaptador As New SqlDataAdapter("select a.codpro, a.descripcion, u.precio_base, a.uni_med_base, up.upc, a.bloqueado from ARTICULO a left join upc up on a.CODPRO = up.CODPRO  left join UNIMEDPRODUCTO u on a.CODPRO = u.CODPRO where a.CODPRO LIKE '" + txtCodigo.Text + "%'", conexion)
                    Dim dt = New DataTable 'crea la tabla
                    adaptador.Fill(dt) 'se llena la tabla con la informacion proveniente del adaptador
                    Me.dgDatos.DataSource = dt
                Else
                    Dim adaptador As New SqlDataAdapter("select a.codpro, a.descripcion, u.precio_base, a.uni_med_base, a.bloqueado from ARTICULO a left join UNIMEDPRODUCTO u on a.CODPRO = u.CODPRO where a.CODPRO LIKE '" + txtCodigo.Text + "%'", conexion)
                    Dim dt = New DataTable 'crea la tabla
                    adaptador.Fill(dt) 'se llena la tabla con la informacion proveniente del adaptador
                    Me.dgDatos.DataSource = dt
                End If

            Catch ex As Exception
                MessageBox.Show("Error al llenar datagridview" + ex.Message)

    jueves, 25 de febrero de 2021 18:05