Principales respuestas
Problema "La expresion JOIN no se admite" Visual basic

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
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 .NETPíldoras JS
Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...- Marcado como respuesta Enrique M. MontejoModerator martes, 3 de mayo de 2016 14:21
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 .NETPíldoras JS
Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...- Marcado como respuesta Enrique M. MontejoModerator martes, 3 de mayo de 2016 14:21
-
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