none
Problema "La expresion JOIN no se admite" Visual basic RRS feed

  • Pregunta


  •  Public Sub buscar(ByRef juego As String)
    
            cmd.Connection = conn
            cmd.CommandType = CommandType.Text
    
            If juego <> "" Then
                cmd.CommandText = "SELECT * FROM JUEGOS WHERE NOMBRE='" + juego + "'"
                Try
                    dr = cmd.ExecuteReader
    
                    If dr.HasRows Then
                        While dr.Read()
                            buscarAlquilado(dr(0))
                            FrmBuscar.Label4.Text = dr(0)
                            FrmBuscar.Label5.Text = dr(1)
                            FrmBuscar.Label6.Text = dr(2)
                            FrmBuscar.Label7.Text = dr(3)
                            FrmBuscar.Label8.Text = dr(4)
                            FrmBuscar.Label9.Text = dr(5)
                        End While
                    Else
                        MsgBox("No Tenemos el juego")
    
                    End If
    
                    dr.Close()
    
                Catch ex As Exception
                    MsgBox(ex.Message)
    
                End Try
            Else
                MsgBox("Ingrese un juego")
            End If
    
           
        End Sub
    
    
    
        Public Sub buscarAlquilado(ByRef idJuego As String)
    
            cmd2.Connection = conn
            cmd2.CommandType = CommandType.Text
    
            If idJuego <> "" Then
                cmd2.CommandText = "SELECT Nombre, apellido FROM CLIENTES INNER JOIN Alquilados ON idjuego='" + idJuego + "'"
                Try
                    dataread = cmd2.ExecuteReader
    
                    If dataread.HasRows Then
                        FrmBuscar.ListBox1.Items.Clear()
                        While dataread.Read()
                            FrmBuscar.ListBox1.Items.Add(dataread(0).ToString + " " + dataread(1).ToString)
                        End While
                    Else
                        FrmBuscar.ListBox1.Items.Add("No esta alquilado el juego")
    
                    End If
    
                    dataread.Close()
    
                Catch ex As Exception
                    MsgBox(ex.Message)
    
                End Try
    
            End If
    
    
        End Sub

    hola, estoy realizando un proyecto para la escuela y tengo que realizar un programa de un alquiler de videojuegos, para esto trabajo con una base de datos de 3 tablas en access. Mi intención es hacer una función que busque un juego en una tabla de datos por el nombre, me devuelva sus datos (función buscar) y también me devuelva en una listbox, los usuarios que tengan alquilado ese juego (funcion BuscarAlquilados), para esto decidí usar INNER JOIN, pero al momento de utilizarlo me tira como error: "La expresión JOIN no se admite".

    ¿Alguno me podría decir cual seria el error? El resto de los datos me los devuelve sin ningún problema

    Muchas gracias,

    Saludos 0daluc026

     
    lunes, 2 de mayo de 2016 11:52

Respuestas

  • Cuando haces una INNER JOIN para relacionar dos tablas en una consulta en la cláusula ON debes indicar los campos a través de los cuales se relacionan las tablas. La condición de filtrado (en tu caso idjuego=...) seguiría estando en la cláusula WHERE.

    Por ejemplo si la tabla CLIENTES tiene una clave principal idCliente para identificar a cada cliente, en la tabla ALQUILADOS debería existir un campo que identificara el cliente que ha alquilado el juego (que podría llamarse igual: idCliente).

    De esta forma la consulta te quedaría:

    cmd2.CommandText = "SELECT CLIENTES.Nombre, CLIENTES.apellido" & _
      " FROM CLIENTES" & _
      " INNER JOIN Alquilados ON CLIENTES.idCliente = Alquilados.idCliente" & _
      " WHERE idjuego='" + idJuego + "'"
    
    


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    lunes, 2 de mayo de 2016 12:16

Todas las respuestas

  • Cuando haces una INNER JOIN para relacionar dos tablas en una consulta en la cláusula ON debes indicar los campos a través de los cuales se relacionan las tablas. La condición de filtrado (en tu caso idjuego=...) seguiría estando en la cláusula WHERE.

    Por ejemplo si la tabla CLIENTES tiene una clave principal idCliente para identificar a cada cliente, en la tabla ALQUILADOS debería existir un campo que identificara el cliente que ha alquilado el juego (que podría llamarse igual: idCliente).

    De esta forma la consulta te quedaría:

    cmd2.CommandText = "SELECT CLIENTES.Nombre, CLIENTES.apellido" & _
      " FROM CLIENTES" & _
      " INNER JOIN Alquilados ON CLIENTES.idCliente = Alquilados.idCliente" & _
      " WHERE idjuego='" + idJuego + "'"
    
    


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    lunes, 2 de mayo de 2016 12:16
  • Muchas gracias, hice lo que me dijiste y le cambie a idJuego por integer, ahora el problema es que me dice es: "La conversión de la cadena "SELECT CLIENTES.nombre, CLIENTES" en el tipo 'double' no es valida." Pero yo nunca declare nada como double, a que se puede venir el error??

    Cuando depuro paso a paso, al momento de hacer el select, me redirige al error del try de la función buscar.

        Public Sub buscarAlquilado(ByRef idJuego As Integer)
    
            cmd2.Connection = conn
            cmd2.CommandType = CommandType.Text
    
            If IsNumeric(idJuego) Then
                cmd2.CommandText = "SELECT CLIENTES.Nombre, CLIENTES.Apellido FROM CLIENTES INNER JOIN Alquilados ON CLIENTES.idCliente = Alquilados.idCliente WHERE Alquilados.idjuego='" + idJuego + "'"
                'cmd2.CommandText = "SELECT CLIENTES.Nombre, CLIENTES.apellido" & _
                '" FROM CLIENTES" & _
                ' " INNER JOIN Alquilados ON CLIENTES.idCliente = Alquilados.idCliente" & _
                ' " WHERE idjuego=" + idJuego
                MsgBox(cmd2.CommandText)
                Try
                    dataread = cmd2.ExecuteReader
    
                    If dataread.HasRows Then
                        FrmBuscar.ListBox1.Items.Clear()
                        While dataread.Read()
                            FrmBuscar.ListBox1.Items.Add(dataread(0).ToString + " " + dataread(1).ToString)
                        End While
                    Else
                        FrmBuscar.ListBox1.Items.Add("No esta alquilado el juego")
    
                    End If
    
                    dataread.Close()
    
                Catch ex As Exception
                    MsgBox(ex.Message)
    
                End Try
    
            End If

    Muchas gracias de antemano,

    Saludos,

    Daluc

    martes, 3 de mayo de 2016 14:24