none
Error en consulta SQL desde visual studio 2010 ! RRS feed

  • Pregunta

  • Buenas

    Tengo una base de datos en donde almaceno los telefonos de clientes ( fijo, miovil, y de trabajo)

    deseo hacer una consulta en la que introduciendo parte de algun telefono, me aparezcan las coincidencias con esa parte en los tres campos, es decir que me aparezcan todos los registros que tienen coincidencia con esa parte en al menos uno de los tres campos. lo hago asi .

    "SELECT * FROM Clientes WHERE Tel-fijo LIKE '%" & CInt(texto) & "%' or Tel-Movil LIKE '%" & CInt(texto) & "%' or Tel-trabajo LIKE '%" & CInt(texto) & "%'"


    Pero esta consulta me da un error de "No se han especificado valores para algunos de los parámetros requeridos."!,

    Si solo introduzco un campo a consultar va bien

    "SELECT * FROM Clientes WHERE Tel-fijo LIKE '%" & CInt(texto) & "%'

    En que falla la primera consulta? , o como hacer para que mire en los tres campos ?

    Gracias por vuestras respuestas



    • Editado Antogi lunes, 9 de junio de 2014 21:37
    lunes, 9 de junio de 2014 21:30

Respuestas

  •   

    SI SOLUCIONO TU PROBLEMA NO OLVIDES MARCAR COMO RESPUESTA Y VOTAR COMO UTIL 

      Dim cnn As OleDbConnection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;data Source=" & UbiBaseDatos & "BD-prueba.accdb")
            Dim sql As String = "SELECT * FROM Clientes WHERE Tel-fijo LIKE '%'+ @tel +'%' or Tel-Movil LIKE '%' + @tel + '%' or Tel-trabajo LIKE '%' + @tel +'%'"
            Dim comando As OleDbCommand = New OleDbCommand(sql, cnn)
            comando.Parameters.Clear()
            comando.Parameters.AddWithValue("@tel", TextBox1.text)
            Dim dt As DataTable = New DataTable()
            Dim da As OleDbDataAdapter = New OleDbDataAdapter(comando)
            da.fill(dt)



    EFRAIN MEJIAS C VALENCIA - VENEZUELA


    martes, 10 de junio de 2014 21:26
  • Muchiiiisimas Gracias a Todos, entre todos lo hemos solucionado, el problema despues de hacer muchos ensallos, es que el nombre del registro en access es "tel-movil" y "Tel-Trabajo"  y parece ser que al hacer la consulta sql NO le gusta nada el "-" en el nombre

    He cambiado los nombres de registro a "TelMovil" y Teltrabajo"  y funcionas TODAS !! las alternativas, incluida la primera que NO usaba parametros....

    Muchas gracias a todos !!!

    • Marcado como respuesta Antogi miércoles, 11 de junio de 2014 14:13
    miércoles, 11 de junio de 2014 14:13

Todas las respuestas

  •  SI SOLUCIONO TU PROBLEMA NO OLVIDES MARCAR COMO RESPUESTA Y VOTAR COMO UTIL     

    pruebalo de esta manera

     "SELECT * FROM Clientes WHERE Tel-fijo LIKE '%" & CInt(texto) & "%' " & " or Tel-Movil  LIKE '%" & CInt(texto) & "%' " & " or Tel-trabajo LIKE '%" & CInt(texto) & "%' "


    EFRAIN MEJIAS C VALENCIA - VENEZUELA


    lunes, 9 de junio de 2014 22:59
  • hola

    porque casteas el texto a int si depsues lo unes en uan carpeta para armar el string que al query sql

    que base de datos utilizar ? y porque no usas parametros

    DataTable dt = new DataTable();  
    using (SqlConnection conn = new SqlConnection("connection string"))  
    {  
        string query = "SELECT * FROM Clientes WHERE Tel-fijo LIKE '%'+ @tel +'%' or Tel-Movil LIKE '%' + @tel + '%' or Tel-trabajo LIKE '%' + @tel +'%'";  
        SqlCommand cmd = new SqlCommand(query, conn);  
        cmd.Parameters.AddWithValue("@tel", txtTextoBuscar.Text);  
    
        SqlDataAdapter da = new SqlDataAdapter(cmd);    
        da.Fill(dt);  
    
    }
    

    usa siempre parametros

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 10 de junio de 2014 0:01
  • Gracias por tu respuesta Efrain, ya lo probe, y me tira el mismo error !
    martes, 10 de junio de 2014 20:53
  • Gracias Leandro, esto es lo que estoy intentando, pero aun NO lo he conseguiido :-(

    Me pones el código en C+ ( creo)

    Serias tan amable de hacerlo en Visual Basic... yo lo hago asi, ( sin parametros, pero ya he leido que para evitar inyeccion sql y errores etc. es mejor hacerlo por parametros, pero aun estoy en ello!)

    'Dim cnn As New OleDb.OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0;data Source=" & UbiBaseDatos & "BD-prueba.accdb")
            'Dim sql As String = cadena
            'Dim da As New OleDb.OleDbDataAdapter(sql, cnn)
            'Dim cb As New OleDb.OleDbCommandBuilder(da)
            'Dim dt As New DataTable("Clientes")

    da.fill(dt)

    en cadena pongo el valor que poni en el primer post es decir

    Dim cadena As String = "SELECT * FROM Clientes WHERE Telefono LIKE '%" & texto & "%' or tel-movil LIKE '%" & texto & "%' or tel-trab LIKE '%" & texto & "%'"

    Como ves he quitado lo de Cint(), lo puse para hacer pruebas...


    • Editado Antogi martes, 10 de junio de 2014 21:07
    martes, 10 de junio de 2014 21:06
  •   

    SI SOLUCIONO TU PROBLEMA NO OLVIDES MARCAR COMO RESPUESTA Y VOTAR COMO UTIL 

      Dim cnn As OleDbConnection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;data Source=" & UbiBaseDatos & "BD-prueba.accdb")
            Dim sql As String = "SELECT * FROM Clientes WHERE Tel-fijo LIKE '%'+ @tel +'%' or Tel-Movil LIKE '%' + @tel + '%' or Tel-trabajo LIKE '%' + @tel +'%'"
            Dim comando As OleDbCommand = New OleDbCommand(sql, cnn)
            comando.Parameters.Clear()
            comando.Parameters.AddWithValue("@tel", TextBox1.text)
            Dim dt As DataTable = New DataTable()
            Dim da As OleDbDataAdapter = New OleDbDataAdapter(comando)
            da.fill(dt)



    EFRAIN MEJIAS C VALENCIA - VENEZUELA


    martes, 10 de junio de 2014 21:26
  • Gracias por tu rapida Respuesta Efrain,

    Despues de introducir tu código, me sigue tirando el error

    "No se han especificado valores para algunos de los parametros requeridos"

    No lo consigo !

    martes, 10 de junio de 2014 22:49
  • Hola:

     ¿Y en el textbox TBBuscar estas introduciendo datos?


    Saludos desde Monterrey, Nuevo León, México!!!

    martes, 10 de junio de 2014 22:56
  • asegurate de que en TBBuscar no este vacio .....por que lo que dice el error es que tu parametro @tel  no se le a asignado ningum valor

    aunque como es una DB acces ,aveces las consultas se ponen ridiculas intenta asi

    Dim cnn As OleDbConnection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;data Source=" & UbiBaseDatos & "BD-prueba.accdb")
            Dim sql As String = "SELECT * FROM Clientes WHERE Tel-fijo LIKE '%'+ @tel1 +'%' or Tel-Movil LIKE '%' + @tel2 + '%' or Tel-trabajo LIKE '%' + @tel3 +'%'"
            Dim comando As OleDbCommand = New OleDbCommand(sql, cnn)
            comando.Parameters.Clear()
            comando.Parameters.AddWithValue("@tel1", TBBuscar.text)
           comando.Parameters.AddWithValue("@tel2", TBBuscar.text)
          comando.Parameters.AddWithValue("@tel3", TBBuscar.text)
            Dim dt As DataTable = New DataTable()
            Dim da As OleDbDataAdapter = New OleDbDataAdapter(comando)
            da.fill(dt)


    EFRAIN MEJIAS C VALENCIA - VENEZUELA



    martes, 10 de junio de 2014 23:50
  • Una vez mas gracias por tu respuesta,

    Si, por supuesto que el textbox "TBBuscar" tiene contenido, he ingresado los últimos cambios, y sigue sin funcionar, da el mismo error...

     Estoy por hacerlo filtrando el datagrid con código en Visual, es mas lento, pero Funciona !!!

    miércoles, 11 de junio de 2014 13:25
  • Es muy raro que te este devolviendo ese error....

    prueba  pasando un telefono que exista en la base de datos , asi el parametro no esta vacio haber si devuelve bien ,o es otro error

         
            

    Dim Telefono As String ="04127653185"

    Dim cnn As OleDbConnection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;data Source=" & UbiBaseDatos & "BD-prueba.accdb") Dim sql As String = "SELECT * FROM Clientes WHERE Tel-fijo LIKE '%'+ @tel +'%' or Tel-Movil LIKE '%' + @tel + '%' or Tel-trabajo LIKE '%' + @tel +'%'" Dim comando As OleDbCommand = New OleDbCommand(sql, cnn) comando.Parameters.Clear() comando.Parameters.AddWithValue("@tel", Telefono) Dim dt As DataTable = New DataTable() Dim da As OleDbDataAdapter = New OleDbDataAdapter(comando) da.fill(dt)


    EFRAIN MEJIAS C VALENCIA - VENEZUELA


    miércoles, 11 de junio de 2014 13:46
  • Hola Antogi:

     Copia la consulta al Access y cambia los parámetros por los valores tal cual como lo estas ingresando al TextBox solo que entre comillas simples, ejecuta la consulta y valida si te devuelve datos.

     Prueba también limpiar tu solución y luego generala de nuevo para que las dlls se actualicen....


    Saludos desde Monterrey, Nuevo León, México!!!

    miércoles, 11 de junio de 2014 13:48
  • Muchiiiisimas Gracias a Todos, entre todos lo hemos solucionado, el problema despues de hacer muchos ensallos, es que el nombre del registro en access es "tel-movil" y "Tel-Trabajo"  y parece ser que al hacer la consulta sql NO le gusta nada el "-" en el nombre

    He cambiado los nombres de registro a "TelMovil" y Teltrabajo"  y funcionas TODAS !! las alternativas, incluida la primera que NO usaba parametros....

    Muchas gracias a todos !!!

    • Marcado como respuesta Antogi miércoles, 11 de junio de 2014 14:13
    miércoles, 11 de junio de 2014 14:13