Combo dependientes desde tablas access

Quisiera que me colaboraras con lo siguiente, tengo tres combos y lo que quiero hacer es que me queden dependientes,, las tres tablas están en access.. Seria algo así.
En el combo1 tengo el listado REMISIÓN, TERAPIA, IMÁGENES DX, ESPECIALISTA, si esgojo la opción IMÁGENES DX EN EL COMBO 1,,, en el combo2 me aparezca RAYOSX, ECOGRAFÍA, TAC si escojo en el combo2 RAYOSX,,, en el combo3 me aparezca RADIOGRAFÍA DE MANO, RADIOGRAFÍA DE RODILLA, RADIOGRAFÍA DE CRANE,,.

4 Respuestas

Respuesta
1
No se como te conectas a la base pero la lógica es así.
cuando abris el form cargas el combo1.
Elegís del combo1 y haces una consulta y llenas el combo 2
elegís del combo2 y haces una consulta y llenas el combo3.
Lógica sencilla, ahora lo que queda es que me digas como traes los datos
recordset y llenas los combos, dataset, environment etc.
Depende de eso hay que ver el código para cada combo
saludos
leandro
Este es el código que utolizo para cargar los datos de la tabla en el combo1.
Private Sub Form_Load()
Dim BD As ADODB.Connection
Dim rs As ADODB.Recordset
Set BD = New ADODB.Connection
Set rayosx = New ADODB.Recordset
' suponemos que la BD está en el mismo directorio que la aplicación
BD.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source =" & App.Path & "\Historias.mdb"
rayosx.CursorLocation = adUseClient
rayosx.Open "SELECT * FROM RayosX", BD, adOpenStatic, adLockOptimistic
With rayosx
Do Until .EOF
' suponemos que la columna a cargar es la primera
Combo1.AddItem .Fields(1)
.MoveNext
    Loop
End With
End Sub
Tablas en access
TABLA SERVICIO aquí va el servicio que se va a solicitar tiene los datos
IMÁGENES DIAGNOSTICAS, TERAPIA, REMISIÓN, ejemplo iría ligado a un combo1.
Tabla imágenes diagnosticas
llevaria los datos, RAYOSX,ECOGRAFIA,GAMMAGRAFIA,TOMOGRAFIA,,
si en el combo1 escojo imagenes diagnosticas, que en el combo2 se me cargue los datos de imagnes diagnosticas,rayosx,ecografia,gammagrafia,tomografia,.
Tabla rayosx
Llevaría el listado de las radiografía,, radiografía de mano, radiografía de pie, radiografía cráneo etc.. si en el combo2 de imágenes diagnosticas escojo radiografía, en el combo3 se carguen los tipos de radiografía,,, esto seria más o menos lo que quiero hacer, con este ejemplo ya creo que pudo ir metiendo los demás datos que necesito.. porque irían más tablas como son.
Tabla de servicio(Imágenes dx, Terapia, Remisión)
Tabla de terapias (terapia física, trapia respiratoria)
Tabla de remisión (Pediatría, Gastroenterologo, Ginecólogo.)
Tabla imágenes DX (Rayosx,ecografia,tomografia.)
Tabla rayosx(radigrafia mano,radiografia craneo,radiografia rodilla..)
Tabla ecografia(Ecografia pelvica,Ecografia renal...)
Tabla Gammagrafia(Gammagrafia riñon,Gammagrafia corazon..)
Tabla tomografia (Tomografia cerebral,tomografia vesicula.)
Me imagino que debo relacionar lo datos de una tabla con la otra, pero con un ejemplo a seguir ya puedo continuar metiendo la demás información. Agradezco la colaboración, he buscado en Internet este tipo de ejemplos y prácticamente a sido imposible e infructuosa la búsqueda y ya es lo ultimo que me queda para terminar mi proyecto.
Tranquilo vas a ver que era más fácil de lo que esperabas
supongamos que ya llenaste el combo1.
Ahora te paso el código para llenar el combo2.
Todo esto teniendo un base de datos normalizada y de buen rendimiento.
Esto es tienes una tabla de especialidades ¿?, especialidades para mi serian servicio, terapias, remisión etc.
Después cada especialidad tiene un código y a su vez esta especialidad tiene otros subcodigos. Ejemplo terapias tiene física y respiratoria
entonces a mi entender tengo 1 sola tabla de especialidades, y otra de especialidades_servicio
ejemplo más concreto que sigue con el código..
tbl_especialidad tengo cod_espec: 01, desc_esp: imagenes, 02 rayosx, 03 ecografia
tbl_especialidad_servicio tengo cod_espec: 01, cod_servicio: 01, descr_serv: rayosx
cod_espec: 01 imagenes, cod_servicio: 02 ecografia
cod_espec: 02 rayosx, cod_servicio: 01 tomografia
cod_espec: 03 ecografia, cod_servicio: 01 pelvica
cod_espec: 03 ecografia, cod_servicio: 01 renal
vamos al codigo... yo lo haría de esta manera
cuando llenas el combo1 llenas la especialidad, llenas otro combo oculto donde llenas el codigo de especialidad
ya elegimos del combo1 la especialidad ecografia, combooculto: 3
rayosx.Open "SELECT * FROM tbl_especialidad_servicio where cod_espec = combooculto.list(combo1.listindex)", BD, adOpenStatic, adLockOptimistic
aca en el where parece confuso pero traducido es asi, seleccionaste el combo1 como el combo1 y el combooculto se llenaron al mismo tiempo son iguales de tamaño e index.
Entonces combocoluto. List toma el dato, combo1. Listindex toma el indice.
Combo2. Clear
do while not rayosx.eof
Combo2.additem .fields(1)
rayosx.movenext
loop
De ser necesario es lo mismo para el combo3, pero ahí quiero ver como armas la base de datos para que sea optimo, pero es casi lo mismo.
Ya tengo la tabla donde tengo la información pero no he podido hacerlo..
Tengo ahora una tabla de consulta, cod, ESPECIALIDAD, SERICIO, DESCRIPCIÓN, YA LAS TENGO RELACIONADAS Y ME FUNCIONA BIEN, Ahora como le haría, para que cuando en el combo1 escoja ESPECIALIDAD,, en el combo2 me aparezca, SERVICIO, y si en el combo2 de servicio escojo Rayos por en el combo3 me aparezca descripción,, rayos xmano etc.te agradezco la colaboración,, ya casi lo tengo.
Tabla Especialidad=Imagenes Dx,Remision,Terapia 
Tabla SErvicio= RayosX,Ecografia,Tac,
Tabla Descripcion=RAyosx mano, rayos xcraneo etc.. ahora tendría que hacer una consulta para cada uno. Y como me quedaría entonces el código, y si no hay ningún problema o como se haría la consulta a la tabla consulta.
rayosx.Open "SELECT * FROM RayosX", BD, adOpenStatic, adLockOptimistic
With rayosx
Do Until .EOF
' suponemos que la columna a cargar es la primera
Combo1.AddItem .Fields(1)
.MoveNext
    Loop
End With
End Sub
Gracias.
cuando llenas el combo1 llenas el nombre de la especialidad, llenas otro combo oculto donde llenas el codigo de especialidad
ya elegimos del combo1 la especialidad ecografia, combooculto: 3
rayosx.Open "SELECT * FROM tbl_especialidad_servicio where cod_espec = combooculto.list(combo1.listindex)", BD, adOpenStatic, adLockOptimistic
aca en el where parece confuso pero traducido es asi, seleccionaste el combo1 como el combo1 y el combooculto se llenaron al mismo tiempo son iguales de tamaño e index.
Entonces combocoluto. List toma el dato, combo1. Listindex toma el indice.
Combo2. Clear
do while not rayosx.eof
Combo2.additem .fields(1)
rayosx.movenext
loop
Sino entendes esto necesito que me pases nombre de la tablas y cada campo con sus claves primarias y demas. Sabiendo eso te puedo armar algo del codigo
saludos
lea
Ok, Tengo tres tablas, TIPO SERVICIO, SERVICIO, DETALLES. Estas están aparte cada una en la tabla TIPOSERVICIO están los datos:
Codtserv tiposervicio
1 ImagenesDX
2 Terapia
3 VAloracion
Tabla servicio
Codserv     Servicio         codtiposervicio
1 Rayosx 1
2 Ecografía 1
3 TAc 1
4                 Gammagrafia          1
5 Terapia 2
6 Remisión 3
Tabla detalles
Coddetalles                 Detalles                       Codservicio
1                                 Radiografia mano                    1
2                                  Radiografia Craneo                 1
3                                  Ecografia Mamaria                  2
4                                 Ecografia Renal                       2
5                                  Tac Craneo                             3
6                                  Gammagrafia Hepatica           4         
7                                 Terapia Fisica                          5                     
8 Terapia Respiratoria 5
9 Pediatría 6
10 Ortopedia 6
11 Cirugía 6
De estas tres tablas las relacione y saque una consulta con la siguiente estructura. La tabla se ññama consulta1
Tiposervicio Servicio Detalles
Imágenes Dx                           Gammagrafia                            Gammagrafia Hepatica
Imágenes Dx                           tac                                           Tomografia craneo
Imágenes Dx                           Ecografia                                 Ecografia renal
Imágenes Dx                           Ecografia                                 Ecografia mamaria
Imágenes Dx                           Rayosx                                   RAdigrafia Craneo
Imágenes Dx                           Rayosx                                  Radiografiamano
Terapia terapia terapia física
Terapia terapia terapia respiratoria
Valoración                               remision                                   pediatria
Valoración                               remision                                   ortopedia
Valoración                               remision                                   cirugia
Ahora la consulta delo combos se hace desde la tablas independientes o desde la abla de consulta 1 donde tengo los datos,,, si no es ningún inconveniente donde te puedo enviar el ejercicio sobre el que estoy trabajando para que me eches una mano. Gracias
No enviar ejercicio no porque es muy engorroso ponerse a ver código entero de la aplicación.
Aparentemente la base estaría bien.
Pregunta ¿en qué tabla pones tu selección?, las 3 tablas deben tener un fin para guardar un horario o una consulta, con fecha, doctor etc. no se me imagino por las demás tablas.
Vayamos al tema de las consultas que creo que ahí esta tu despiste...
La consulta la tienes que hacer, no importa donde mientras te muestre realmente lo que quieres mostarle al usuario.
Si vos haces esa consulta, demostrás que funciona la base pero depende como este armada la base vas a poder relación los 3 combos
empecemos
pone en el form 6 combos: combo1 = tipo servicio, combo2 = servicio, combo3 = detalles
comboCODtiposerv = código de tipo de servicio (para combo1) y por ultimo comboCODservicio = código de servicio (para combo2),
comboCODdetalle = código de detalle (para combo3),
estos 3 últimos ponelos como visible = false
lo primero es llenar el primer combo con una consulta sencilla a la tbl "tipo servicio"
Cuando llenas el combo pones esto, (evita el * y llama a los campos que necesites)
Rayosx. Open "SELECT codtserv, tiposervicio FROM tiposervicio", BD, adOpenStatic, adLockOptimistic
With rayosx
Do Until .EOF
' suponemos que la columna a cargar es la primera
ComboCODtiposerv. AddItem rayosx! Codtserv
Combo1. AddItem rayosx! Tiposervicio
. MoveNext
    Loop
End With
rayosx.close
ahí llenas el combo1 que tiene el nombre y llenamos el combo con sus códigos.
Seleccionamos un item del combo.... ATENTO AL WHERE
le decimos a la consulta que me traiga los servicios cuando sea igual al codigo del tipo de servicio que seleccionamos
rayosx.Open "SELECT codtiposervicio, servicio FROM SERVICIO
WHERE codserv = " & combocodtiposerv.list(combo1.listindex)
", BD, adOpenStatic, adLockOptimistic
With rayosx
Do Until .EOF
ComboCODservicio.AddItem rayosx!codtiposervicio
Combo1.AddItem rayosx!servicio
.MoveNext
    Loop
End With
por ultimo seleccionamos del combo2...
le decimos a la consulta que me traiga los detalles cuando sea igual al codigo de servicio que seleccionamos
rayosx.Open "SELECT coddetalles, detalle FROM DETALLES WHERE codserv = " & combocodserv.list(combo2.listindex)
", BD, adOpenStatic, adLockOptimistic
With rayosx
Do Until .EOF
ComboCODdetalle.AddItem rayosx!coddetalles
Combo3.AddItem rayosx!DETALLE
.MoveNext
    Loop
End With
Habiendo tipeado todo esto aconsejo seriamente que reveas los nombres de las tablas con los nombres de los campos...
Espero que te funciones, obviamente centre mi esfuerzo en la consulta y llenas combos, lo de alrededor de el until, y el manejo del recordset te lo dejo todo a vos
los eventos de los combos programalos en el click
saludos
leandro
Ok amigo gracias por la orientación ahora si capte la idea y me ha funcionado,,, esto solo era para cargar los datos en el combo,, ya lo de guardar los datos seleccionados en el formulario lo tenia solucionado,, agradecido nuevamente hasta una próxima oportunidad.
Respuesta
1
Cargas el primer combo, en el evento click de este combo llenas el segundo de acuerdo a lo seleccionado en el primer combo, esto es de acuerdo al código seleccionado, haces la consulta a la base de datos y filtras los datos para llenar el segundo combo.
Luego en le segundo combo en el evento click al seleccionar un item, haces la consulta a la base de datos para llenar el tercer combo.
Tengo el siguiente código, para cargarlos datos en un combo1.. Ahora hice una consulta y tengo los datos que tengo en una sola tabla con las columnas... Tipo servicio, Servicios, Detalles... Ahora la cuestión seria.. Combo1 escojo servicio...
El combo2 depende del tipo de servicio del combo1, y el combo 3 detalles depende del servicio que scogi en el combo2. Ej:combo1 escogí radiología, en el combo2 se cargarían,,, rayosx, ecografía, tac.. del combo2 escogería rayos x... en el combo3 se me cargarían los detalles de radiografías,, radiografía mano, radiografía pie etc...
Como haría con la tabla consulta para para traer las tres columnas dependiente una de otra.
Private Sub Form_Load()
Dim BD As ADODB.Connection
Dim rs As ADODB.Recordset
Set BD = New ADODB.Connection
Set rayosx = New ADODB.Recordset
' suponemos que la BD está en el mismo directorio que la aplicación
BD.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source =" & App.Path & "\Historias.mdb"
rayosx.CursorLocation = adUseClient
rayosx.Open "SELECT * FROM RayosX", BD, adOpenStatic, adLockOptimistic
With rayosx
Do Until .EOF
' suponemos que la columna a cargar es la primera
Combo1.AddItem .Fields(1)
.MoveNext
    Loop
End With
End Sub
Con ese código estas llenando el combo
Hay un evento Click del combo que es cuando seleccionan un item de la lista, en este evento, revisas cual seleccionaron y de acuerdo a eso haces la consulta a la base de datos y llenas el segundo Combobox, igual con el tercero.
Gracia.. si me pudieras escribir un ejemplo te lo agradezco, ya que mis conocimientos son escasos en visual basic.. y pues necesito de ejemplos para guiarme..
En el load cargo el combo1, luego en el evento click del combo1 lleno el combo 2
Private Sub Form_Load()
Combo1. Clear
Combo1. AddItem "frutas"
Combo1. AddItem "verduras"
Combo2. Clear
End Sub
Private Sub Combo1_Click()
Select Case Me.Combo1.Text ' Aqui verifico que item seleccionaron del combo 1
Case "frutas":
Combo2. Clear
Combo2. AddItem "naranjas", 0
Combo2. AddItem "manzanas", 1
Case "verduras":
Combo2. Clear
Combo2. AddItem "brocolis", 0
Combo2. AddItem "coliflores", 1
End Select
End Sub
Respuesta
1
Ya te respondí si no me equivoco...
Respuesta
1
Supuestos:
- Llenar el combo7 dependiendo de lo elegido en el Combo6
- Tabla: Ubigeos
- Campos: Provincia y Región
- En el combo6 están las regiones
- El combo7 tendrá las provincias
Private Sub Combo6_Click()
Set cnn = New ADODB.Connection
cnn.ConnectionString = _
        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & m_ruta & "\DatossistemaIDL.mdb" & ";" & _
        "Jet OLEDB:Database Password=clave"
cnn.Open
Set rst = New ADODB.Recordset
sql$ = "select Provincia from Ubigeos where Ubigeos.Region='" & Combo6 & "'
Group by Ubigeos.provincia"
With rst
.CursorLocation = adUseClient
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Open sql$, cnn, , , adCmdText
End With
Combo7.Clear
Do
Combo7.AddItem rst.Fields!Provincia.Value
rst.MoveNext
Loop Until rst.EOF
Set rst = Nothing
Set cnn = Nothing
End Sub
Abraham
No se si fue que hice la pregunta en donde no era, pero estos es para una macro o es para visual basic,, de todas maneras medio lo entiendo para aplicarlo a visual basic y access pero como puedo poner el tercer combo dependiendo del segundo.. GRacias.
Si es en excel no importa yo lo modificacria y lo aplicaría a mi necesidad... GRacias
Hiciste la pregunta en el foro de VB "Clasico". Si tu pregunta era de VBA de EXcel, debiste hacerla en el foro de Excel.
No obstante el principio es el mismo mi estimado.
Abraham

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas