none
No me hace la busqueda con codigos alfanumericos RRS feed

  • Pregunta

  • Buenos días, tengo un problema con una aplicación que estoy haciendo para mi trabajo.

    En un formulario de VB quiero hacer búsqueda en una tabla de access llamada MARCAS. Esta tabla tiene 2 campos: codigo_marca y marca_vehiculo.

    - codigo_marca: texto --- 3

    - marca_vehiculo: texto --- 20

    El código que estoy utilizando para hacer la búsqueda es el siguiente:

    Private Sub Buscar_Marca()
            Dim consulta As String
            Dim lista As Byte
            Try
                conexion.Open() 'Se abre la coneción de la base de datos

                'Condición que valida si el cuadro de texto esta vacío
                If txtBajaCodigoMarca.Text <> "" Then
                    consulta = "SELECT * FROM marcas WHERE codigo_marca =" & txtBajaCodigoMarca.Text & ""
                  
                    da = New OleDb.OleDbDataAdapter(consulta, conexion)
                    ds = New DataSet
                    da.Fill(ds, "marcas")
                    lista = ds.Tables("marcas").Rows.Count
                    If ds.Tables("marcas").Rows.Count = 0 Then
                        MsgBox("El código ingresado no existe en la Base de Datos", vbCritical, "Error")
                        Call Inicializar() 'Inicializa el formulario después de un error
                    End If
                Else
                    MsgBox("Ingrese el código de la marca", vbExclamation, "Campo Vacío")
                    txtBajaCodigoMarca.Focus()
                End If

                If lista <> 0 Then
                    txtBajaCodigoMarca.Text = ds.Tables("marcas").Rows(0).Item("codigo_marca")
                    txtBajaNombreMarca.Text = ds.Tables("marcas").Rows(0).Item("marca_vehiculo")
                End If

            Catch ex As Exception
                MsgBox(ex.ToString) 'Muestra mensaje de error en caso de existir
            Finally
                conexion.Close() 'Cierra la conexión a la DB
            End Try

        End Sub

    En la tabla MARCAS ingrese 3 registros:

    Al realizar la búsqueda en el formulario para que me muestre el nombre de la marca según el código que ingresé:

    Me muestra el siguiente error:

    El error lo marca en esta parte del código:

    P.D. He intentado hacer la misma búsqueda con ID numéricos, por ejemplo 1, 5, 20, etc. y si me funciona, pero cuando intento con campos TEXTO como TOY, HON, NIS, etc. no me funciona como puede ver.

    Espero me puedan ayudar, de antemano gracias!!!



    • Editado Luis Murga jueves, 8 de marzo de 2018 15:02
    jueves, 8 de marzo de 2018 14:59

Respuestas

  • En principio, el único problema que veo es que te faltan las comillas simples para indicar que el campo es alfanumérico en lugar de numérico:

    consulta = "SELECT * FROM marcas WHERE codigo_marca ='" & txtBajaCodigoMarca.Text & "'"

    Pero dicho eso, hay que señalar que es bastante mala práctica concatenar de esta manera un texto introducido por el usuario en una consulta SQL. Entre otros inconvenientes, tiene el problema de que hace que el programa sea vulnerable ante inyecciones de SQL. La forma de evitarlo es parametrizar la sentencia. No te pongo el ejemplo porque ya se han vertido ríos de tinta sobre el asunto, y hay miles de ejemplos circulando por los foros.

    jueves, 8 de marzo de 2018 16:23