Como Hacer Para Enlasar Dos Combobox Y Un Columnview(base De Datos Sqlite3)


Objetivo: Como Hacer Para Enlasar Dos Combobox Y Un Columnview(base De Datos Sqlite3)
Hola tengo una base de datos en la cual hay tres tablas (materia(id_materia, nombre_materia), grado(id_grado, nombre_grado), registro_materia(id_registro, id_materia, id_grado), (una materia se puede dar en varios grados y un grado tiene varias materias))

Tengo dos combobox cb_materia, cb_grado
Lo que necesito hacer es que cuando despiege cb_grado me aparezca el nombre de los grados(sexto, septimo, etc.) y al seleccionar sexto en el combobox cb_materia me aparezca los nombres de las materias(ingles, español, etc) registradas para ese grado(sexto) cuando selecciono la materia(ingles) debe aparcerme en un columnview una lista con los logros de esa materia(ingles) para ese grado(sexto)

la tabla de los logros es la siguiente (logro(id_logro, nombre_logro, valor_logro, id_registro_materia))

en un modulo tengo la conexion a la base de datos y aqui mismo lleno los combobox
Asi lleno el combobox cb_grado (el primer hresul me muestra la materia pero por codigo no por nombre, el segundo hresul(comentado) me muestra el nombre pero no se como ligarlo con las materias, el primer clave4 va con el primer hresul y el segundo clave4(comentado) va con el segundo hresul)

Public Sub listado_gra(lista_gra As ComboBox)

Dim Clave4 As String

hConn = ConectarBase()
lista_gra.Add("Seleccionar")
hresul = hConn.Exec("select DISTINCT id_grado from tb_registro_materia")
' hresul = hConn.Exec("Select * from tb_grado")
Do While hresul.Available
Clave4 = hresul["id_grado"]
' Clave4 = hresul["nombre_grado"]
lista_gra.Add(Clave4)
hresul.MoveNext()
Loop

End


No tengo muy claro como llenar el segundo combobox cb_materia hasta el momento tengo esto:

Public Sub listado_mat(lista_mat As ComboBox)
Dim filtro As String
Dim Clave1 As String
filtro = Ver_Logros.cb_grado.Text
hConn = ConectarBase()
lista_mat.Add("Selecionar")
hresul = hConn.Exec("select id_materia from tb_registro_materia")
filtro = hresul!id_grado
' hresul = hConn.Exec("Select * from tb_materia")
Do While hresul.Available
Clave1 = hresul["id_materia"]
' Clave1 = hresul["name_materia"]
lista_mat.Add(Clave1)
hresul.MoveNext()
Loop

End


En el formulario principal tengo esto:

Private hConn As Connection
Private hresul As Result

Public Sub Form_Open()

Me.Center

If Not Exist(User.Home &/ "Documents/Arshal/prog_gambas_pro/draft_notes/db_rn")
Try Mkdir User.Home &/ "Documents/Arshal/prog_gambas_pro/draft_notes"
Copy "db_rn" To User.Home &/ "Documents/Arshal/prog_gambas_pro/draft_notes/db_rn"
Endif

tabla.Clear
hConn = general.ConectarBase()
general.listado_gra(cb_grado)

End

Public Sub cb_grado_Change()

If cb_grado.Text = "Seleccionar" Then
cb_mat.Clear()
Else
cb_mat.Clear()
general.listado_mat(cb_mat)
Endif

End

Public Sub cb_mat_Change()
Dim x As String
If cb_mat.Text = "seleccionar" Then
tabla.Clear()
Else
tabla.Clear
hConn = general.ConectarBase()

tabla.Columns.Count = 4
tabla.Columns[0].text = "Id logro"
tabla.Columns[0].Width = 50
tabla.Columns[0].Alignment = Align.Center
tabla.Columns[1].text = "Logro"
tabla.Columns[1].Alignment = Align.Center
tabla.Columns[1].Width = 120
tabla.Columns[2].text = "Id Registro de materia"
tabla.Columns[2].Alignment = Align.Center
tabla.Columns[2].Width = 50
tabla.Columns[3].text = "Valor del logro"
tabla.Columns[3].Alignment = Align.Center
tabla.Columns[3].Width = 20


hresul = hconn.Exec("Select * from tb_logro")
Do While hresul.Available
x = hresul["id_logro"]

tabla.Add(x, x)

tabla[x][1] = hresul["nombre_logro"]
tabla[x][2] = hresul["id_registro_materia"]
tabla[x][3] = hresul["valor_logro"]

hresul.MoveNext()

Loop


Endif

End


De antemano muchas gracias por su ayuda

última edición por miguel perez el Jueves, 05 Diciembre 2013, 19:28; editado 1 vez
Perfil MP  
Objetivo: Re: Como Hacer Para Enlasar Dos Combobox Y Un Columnview(base De Datos Sqlite3)
A ver si te he entendido: El problema es que cuando el usuario selecciona el primer combo, que muestra el nombre, tú quieres que en el segundo combo se actualice la lista según la clave correspondientes al valor seleccionado del primer combo.
Para esto hay una técnica muy sencilla:Utiliza la propiedad .tag del combo para almacenar las claves. Más o menos sería esto:
Public function Form_Open() 'en el formulario cargamos el primer combo al abrir.

dim r as result
dim aclaves as string[] 'o integer, según el tipo de campo que componga la clave

r=miconexion.exec("select campo_clave, campo_nombre from mitabla")
while r.available
combo1.Add(r!campo_nombre)
aClaves.Add(r!campo_clave)
r.movenext
wend
combo1.tag=aClaves
end


Con esto tienes en el combo1 la lista de nombres y en su propiedad tag la lista de claves correspondientes. Luego en el evento change:

Public sub combo1_change()
'hacemos lo mismo que antes, pero con la tabla2
dim r as result
dim aclaves as string[] 'o integer, según el tipo de campo que componga la clave

r=miconexion.exec("select campo_clave2, campo_nombre2 from mitabla2 where campo_relacion2 = &1",combo1.tag[combo1.index]) 'seleccionamos en la tabla 2 según el índíce del combo 1
combo2.Clear 'Importante!!
while r.available
combo2.Add(r!campo_nombre2)
aClaves.Add(r!campo_clave2)
r.movenext
wend
combo2.tag=aClaves

end


En el evento change del combo2 rellenarías el combo3 de la misma manera.

Así consigues que el propio control contenga las claves que relacionan las tablas y muestren siempre lo que quieres

Espero que te sirva.

Saludos

última edición por shordi el Jueves, 05 Diciembre 2013, 19:54; editado 1 vez
Perfil MP  

Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.5264s (PHP: -62% SQL: 162%)
Consultas SQL: 47 - Debug off - GZIP Activado