Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

consulta sql

Estas en el tema de consulta sql en el foro de Visual Basic clásico en Foros del Web. tengo un problema. yo estoy trabajando con 2 tablas, una empleados, y otra ciudades, en la tabla de los empleados tengo todos sus datos personales ...
  #1 (permalink)  
Antiguo 19/11/2009, 17:00
 
Fecha de Ingreso: julio-2009
Mensajes: 28
Antigüedad: 14 años, 10 meses
Puntos: 0
consulta sql

tengo un problema.

yo estoy trabajando con 2 tablas, una empleados, y otra ciudades, en la tabla de los empleados tengo todos sus datos personales y tambien se almacena una id de ciudad, que se relaciona con la tabla ciudades en donde estan todas las caracteristicas de las ciudades (codigo postal, codigo de area, nombre de la ciudad, etc...)

Cita:
siendo la primer ciudad registrada:
id-ciudad: 1
nombre: salto
...
Lo que yo quiero es que cuando muestre los resultados de la busqueda, me muestre el nombre de la ciudad, no el codigo que yo le indique en la base de datos empleado.

Cita:
Por Ejemplo:

Nombre: Rodrigo
Apellido: Diaz
Dni: 30214565
direccion: sarmiento 450
Ciudad: Salto
....
PD: estoy utilizando bases de datos ADO desde Visual basic 6

como seria la consulta que se acopla con lo que yo quiero realizar?

Última edición por shin18; 22/11/2009 a las 21:29
  #2 (permalink)  
Antiguo 20/11/2009, 05:22
Avatar de oso_cat  
Fecha de Ingreso: septiembre-2009
Ubicación: Granollers
Mensajes: 18
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: consulta sql

busca información en google sobre SELECT INTO.
Es la manera en la que has de hacer la consulta.
  #3 (permalink)  
Antiguo 20/11/2009, 15:55
 
Fecha de Ingreso: julio-2009
Mensajes: 28
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: consulta sql

gracias por la respuesta, me ayudo, pero tengo un problema, no se como escribirla dentro del VB6....la consulta quedaria asi:

Cita:
rsciu.Open "select 'nom-ciudad', into empleados, from ciudades", dbciu, adOpenDynamic, adLockOptimistic
eso esta mal escrito, pero la verdad no tengo ni idea de como escribirlo
  #4 (permalink)  
Antiguo 21/11/2009, 10:06
Avatar de gogupe  
Fecha de Ingreso: octubre-2006
Ubicación: Mallorca
Mensajes: 897
Antigüedad: 17 años, 6 meses
Puntos: 32
Respuesta: consulta sql

Hola, creo que tienes un poco mal los conceptos de Base de datos.

¿cuando dices dos base de datos, empleados y ciudades?, te refieres a dos tablas dentro de una bd ¿no?, ya que si no lo vería ilógico, usar dos base de datos para tal fin, sería un desastre para programarlo, tendrías que hacer dos conexiones totalmente inutiles.

Luego, como no veo bien la extructura de tus, llamemos tablas, yo te propongo que la hagas asi, es como lo haría yo.

Empleados
id
Nombre
apellidos
dni
direccion
id-ciudad

ciudades
id
ciudad


Para enlazar las dos tablas por el campo ciudad, tienes que usar la sentencia Sql INNER JOIN, que sería la siguiente:

Código:
SELECT * FROM empleados INNER JOIN ciudades ON empleados.id-ciudad = ciudades.id
De esta forma selecionas todo de la dos tablas, relacionado la id de la ciudad, si quieres ser mas preciso, puede usar lo siguiente, para mostrar los datos que realmente quieres.

Código:
SELECT empleados.nombre, empleados.apellidos, empleados.dni, empleados.direccion,ciudades.ciudad FROM empleados INNER JOIN ciudades ON empleados.id-ciudad = ciudades.id
Ahora, la forma de ejecutarlo en VB6, te lo pongo tal cual lo uso yo.

Añade la referencia, haz lo siguiente:
Proyecto-->Referencias-->Microsoft Active Data Objects (la ultima version que tengas)


Código en form
Código:
Private Sub Form_Load()
Set Conexion = New ADODB.Connection
Set Rst = New ADODB.Recordset

Conexion.ConnectionString = "driver={MySQL ODBC 3.51 Driver};server=mi_servidor;uid=usuario_mysql;pwd=password_mysql;database=nombre_base_datos"
Conexion.Open


Rst.ActiveConnection = Conexion
Rst.CursorLocation = adUseClient
Rst.CursorType = adOpenDynamic
Rst.LockType = adLockBatchOptimistic

End Sub
Código de un modulo.bas
Código:
Public Conexion As ADODB.Connection
Public Rst As ADODB.Recordset


Para ejecutar la sentecia que te puse antes, tienes que poner
Código:
if rst.state = 1 then rst.close
rst.open "SELECT ......."

Para que esto te funcione, te tienes que bajar de internet el driver ODBC 3.51 de mysql.

Espero que te sirva si tienes cualquier duda, postea

Saludos.
  #5 (permalink)  
Antiguo 21/11/2009, 10:07
Avatar de gogupe  
Fecha de Ingreso: octubre-2006
Ubicación: Mallorca
Mensajes: 897
Antigüedad: 17 años, 6 meses
Puntos: 32
Respuesta: consulta sql

Me acabo de dar cuenta, que no se si usas mysql o access... evidentemente yo te he pueso el ejemplo de mysql, pero si lo usas para access, tendrías que cambiar algunas cosillas, lo que es la conexión, ahora mismo no me acuerdo como era, ya que practicamente no lo uso, si es tu caso, a ver si alguien te puede ayudar en eso, por lo demas, quedaría igual.

Saludos.
  #6 (permalink)  
Antiguo 21/11/2009, 10:57
 
Fecha de Ingreso: julio-2009
Mensajes: 28
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: consulta sql

gracias por la ayuda voy a intentarlo, tenes razon, son tablas diferentes, me equivoque yo cuando lo quise expresar.
Estoy usando access pero no importa porq se algo basico sobre mysql, y puedo traducirlo a access ^^...la base de datos no es un problema, este esta en vb6 a la hora de mostrar los resultados de la busqueda.

Por ejemplo:

el usuario busca el nombre Juan (asumiendo que se encuentra en la bd) pasa a otro formulario en donde se listan todos los datos de dicho nombre de empleado:
Nombre
apellidos
dni
direccion
(id-ciudad) en vez de que aparezca el id de la ciudad (1 por ejemplo), yo quiero que aparezca el nombre de la ciudad que se encuentra en la tabla "Ciudades", osea Salto
  #7 (permalink)  
Antiguo 21/11/2009, 11:01
Avatar de gogupe  
Fecha de Ingreso: octubre-2006
Ubicación: Mallorca
Mensajes: 897
Antigüedad: 17 años, 6 meses
Puntos: 32
Respuesta: consulta sql

Código:
SELECT empleados.nombre, empleados.apellidos, empleados.dni, empleados.direccion,ciudades.ciudad FROM empleados INNER JOIN ciudades ON empleados.id-ciudad = ciudades.id
Con esta sentencia te asignara cada empleado con su ciudad, hazlo y ya verás como aparece.

Saludos.
  #8 (permalink)  
Antiguo 21/11/2009, 11:16
 
Fecha de Ingreso: julio-2009
Mensajes: 28
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: consulta sql

puse la consulta tal cual como me la pasaste y me dice que
Cita:
"No se han especificado valores para alguno de los parametros requeridos"
  #9 (permalink)  
Antiguo 21/11/2009, 13:13
Avatar de gogupe  
Fecha de Ingreso: octubre-2006
Ubicación: Mallorca
Mensajes: 897
Antigüedad: 17 años, 6 meses
Puntos: 32
Respuesta: consulta sql

Pon el código, para ver como lo has ejecutado, así quizás te pueda ayudar mejor

Un saludo.
  #10 (permalink)  
Antiguo 21/11/2009, 13:49
 
Fecha de Ingreso: julio-2009
Mensajes: 28
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: consulta sql

Cita:
Private Sub cmdbuscar_Click()
rsemp.Close
rsciu.Close
rsprov.Close
rsemp.Open "SELECT * FROM empleados WHERE nombre = '" & txtbuscnom.Text & "'", dbemp
rsciu.Open "SELECT nom-ciudad FROM ciudades WHERE ciudades.id-ciudad = empleados.id-ciudad", dbciu
If Not (rsemp.EOF And rsemp.BOF) Then
Registros.txtnombre.Text = rsemp.Fields("nombre")
Registros.txtapellido.Text = rsemp.Fields("apellido")
Registros.txtdni.Text = rsemp.Fields("dni")
Registros.txtdireccion.Text = rsemp.Fields("direccion")
Registros.cmbciudad = rsciu.Fields("nom-ciudad")
Registros.txttelefono.Text = rsemp.Fields("telefono-fijo")
Registros.txtcelular.Text = rsemp.Fields("celular")
Registros.txtfechanac.Text = rsemp.Fields("fecha-nac")
Registros.txtestadociv.Text = rsemp.Fields("estado-civil")
Registros.txthijos.Text = rsemp.Fields("hijos")
Registros.txtfechaingreso.Text = rsemp.Fields("fecha-ingreso")
txtbuscnom.Text = ""
buscnom.Hide
Unload buscnom
Load Registros
Registros.Show
Registros.SetFocus
Else
MsgBox "No se encontró registro", vbOKOnly, "Fallo en la busqueda"
End If
End Sub
eso es lo q hace cuando se apreta el boton buscar

Cita:
Private Sub Form_Load()
Set dbemp = New Connection
Set rsemp = New Recordset
Set rsciu = New Recordset
Set rsprov = New Recordset

pathDBemp = App.Path & "\prueba.mdb"

dbemp.Open = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & pathDBemp & ";"

rsemp.Source = "empleados"
rsciu.Source = "ciudades"
rsprov.Source = "provincias"

rsemp.CursorType = adOpenDynamic
rsemp.LockType = adLockOptimistic
rsciu.CursorType = adOpenDynamic
rsciu.LockType = adLockOptimistic
rsprov.CursorType = adOpenDynamic
rsprov.LockType = adLockOptimistic

rsemp.Open "select * from Empleados", dbemp
rsciu.Open "select * from ciudades", dbemp
rsprov.Open "select * from provincias", dbemp
End Sub
y eso es cuando carga el formulario


PD: Aclaro, q tengo 3 tablas Empleados, Ciudades y provincias, yo solo pedi ayuda con la de ciudades porq despues para la otra es lo mismo, y tambien tengo mas campos en empleados solo que puse un par nada mas para no hacerlo tan largo ya q no son de importancia los otros
  #11 (permalink)  
Antiguo 21/11/2009, 16:07
Avatar de gogupe  
Fecha de Ingreso: octubre-2006
Ubicación: Mallorca
Mensajes: 897
Antigüedad: 17 años, 6 meses
Puntos: 32
Respuesta: consulta sql

Esta búsqueda la tienes mal escrita, del botón buscar.
rsciu.Open "SELECT nom-ciudad FROM ciudades WHERE ciudades.id-ciudad = empleados.id-ciudad", dbciu

empleados.id-ciudad no sabe de donde viene, tienes que usar el INNER JOIN, tal como te lo puse anteriormente.
SELECT ciudades.nom-ciudad FROM ciudades INNER JOIN empleados ON ciudades.id=empleados.id-ciudad

Con Inner join, lo que haces es unir dos tablas (o varias) por un campo o id en común, en este caso la id de ciudad.

Prueba a ver si va a estar ahí el fallo.

Saludos.
  #12 (permalink)  
Antiguo 21/11/2009, 17:36
 
Fecha de Ingreso: julio-2009
Mensajes: 28
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: consulta sql

ahora tengo otro problema, "Argumentos incorrectos, fuera de intervalos permitidos o en conflicto con otros"

La consulta quedo asi :

Cita:
rsciu.Open "SELECT Ciudades.nom-ciudad FROM Ciudades INNER JOIN Empleados ON ciudades.id-ciudad = empleados.id-ciudad", dbciu
  #13 (permalink)  
Antiguo 21/11/2009, 17:48
Avatar de gogupe  
Fecha de Ingreso: octubre-2006
Ubicación: Mallorca
Mensajes: 897
Antigüedad: 17 años, 6 meses
Puntos: 32
Respuesta: consulta sql

Ufff, eso ya se me sale... no se por donde puede salir esto, si alguien puede echar una mano !!!
  #14 (permalink)  
Antiguo 22/11/2009, 12:06
 
Fecha de Ingreso: julio-2009
Mensajes: 28
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: consulta sql

mmmm ahi, corregi un error que tenia la sentencia, y ahora me dice "No se han especificado valores para algunos de los parametros requeridos"

Igual que me decia antes :S
  #15 (permalink)  
Antiguo 29/11/2009, 17:44
 
Fecha de Ingreso: enero-2007
Mensajes: 1
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: consulta sql

Tu sentencia sql esta mal. Y veo que estás usando en el código 2 recorsets? porqué?
Tienes que usar solamente uno, ya que la consulta bien hecha trae toda la informacion que necesitas.

Y ademas no uses inner join, simplemente puedes usar JOIN.

La query quedaria asi:

SELECT empleados.Nombre, empleados.apellidos, empleados.dni, empleados.direccion, ciudades.nombre AS NomCiudad FROM empleados JOIN ciudades ON (empleados.id-ciudad = ciudades.id)

Luego, si te fijas en la query el nombre de la ciudad lo traes con un alias "NomCiudad", que lo usarás más tarde en tu codigo:

Código:
Registros.cmbciudad = nombre_recordset.Fields("NomCiudad")
Recuerda:
  • Los parentesis luego del "ON"
  • Respetar mayusculas/minusculas en los nombres de los campos/tablas tal cual has definido en tu base de datos.


Prueba y nos cuentas.

Saludos!


Cita:
Iniciado por shin18 Ver Mensaje
mmmm ahi, corregi un error que tenia la sentencia, y ahora me dice "No se han especificado valores para algunos de los parametros requeridos"

Igual que me decia antes :S
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:05.