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

Datos de combo a combo

Estas en el tema de Datos de combo a combo en el foro de Visual Basic clásico en Foros del Web. Hola Como se haria para que cuando yo seleccione una provincia que tengo en un combo, me aparezcan la ciudades que tengo asignadas a ella ...

  #1 (permalink)  
Antiguo 27/04/2010, 03:46
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
Datos de combo a combo

Hola

Como se haria para que cuando yo seleccione una provincia que tengo en un combo, me aparezcan la ciudades que tengo asignadas a ella en otro combo

Saludos
  #2 (permalink)  
Antiguo 27/04/2010, 03:59
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 5 meses
Puntos: 13
Respuesta: Datos de combo a combo

Hola

Depende de donde tengas los datos, si los tienes en una BD, con una consulta SQL en un recordset y luego recorrerla llenando el 2º combo.

Si no los tienes guardados en ningún sitio, no te queda mas remedio que con un select case ir añadiéndolos al combo de uno en uno

Código vb:
Ver original
  1. Private Sub Combo1_Click()
  2. Select Case Combo1.text
  3.    Case "Provincia1"
  4.       combo2.clear
  5.       Combo2.additem "Pueblo1"
  6.       Combo2.additem "Pueblo2"
  7.       Combo2.additem "Pueblon"
  8.    Case "Provincia2"
  9.       ...
  10. End Select

--Saludos--
  #3 (permalink)  
Antiguo 27/04/2010, 04:05
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
Respuesta: Datos de combo a combo

Lo tengo todo en una base de datos, lo que he echo a sido primero llenar un combo con la tabla provincias desde el form. Y lo que tengo que hacer es cuando seleccione una provincia, supongamos Madrid, pues me tiene que salir en el otro combo la ciudades que tengo asignadas a la provincia de madrid (getafe,parla,alcorcon...etc)

saludos
  #4 (permalink)  
Antiguo 27/04/2010, 05:16
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 5 meses
Puntos: 13
Respuesta: Datos de combo a combo

Hola

En ese caso es la misma idea pero trabajando con un recordset en el evento click del combo1

Código vb:
Ver original
  1. Private Sub Combo1_Click()
  2.  
  3. Dim reg As New ADODB.Recordset
  4. Dim SQL As String
  5.  
  6. SQL = "Select Ciudad from Tabla1 WHERE Provincia ='" & combo1.text & "'" 'Creas la sentencia SQL
  7.  
  8. reg.open SQL, bd 'Abres recordset, bd es la conexión a la bd
  9.  
  10. combo2.clear 'Para que no añada a los existentes
  11.  
  12. While not reg.eof 'Mientras no finalice el recorset
  13.   combo2.additem reg.fields(0) 'Añades uno de los registros al combo2
  14.   reg.movenext 'Pasas al siguiente registro del recorset
  15. Wend

--Saludos--
  #5 (permalink)  
Antiguo 27/04/2010, 05:30
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
Respuesta: Datos de combo a combo

Hola

Yo lo estaba haciendo asi dado que la base de datos es de acces:

Código vb:
Ver original
  1. Set rsCiudad2 = New Recordset
  2. 'Establecer sus propiedades
  3.    With rsCiudad2
  4.         .Source = "select ciudad from ciudad2"
  5.         .ActiveConnection = cnPrueba
  6.         .LockType = adLockOptimistic
  7.     End With
  8. rsCiudad2.Open Options:=adCmdText
  9. 'Añadimos la tabla de ciudad al combo1
  10.    Do Until rsCiudad2.EOF()
  11.     Combo1.AddItem rsCiudad2!ciudad
  12.     rsCiudad2.MoveNext
  13.     Loop

El combo de ciudad esta vacio cuando se inicia la aplicacion, cuando hago click en una provincia me aparece todas la ciudades que tengo(hay esta echa la mitad), lo k me falta es un Where en la sentencia y no se si algun if pero como ponerlo.

saludos

pd:he probado el tuyo y lo he adaptado al mio y no me iba no se si sera porque lo puse mal, pero te dejo el mio que es el k yo entiendo mas espero que no te importe.
  #6 (permalink)  
Antiguo 27/04/2010, 05:44
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
Respuesta: Datos de combo a combo

Una cosa que se me olvido decir no se si tiene importancia o no, pero los campos que tiene ciudad son : idciudad(autonumerico)idprovincia(se asigna automaticamente desde otro form en el que inserto los datos) y ciudad
  #7 (permalink)  
Antiguo 27/04/2010, 07:16
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
Respuesta: Datos de combo a combo

He echo esto pero me da error:

Código vb:
Ver original
  1. Set rsCiudad2 = New Recordset
  2. 'Establecer sus propiedades
  3.    With rsCiudad2
  4.         .Source = "select ciudad from ciudad2 where provincias = '" & Combo1.Text & "'"
  5.         .ActiveConnection = cnPrueba
  6.         .LockType = adLockOptimistic
  7.     End With
  8. ***rsCiudad2.Open Options:=adCmdText***
  9. 'Añadimos la tabla de ciudad al combo1
  10.    Do Until rsCiudad2.EOF()
  11.     Combo1.AddItem rsCiudad2!ciudad
  12.     rsCiudad2.MoveNext
  13.     Loop

Me señala el objeto marcado y dice: No se han espicificado valores para algunos de los parametros requeridos

saludos
  #8 (permalink)  
Antiguo 27/04/2010, 08:30
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 5 meses
Puntos: 13
Respuesta: Datos de combo a combo

Hola

No entiendo que es "Options:=adCmdText", que intentas pasar al recordset?. Además veo que añades los datos al combo1, no sería al combo2?

--Saludos--
  #9 (permalink)  
Antiguo 27/04/2010, 08:37
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
Respuesta: Datos de combo a combo

Hola es el combo uno porque provincias esta en el combo2 y ciudad en el combo1
el "Options:=adCmd" yo la verdad es que tampoco se muy bien para que sirve pero siempre lo pongo, he mirado un comentario que hay en un libro y dice que abre el conjunto de registros.

Si esto no te aclara nada dime como lo harias tu pero con una base de datos de acces y no de sql.

Saludos y gracias por estar ayudandome
  #10 (permalink)  
Antiguo 27/04/2010, 09:58
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 5 meses
Puntos: 13
Respuesta: Datos de combo a combo

Hola

Si provincias esta en combo2, creo que tienes mal la select ya que pones provincias = combo1 y debería de ser combo2.
Además quita "Options:=adCmdText" y pruba.

P.D.: Que la bd sea access o SQL, en realidad no cambia casi nada, solo la cadena de conexión a la bd y alguna cosilla en las select, lo que ocurre es que hay distintas formas de hacerlo, por ejemplo, para abrir el recordset lo puedes hacer en una sola linea
Cita:
rsCiudad2.Open "select ciudad from ciudad2 where provincias = '" & Combo2.Text & "'", cnPrueba, adOpenStatic, adLockOptimistic
Es exactamente lo mismo que haces tu en tu código pero de otra forma.

--Saludos--

--Saludos--
  #11 (permalink)  
Antiguo 27/04/2010, 12:46
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
Respuesta: Datos de combo a combo

Me sigue dando error pero ahora (en lo marcado):

Código vb:
Ver original
  1. Set rsCiudad2 = New Recordset
  2. 'Establecer sus propiedades
  3.    With rsCiudad2
  4.     *** rsCiudad2.Open "select ciudad from ciudad2 where provincias = '" & Combo2.Text & "'", cnPrueba, adOpenStatic, adLockOptimistic ***
  5.     End With
  6. rsCiudad2.Open
  7. 'Añadimos la tabla de ciudad2 al combo1
  8.    Do Until rsCiudad2.EOF()
  9.     Combo1.AddItem rsCiudad2!ciudad
  10.     rsCiudad2.MoveNext
  11.     Loop
  #12 (permalink)  
Antiguo 28/04/2010, 01:57
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 5 meses
Puntos: 13
Respuesta: Datos de combo a combo

Hola

Tienes el recordset bien declarado y la conexión a la bd (cnPrueba) bien declarado y conectado?. El error que te da sigue siendo el mismo? (No se han espicificado valores para algunos de los parametros requeridos)

Revisa también si la sentencia SQL es correcta (los campos tienen esos nombres,...)

P.D.: Al cambiar el código, y poner todo el recordset en una sola linea, las lineas "With rsCiudad2" y "End With" te sobran

--Saludos--
  #13 (permalink)  
Antiguo 28/04/2010, 02:04
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
Respuesta: Datos de combo a combo

Si quito el with rsCiudad2 y el end with me da error de referencia no valida y sin clasificar. Ahora he echo esto y me da error: No se encontro el elemento en la coleccion que corresponde con el nombre o el original de pedido y me señala (***):

Código vb:
Ver original
  1. Set rsCiudad2 = New Recordset
  2. 'Establecer sus propiedades
  3. With rsCiudad2
  4.     .CursorLocation = adUseClient
  5.     .Open "select idprovincias from provincias where provincias='" & Combo2.Text & "'", cnPrueba, adOpenDynamic, adLockOptimistic
  6. End With
  7. 'Añadimos la tabla de ciudad2 al combo1
  8. Do Until rsCiudad2.EOF()
  9. ***Combo1.AddItem rsCiudad2!ciudad***
  10. rsCiudad2.MoveNext
  11. Loop

He probado cambiando rsCiudad2!ciudad a rsCiudad2!idprovincia o id ciudad y me quita el error pero lo que añade son los id de los que tengo en la base de datos.
Cita:
Tienes el recordset bien declarado y la conexión a la bd (cnPrueba) bien declarado y conectado?.
Si porque la demas cosas que he echo con esa conexion me van perfectamente te lo pongo aqui para que lo veas:

Código vb:
Ver original
  1. Option Explicit
  2. Public cnPrueba As Connection
  3. Public rsTbl_Direccion As Recordset
  4. Public rsciudad As Recordset
  5. Public rsProvincias As Recordset
  6. Public rsCiudad2 As Recordset
  7.  
  8. Set cnPrueba = New Connection
  9. 'Establecer sus propiedades
  10.     With cnPrueba
  11.         .Provider = "Microsoft.Jet.oledb.4.0"
  12.         .ConnectionString = "prueba.mdb"
  13.     End With
  14. cnPrueba.Open


Saludos

Última edición por Sergio18; 28/04/2010 a las 02:10
  #14 (permalink)  
Antiguo 28/04/2010, 02:24
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
Respuesta: Datos de combo a combo

Olvidate de lo del error no se porque lo he puesto, he puesto los datos de provincias en ciudad2, la mañana me afecta.

Cita:
Revisa también si la sentencia SQL es correcta (los campos tienen esos nombres,...)
Si tambien acabo de mirar eso y de mede provincias tedrias que ser idprovincia.
He puesto esto y me dice : "No se puede utilizar esta conexion para realizar esta operacion.Esta cerrada o no es valida para este contexto"

Código vb:
Ver original
  1. Set rsCiudad2 = New Recordset
  2. 'Establecer sus propiedades
  3. With rsCiudad2
  4.     .CursorLocation = adUseClient
  5.     .Open "select ciudad from ciudad2 where idprovincia = '" & Combo2.Text & "', cnPrueba, adOpenDynamic, adLockOptimistic"
  6. End With
  7. 'Añadimos la tabla de ciudad2 al combo1
  8. Do Until rsCiudad2.EOF()
  9. Combo1.AddItem rsCiudad2!ciudad
  10. rsCiudad2.MoveNext
  11. Loop

Nota: Los campos de ciudad2 son : idciudad,idprovincia y ciudad

Saludos
  #15 (permalink)  
Antiguo 28/04/2010, 02:57
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 5 meses
Puntos: 13
Respuesta: Datos de combo a combo

Hola

El mensaje de error esta vez es bastante claro, no tienes abierta la conexión con la bd, es decir, no has abierto cnPrueba

--Saludos--
  #16 (permalink)  
Antiguo 28/04/2010, 03:00
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
Respuesta: Datos de combo a combo

si esta abierta te pongo todo el codigo:

Código vb:
Ver original
  1. Option Explicit
  2. Public cnPrueba As Connection
  3. Public rsTbl_Direccion As Recordset
  4. Public rsciudad As Recordset
  5. Public rsProvincias As Recordset
  6. Public rsCiudad2 As Recordset
  7.  
  8. Private Sub Combo2_Click()
  9. Set cnPrueba = New Connection
  10. 'Establecer sus propiedades
  11. With cnPrueba
  12. .Provider = "Microsoft.Jet.oledb.4.0"
  13. .ConnectionString = "prueba.mdb"
  14. End With
  15. cnPrueba.Open
  16. 'Crear un conjunto de registros desde la tabla Ciudad2
  17. Set rsCiudad2 = New Recordset
  18. 'Establecer sus propiedades
  19. With rsCiudad2
  20.     .CursorLocation = adUseClient
  21.     .Open "select ciudad from ciudad2 where idprovincia = '" & Combo2.Text & "', cnPrueba, adOpenDynamic, adLockOptimistic"
  22. End With
  23. 'Añadimos la tabla de ciudad2 al combo1
  24. Do Until rsCiudad2.EOF()
  25. Combo1.AddItem rsCiudad2!ciudad
  26. rsCiudad2.MoveNext
  27. Loop
  28. End Sub

saludos
  #17 (permalink)  
Antiguo 28/04/2010, 03:21
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 5 meses
Puntos: 13
Respuesta: Datos de combo a combo

Hola

Creo que la linea de la select no es correcta

Cita:
.Open "select ciudad from ciudad2 where idprovincia = '" & Combo2.Text & "', cnPrueba, adOpenDynamic, adLockOptimistic"
Debería de ser:

Código vb:
Ver original
  1. .Open "select ciudad from ciudad2 where idprovincia = '" & Combo2.Text & "'", cnPrueba, adOpenDynamic, adLockOptimistic

Es decir, después de la comilla simple tienes que poner las dobles comillas, y no después del adLockOptimistic

P.D.: Casi me quedo ciego revisando el código, espero que sea de esto

--Saludos--
  #18 (permalink)  
Antiguo 28/04/2010, 03:26
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
Respuesta: Datos de combo a combo

Jjajaja yo creo que tambien estoy a punto de quedarme ciego, la comilla se me pusieron solas hay, ya lo he cambiado poniendo tu codigo pero me da otro error diferente: "No coinciden los tipos de datos en la expresion de criterios" y me señala el codigo del ".open "Select...."

Siento molestarte tanto pero te lo agradezco mucho

Saludos
  #19 (permalink)  
Antiguo 28/04/2010, 03:44
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 5 meses
Puntos: 13
Respuesta: Datos de combo a combo

Hola

Creo que puede ser un error en el concepto de la SQL, que tipo de datos guardas en idprovincia, porque si guardas valores numéricos la sentencia SQL tiene que ir sin comillas simples, es decir:

- Valores texto --> entre comillas simples
- Numeros --> Sin nada
- Fechas entre almohadillas

Cita:
idprovincia = " & Combo2.Text , cnPrueba, adOpenDynamic, adLockOptimistic
Pero luego viene el problema de la que tienes en el combo2 que si es texto, no lo puedes comparar con número.

--Saludos--
  #20 (permalink)  
Antiguo 28/04/2010, 03:50
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
Respuesta: Datos de combo a combo

El id es numerico y proviene de unos datos que inserto yo en otro form que he puesto en este foro se llama 'insertar y añadir' (a lo mejor te sirve de algo), y en el combo efectivamente es numerico. Yo estoy echo un lio

Saludos
  #21 (permalink)  
Antiguo 28/04/2010, 04:04
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 5 meses
Puntos: 13
Respuesta: Datos de combo a combo

Si los dos valores son numéricos (el de la tabla y el del combo) no hay ningún problema, la select sería sin las comillas simples

Cita:
.Open "select ciudad from ciudad2 where idprovincia = " & Combo2.Text, cnPrueba, adOpenDynamic, adLockOptimistic
CONSEJO: Si tienes dudas con la select, lo mejor es guardar la select en una variable de texto, poner un punto de interrupción y ver el valor que toma, luego copias esa consulta en access y la ejecutas.

--Saludos--
  #22 (permalink)  
Antiguo 28/04/2010, 04:21
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
Respuesta: Datos de combo a combo

Creo que te referias a esto no estoy muy seguro te pongo lo que he añadido:

Código vb:
Ver original
  1. Dim idprovincia As Long
  2. Set cnPrueba = New Connection
  3. 'Establecer sus propiedades
  4. With cnPrueba
  5. .Provider = "Microsoft.Jet.oledb.4.0"
  6. .ConnectionString = "prueba.mdb"
  7. End With
  8. cnPrueba.Open
  9. 'Crear un conjunto de registros desde la tabla Ciudad2
  10. Set rsCiudad2 = New Recordset
  11. 'Establecer sus propiedades
  12. With rsCiudad2
  13.     .CursorLocation = adUseClient
  14.     .Open "select idprovincia from ciudad2 where ciudad like '" & Combo2.Text & "'", cnPrueba, adOpenDynamic, adLockOptimistic
  15. End With
  16. 'Añadimos la tabla de ciudad2 al combo1
  17. Do Until rsCiudad2.EOF()
  18. idprovincia = rsCiudad2.Fields(0)
  19. Loop
  20. rsCiudad2.Close
  21. rsCiudad2.Open "select * from ciudad2 where idprovincia=" & idprovincia & "", cnPrueba, adOpenDynamic, adLockOptimistic
  22. Combo1.AddItem rsCiudad2!ciudad
  23. rsCiudad2.MoveNext
  24. End Sub

El seguno select le he puesto una interrupcion y me ha dado valor 0 y me ha saltado un error : "El valor EOF es true o el actual registro se elimino, la operacion solicitada requiere un registro actual"

Saludos
  #23 (permalink)  
Antiguo 28/04/2010, 05:26
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 5 meses
Puntos: 13
Respuesta: Datos de combo a combo

Ahora si que me he perdido del todo !!!, no entiendo nada del nuevo código, en la 1ª select comparas ciudad con el valor del combo2, cuando creía que lo que necesitas es llenar el combo con ciudades, no entiendo para nada lo que haces con el bucle ese

Cita:
Do Until rsCiudad2.EOF()
idprovincia = rsCiudad2.Fields(0)
Loop
De donde a salido la variable idprovincia?, el bucle no tiene sentido, no avanzas registros del recordset, y si avanzase estarías machacando continuamente la misma variable, la segunda select también me pierdo,...

En serio, creo que lo estamos haciendo más difícil de lo que realmente es.
  #24 (permalink)  
Antiguo 28/04/2010, 05:35
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
Respuesta: Datos de combo a combo

He declarado una variable como bien has visto, y la relleno con el select.

Cita:
Do Until rsCiudad2.EOF()
idprovincia = rsCiudad2.Fields(0)
Loop
Esto esta mal es asi:

Cita:
If Not rsCiudad2.EOF() Then
idprovincia = rsCiudad2.Fields(0)
End If
Es que me acaba de dar una pista un compañero del trabajo y me dijo que era parecido a lo que yo hice en "insertar y añadir" y lo he puesto mas o menos asi, si no lo entiendes ponme tu un codigo o algo de como lo harias porque es que me estoy estresando y creo que tu tambien xd.

Bueno y ahora te pongo el codigo de como lo llevo, ahora mismo esta 1/5 echo porque si pongo la provincia "Madrid" me sale una ciudad pero solo una, y si selecciono otra (aunque tenga datos) me marca el error (***): El valor EOF es true o el actual registro se elimino, la operacion solicitada requiere un registro actual"

Código vb:
Ver original
  1. Private Sub Combo2_Click()
  2. Dim idprovincia As Long
  3. Set cnPrueba = New Connection
  4. 'Establecer sus propiedades
  5. With cnPrueba
  6. .Provider = "Microsoft.Jet.oledb.4.0"
  7. .ConnectionString = "prueba.mdb"
  8. End With
  9. cnPrueba.Open
  10. 'Crear un conjunto de registros desde la tabla Ciudad2
  11. Set rsCiudad2 = New Recordset
  12. 'Establecer sus propiedades
  13. With rsCiudad2
  14.     .CursorLocation = adUseClient
  15.     .Open "select idprovincia from ciudad2 where ciudad = '" & Combo2.Text & "'", cnPrueba, adOpenDynamic, adLockOptimistic
  16. End With
  17. 'Añadimos la tabla de ciudad2 al combo1
  18. If Not rsCiudad2.EOF() Then
  19. idprovincia = rsCiudad2.Fields(0)
  20. End If
  21. rsCiudad2.Close
  22. rsCiudad2.Open "select * from ciudad2 where idprovincia=" & idprovincia & "", cnPrueba, adOpenDynamic, adLockOptimistic
  23. Combo1.AddItem rsCiudad2!ciudad
  24. rsCiudad2.MoveNext
  25.  
  26. End Sub

saludos y perdon por estresarte

pd: Una cosa a los comentarios si ves que no coinciden no les hagas caso porque se me olvidan borrarlos y hasta que lo termino no pongo los nuevo

Última edición por Sergio18; 28/04/2010 a las 05:41
  #25 (permalink)  
Antiguo 28/04/2010, 05:47
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 5 meses
Puntos: 13
Respuesta: Datos de combo a combo

Hola

Dime que tablas estas utilizando en access y un ejemplo de los datos que contienen y si puedo, a la tarde intento crear un ejemplo.

--Saludos--
  #26 (permalink)  
Antiguo 28/04/2010, 05:55
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
Respuesta: Datos de combo a combo

Las tablas son:

Provincias: idprovincias,provincias
Ciudad2: idciudad,idprovincias,ciudad

Las otras dos que tengo no hay que utilizarlas, en provincias tengo todas las provincias de España y en ciudad2 la Idprovincia que la obtengo desde otro form , haciendo que yo ponga la ciudad (en un text) y la provincia (en un combo cargado de la tabla provincias)y desde un msflexgrid me añade la ID de la provincias de mede el nombre, y ahora lo que tengo que hacer. (Te lo digo por si te sirve, tambien te pongo el codigo que utilizo para hacerlo a lo mejor asi te da una idea)

Código vb:
Ver original
  1. Private Sub Command1_Click()
  2. If Text1 = "" Or Combo1 = "" Then
  3. MsgBox "Debe ingresar datos en los campos", vbCritical, Me.Caption
  4. Exit Sub
  5. End If
  6. '------------------------------------------------------------------------------
  7. 'crear un objeto conexion
  8. Set cnPrueba = New Connection
  9. 'Establecer sus propiedades
  10.     With cnPrueba
  11.         .Provider = "Microsoft.Jet.oledb.4.0"
  12.         .ConnectionString = "prueba.mdb"
  13.     End With
  14. cnPrueba.Open
  15. '------------------------------------------------------------------------------
  16. Dim idprovincia As Long
  17. idprovincia = 0
  18. '------------------------------------------------------------------------------
  19. 'Crear un conjunto de registros desde la tabla Ciudad2
  20. Set rsCiudad2 = New Recordset
  21. 'Establecer sus propiedades
  22. With rsCiudad2
  23.     .CursorLocation = adUseClient
  24.     .Open "select idprovincias from provincias where provincias='" & Combo1.Text & "'", cnPrueba, adOpenDynamic, adLockOptimistic
  25. End With
  26. If Not rsCiudad2.EOF Then
  27.     idprovincia = rsCiudad2.Fields(0)
  28. End If
  29. rsCiudad2.Close
  30. rsCiudad2.Open "select * from ciudad2"
  31. '------------------------------------------------------------------------------
  32. 'Añadimos los registros del formulario a la base de datos
  33. With rsCiudad2
  34. .AddNew
  35. .Fields("Ciudad") = Text1.Text
  36. .Fields("idprovincia") = idprovincia
  37. .Update
  38. End With
  39. MsgBox ("Datos Añadidos")
  40. '------------------------------------------------------------------------------
  41. 'Refrescamos el formulario para que se borren los datos introducidos
  42. With rsCiudad2
  43. MSFlexGrid1.Refresh
  44. Text1.Text = ""
  45. Text2.Text = ""
  46. Combo1.Text = ""
  47. .Update
  48. End With
  49. '------------------------------------------------------------------------------
  50. 'Añadimos el formulario al msflexgrid
  51. While Not rsCiudad2.EOF
  52. MSFlexGrid1.AddItem rsCiudad2("idciudad") & vbTab & rsCiudad2("idprovincia") & vbTab & rsCiudad2("ciudad")
  53. rsCiudad2.MoveNext
  54. Wend
  55. '------------------------------------------------------------------------------
  56. 'Insertamos la cabezera
  57. MSFlexGrid1.TextMatrix(0, 0) = "idciudad"
  58. MSFlexGrid1.TextMatrix(0, 1) = "idprovincia"
  59. MSFlexGrid1.TextMatrix(0, 2) = "ciudad"
  60. Screen.MousePointer = vbDefault
  61. End Sub
saludos
  #27 (permalink)  
Antiguo 28/04/2010, 08:41
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 5 meses
Puntos: 13
Respuesta: Datos de combo a combo

Hola

Bueno ya esta !!!, creo que he tardado menos haciendo el ejemplo que todo lo que llevamos escrito aquí. El código completo es el siguiente:

Código vb:
Ver original
  1. Option Explicit
  2.  
  3. Public bd As New ADODB.Connection
  4.  
  5.  
  6. Private Sub Combo1_Click()
  7.  
  8. Dim RegCiu As New ADODB.Recordset
  9. Dim SQL As String
  10.  
  11. SQL = "Select ciudad from ciudad2 inner join provincias ON provincias.idprovincias = ciudad2.idprovincias WHERE provincias='" & Combo1.Text & "'"
  12. RegCiu.Open SQL, bd
  13.  
  14. Combo2.Clear
  15. While Not RegCiu.EOF
  16.     Combo2.AddItem RegCiu.Fields(0)
  17.     RegCiu.MoveNext
  18. Wend
  19.  
  20. End Sub
  21.  
  22.  
  23. Private Sub Form_Load()
  24.  
  25. Dim RegProv As New ADODB.Recordset
  26. Dim Cadena As String
  27.  
  28. Cadena = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & App.Path & "/Prueba.mdb;Persist Security Info=False"
  29.  
  30. bd.Open Cadena
  31.  
  32. RegProv.Open "Select provincias from Provincias", bd, adOpenDynamic, adLockReadOnly
  33.  
  34. While Not RegProv.EOF
  35.     Combo1.AddItem RegProv.Fields(0)
  36.     RegProv.MoveNext
  37. Wend
  38.  
  39.  
  40. End Sub

Añado el ejemplo comprimido por si lo quieres ver en: http://www.megaupload.com/?d=PECP4E3G

Si tienes alguna duda (no he añadido comentarios) me lo dices, aunque creo que esta muy reducido y claro. Puede que tuvieses el problema con la sentencia SQL, revisa el manual de las sentencias Select con dos tablas o más (inner join)

--Saludos--
  #28 (permalink)  
Antiguo 28/04/2010, 09:39
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
Respuesta: Datos de combo a combo

Hola

He adaptado tu codigo para que se adapte al mio, la sentencia sql no me iba y la he cambiado 2 cosas y lo que hace es añadir las provincias de mede las ciudades, y he estado probando, otra combinaciones y o me salen las provincias o me da errores. Te pongo el codigo:

Código vb:
Ver original
  1. Private Sub Combo2_Click()
  2. Dim idprovincia As Long
  3. Set cnPrueba = New Connection
  4. 'Establecer sus propiedades
  5. With cnPrueba
  6. .Provider = "Microsoft.Jet.oledb.4.0"
  7. .ConnectionString = "prueba.mdb"
  8. End With
  9. cnPrueba.Open
  10. 'Crear un conjunto de registros desde la tabla Ciudad2
  11. Set rsCiudad2 = New Recordset
  12. 'Establecer sus propiedades
  13. With rsCiudad2
  14.     .CursorLocation = adUseClient
  15.     .Open "Select ciudad from ciudad2 inner join provincias ON  provincias.provincias = ciudad2.ciudad WHERE provincias='" & Combo1.Text & "'", cnPrueba, adOpenDynamic, adLockOptimistic
  16. End With
  17. While Not rsCiudad2.EOF
  18.     Combo2.AddItem rsCiudad2.Fields(0)
  19.     rsCiudad2.MoveNext
  20. Wend
  21. End Sub
  22.  
  23.  
  24. 'ESTE ES EL DEL FORM LA CONEXION CON CNPRUEBA YA ESTA DECLARADA DE ANTES
  25.  
  26. Set rsCiudad2 = New Recordset
  27. With rsCiudad2
  28.     .CursorLocation = adUseClient
  29.     .Open "Select provincias from Provincias", cnPrueba, adOpenDynamic, adLockOptimistic
  30. End With
  31. While Not rsCiudad2.EOF
  32.     Combo1.AddItem rsCiudad2.Fields(0)
  33.     rsCiudad2.MoveNext
  34. Wend

Saludos y no sabes cuanto te agradezco que me ayudes tanto
  #29 (permalink)  
Antiguo 28/04/2010, 09:49
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
Respuesta: Datos de combo a combo

Otra cosa que me acabo de dar cuenta, el codigo del form no hace falta porque lo que hace es añadir provincias al combo1 y he probado cambiar el "select provincias from provincias" por "select ciudad por ciudad2" y no hace nada, el codigo que vale es el del combo click

saludos
  #30 (permalink)  
Antiguo 28/04/2010, 10:00
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
Respuesta: Datos de combo a combo

Acabo de hacer esto en el form y no se porque solo me sale Alcorcon como ciudad
te lo dejo aqui

Código vb:
Ver original
  1. Set rsCiudad2 = New Recordset
  2. With rsCiudad2
  3. .Open "select ciudad from ciudad2", cnPrueba, adOpenDynamic, adLockOptimistic
  4. End With
  5. With rsCiudad2
  6. Combo1.AddItem rsCiudad2.Fields(0)
  7. rsCiudad2.MoveNext
  8. End With

saludos

Etiquetas: combo
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 04:59.