Vale... sin embargo es necesario aclarar que no me has respondido totalmente, te cuento, porque de todos modos ya tengo los datos necesarios para aclararte las dudas.
Te lo voy a explicar con un ejemplo con datos concretos, ya que tratando como abstracto siempre podrán quedar dudas en las nubes... Imaginemos que tenemos una plantilla de trabajadores, son guardas de seguridad de una red de centros comerciales en una ciudad y ahora presentamos la lista de trabajadores que operan en el centro 'X', donde cada uno de ellos tiene 1 o más diás asignados, por tanto la relación es: dia->trabajador/res... con este ejemplo se harán las explicaciones pertinentes, cuando se precisen. Para simplificar explicaciones supondremos que sólo existe el centro 'X' y por tanto nuestro diseño no tiene en cuenta cuestiones de los diferentes centros...
Sea por tanto la lista de días y guardas la siguiente:
Dias: "Lunes,Martes,Miércoles,Jueves,Viernes,Sábado,Domingo"
Guardas: "Antonio,Juan,Luis,Valentín,Diego,Rodrigo,Sebastián,Pedro,Roberto"
y sean las relaciones: [dia->Guardas] la siguiente: (0->0,1), (1->), (2->), (3->2,3,4), (4->5), (5->6,7), (6->2,8)
Esto se lee así: para el día cuyo id se indica: (d) le corresponde (->) los guardas cuyo id aparece en la lista que le sigue (n,,,,), como verás hay 7 días y 8 guardas (martes y miércoles no hay guardas, el jueves hay 3, el lunes 2, el domingo 2 y se da el caso del único guarda que trabaja 2 dias en la semana, etc...)
Hay 2 formas de guardar la relación, y de ello se deducen 2 esquemas distintos que puede valorarse:
1- Podríamos decir algo como: El lunes trabajan los guardas Antonio y Juan. Es decir la relación sería: Dia->Guardas. Esto exige un diseño de la siguiente manera:
a ) 1 tabla mantiene los 7 días de la semana, Campos Id_Dia y campo Nombredia
b ) 7 tablas llamadas lunes,martes... y que contiene 1 sólo campo llamado id_Guarda, cada tabla contiene tantos registros como guardas trabajen ese día.
c ) 1 Tabla llamada Guardas, contiene 2 campos: Id_guarda, Nombre
La tabla de los días de la semana es accesoria y sólo sirve para proveernos los nombres de los días en vez de usar el nombre de la tabla, el id_dia en este caso sólo sirve para saber que tabla invocar en la consultas... puede prescindirse de ella en este esquema.
2 - Podríamos decir algo como: Antonio trabaja el Lunes. Es decir la relación sería: Guarda->Dias. Esto exige un diseño de la siguiente manera.
a ) 1 tabla mantiene los 7 días de la semana con los campos: Id_dia y NombreDia
b ) 1 Tabla llamada Guardas que contiene 3 campos: Id_guarda, NombreGuarda, Id_Dia
Este 2º esquema es más válido en unas circuntancias concretas... que cada trabajador sólo trabaje 1 día a la semana, por que el campo id_dia sólo contiene 1 día. si esto es así que cada guarda sólo trabaje 1 día como máximo (simepre así)) la selecciónes de guardas son más óptimas que con el diseño 1, porque podemos buscar en la tabla Guardas cuales de ellos tiene el campo Id_dia igual que el id_dia de la tabla DiasSemana buscado.
Ahora bien en nuestros datos tenemos que Luis trabaja tanto el Jueves como el domingo, luego tiene más de 1 campo id_dia, si queremos seguir usando el esquema 2º, necesitaríamos, primero retirar el campo id_Dia de la tabla Guardas y necesitaríamos:
c ) Tantas tablas como guardas halla, donde los registros de cada tabla sean, todos los Id_Dia en que un guarda trabaja.
Ahora vemos que tener una multitud de tablas dedicado a cada guarda ya no es una buena opción por varias razones... los guardias cambian con el tiempo, aunque su nombre pueda modificarse, requiere que cada vez que un guarda se dé de baja se elimine una tabla y cada vez que se contraten nuevos guardas se creen tablas... en este caso es preferible usar el esquema 1º, hay que procurar que si existe la posibilidad detener tablas 'fijas', usar un esquema así, siempre será más fácil recordar los nombres de tablas fijas que tablas que se cren y elimina cada cierto tiempo, este caso lo permite usando el esquema 1º.
Existe aún un 3º esquema que es mixto, usa ambos esquemas anteriores. Un esquema así se definiría con una relación Dias<->Guardas. Este esquema presenta ciertas ventajas e inconvenientes, el inconveniente (sobre los esquemas anteriores) es la redundancia de datos, hay datos que aparecerán duplicados, la ventaja es que en determinadas situaciones es más óptimo hacer una consulta de una manera que de otra, luego un esquema así suele utilizarse sólo cuando en un sistema es crítico la optimización de velocidad y el sacrificio de tamaño necesario es asequible.
Para nuestro ejemplo el esquema 1º es el adecuado.
Aunque todo esto (de los esquemas de diseño) no es parte de la pregunta es necesario entenderlo para entender claamente lo que implica una relación y por tanto que soluciones están a nuestro alcance, cuál es el camino a seguir y qué tipo y modo de consultas podremos hacer...
---------------------------------------------
Los combobox, son objetos para presentar datos. Entonces sucede que si los datos ya están ahí, no existe una relación entre ellos, directa, el combobox1 tiene (tomando del ejemplo) los días de la semana y el combobox2 tiene una lista de trabajadores, pero en el momento de tener estos datos ya en el combobox, no existe una relación que indique qué guardas trabajan un día u otro. Este dato nos falta.... y por tanto debe proveerse... (existen antes de mostrar estos datos ?)
*** Si los datos yacen en una base de datos, entonces es allí donde constan además de los datos, las relaciones, por tanto en este caso lo adecuado es rellenar el combobox con los días de la semana (para nuestro ejemplo) y dejar vacío el combobox2 (de momento lo decimos así). Cuando el usuario elija un día de la semana en el combobox1, nosotros lo que hacemos es coger el Id_Dia (propiedad listindex del combo) e ir a la base de datos y hacer una consulta:
"Selecciona de la tabla GuardasDeSeguridad aquellos nombres que se relacionan en la tabla del Dia seleccionado"
Si hubiéramos empleado el esquema 2º (en el diseño sin repetición de días por guardas), la consulta cambiaría a esta:
" Selecciona de la tabla GuardasDeSeguridad aquellos nombres cuyo dia de trabajo sea = al día seleccionado"
Los nombres obtenidos de la consulta, son los que se vuelcan al combobox2.
Por tanto el combobox2 no tiene la lista completa de trabajadores en ningún momento, (ni tiene necesidad de ello), sólo contiene la lista de trabajadores que corresponden al día señalado en el combobox1.
Cuando cargamos (inicialmente) el combobox1, cargaremos en el combobox2 la selección que coincida con el índice que pongamos en el combobox1, se supone que por defecto no tocamos nada, luego sería 'Lunes' (id_dia=0), recuerda que antes dijimos que 'de entrada' dejábamos vacío el combobox2, para no perdernos en el orden de los detalles, lo que he decrito aquí es lo que debe suceder en dicho instante..
Muchos de los controles de VB6 pueden conectarse a un origen de datos, como una base de datos, asignando las propiedades: Datasource, datafield y datamember (Dataformat sirve para alterar el modo en que se presentan los datos, por ejemplo convertir cadenas a mayúsculas,etc..). No vamos a entrar a detallar esto porque esta no es la pregunta y ya hay temas al respecto.
*** Si los datos yacen en un recordset, se hace de modo parecido a como explica un usuario unos mensajes más arriba. Básicamente recorres el recordset para recoger el campo nombre de los guardas cuyo id_dia coincida con el id_dia (del día de la semana) seleccionado. La diferencia entre el recordset y la base de datos es que el recordset ya tiene un conjunto de registros filtrados... si te acuerdas dijomos que los guardas trabajaban en diferentes centros, luego en el filtro de nuestro recordset podría haber ya filtrados (tomados de la base de datos) aquellos guardas que trabajan en el centro 'X', lo que tiene por efecto que en lo sucesivo se reducirá el tiempo en las consultas que vayamos a hacer mientras no cambiemos de centro.
*** En cambio si los datos no proceden de un origen de datos ya estructurado, es decir que somos nosotros quien los estructura y por tanto la relación la establecemos 'in situ' todavía necesitamos crear algún tipo de estructura que nos permita aparte de almacenar los datos y presentarlos en los combobox, mantener la relación entre ellos...
Sobre los 2 casos previos podrás encontrar bastante información por la red, por lo que no me voy a extender en ello, si en cambió me centraré en este último caso que aunque haya información disponible en la red, es claro que resultará más difícil encontrarla... Usaremos el ejemplo descrito al principio para usar un poco de código y aportar detalles...
Inicialmente partimos de los datos deseados, al caso 2 matrices una que llamaremos dias y otra que llamaremos Guardas, para no redactar uno a uno dichos datos, los quedamos en unas constantes de donde las pasamos a matriz...
Const d = "Lunes,Martes,Miércoles,Jueves,Viernes,Sábado,Domingo"
Const g = "Antonio,Juan,Luis,Valentín,Diego,Rodrigo,Sebastián,Pedro,Roberto"
Dim Dias() As String
Dim Guardas() As String
Private Sub Form_Load()
Dias = Split(d, ",")
Guardas = Split(g, ",")
end sub
Lo siguiente es crear una estructura con la capacidad de manteneruna relación... se puede recurrir a clases y encapsular en ellas toda la operatoria necesaria, pero requiere un prediseño y conlleva cierto tiempo, en cambio sobre la marcha resulta más sencillo explicar usando estructuras de datos simples.
Esta estructura se basa en el esquema 1º que explicamos
' esta estructura equivale a recrear los campos de la tabla 1 Dia concreto
Private Type DiasDeSemana
Items As Long ' cuantos guardas trabajan ese día, equivale al contador de registros de la 'tabla'.
Id_Guarda() As Long ' id del guarda, registros de la 'tabla' día
' NombreDia as string
End Type
Dim Semana(0 To 6) As DiasDeSemana ' hace las veces de cada tabla día
dim Id_Dia As Long
La 'tabla' tblGuardas tiene su equivalente en la matriz Guardas, porque cada elemento tiene 2 datos un índice en la matriz (campo id_guarda) y un valor de cadena en dicho índice (campo Nombre).
También como se ve, recreamos la 'tabla' accesoria tblDias, que como dijimos es prescindible, podríamos poner un control de tipo scroll con valores numerados del 0 al 6 y un label que diga que representan dichos valores... pero para proceder con combobox, y meter los nombres de los días... la usamos...
(también podríamos haber añadido un campo e la estructura DiasDesemana (tabla tblDias) llamado NombreDia y con ello prescindir completamente de la matriz Dias(), no lo he hecho para que quede así, más claro el código, en la estructura se muestra comentado dicho campo....).
Y ahora lo siguiente es recrear las relaciones, presta atención... como el campo id_guarda es una matriz, (una matriz siempre quivale a recrear una tabla de 2 campos donde uno es un índice y el otro un valor según el tipo de datos que guarde la matriz). al caso usamos una matriz porque damos por hecho que en un concreto pueden trabajar más de 1 guarda, si no es así, en vez de una matriz bastaría con un dato simple.
Private Sub Form_Load()
Dim k as long
Dias = Split(d, ",")
Guardas = Split(g, ",")
' Cantidad de Registros de cada 'tabla' de días de la semana
Semana(0).Items = 2
Semana(1).Items = 0
Semana(2).Items = 0
Semana(3).Items = 3
Semana(4).Items = 3
Semana(5).Items = 2
Semana(6).Items = 2
' redimensionamos para que cada 'tabla' tenga el nº de regisros indicado.
For k = 0 To 6
If Semana(k).Items > 0 Then
ReDim Semana(k).Id_Guarda(0 To Semana(k).Items - 1)
End If
Next
' Ahora marcamos la relaciones
' Lunes
Semana(0).Id_Guarda(0) = 0 ' antonio
Semana(0).Id_Guarda(1) = 1 ' Juan
' Martes
' Miércoles
' Jueves
Semana(3).Id_Guarda(0) = 2 ' Luis
Semana(3).Id_Guarda(1) = 3 ' Valentín
Semana(3).Id_Guarda(2) = 4 ' Diego
' viernes
Semana(4).Id_Guarda(0) = 5 ' Rodrigo
' Sábado
Semana(5).Id_Guarda(0) = 6 ' Sebastián
Semana(5).Id_Guarda(1) = 7 ' Pedro
' Domingo
Semana(6).Id_Guarda(0) = 2 ' Luis"
Semana(6).Id_Guarda(1) = 8 ' Roberto
End Sub
Ahora sólo nos resta rellenar los combos... el combo de días de la semana...
' esto se pone al final del form load....
Combo1.Clear
For k = 0 To 6
Combo1.AddItem (Dias(k))
Next
Combo1.ListIndex = 0 ' selecciona el primer elemento...
Y finalmente el código cuando se elige un elemento del combo1 para mostrar los items relacionados en el combo2:
Private Sub Combo1_Click()
Dim k As Long
Id_Dia = Combo1.ListIndex
Combo2.Clear
If Semana(Id_Dia).Items > 0 Then
For k = 0 To Semana(Id_Dia).Items - 1
Combo2.AddItem (Guardas(Semana(Id_Dia).Id_Guarda(k)))
Next
Combo2.ListIndex = 0
End If
End Sub
Si creas un proyecto nuevo, añades 2 controles combo al formulario e introduces todo el código que he puesto y ejecutas el proyecto, verás como la selección se produce y se realiza en base a la relación que existe entre los datos.
Es un proyecto simple, pero así se evita distracciones y complicaciones ajenas a la relación.
Si todavía te queda alguna duda, por favor concreta, haz preguntas concretas y precisas y aporta los datos necesarios para no caer en suposiciones que alarguen la respuesta más de lo necesario.