Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Credit Os Cine
Credit Os Cine
NUESTRAS TABLAS.
Ya que el ejemplo habla de “créditos de película”, vamos a plantear una mini-BD para registrar
películas y algunos datos de ellas. Para ello contaremos con 3 tablas interrelacionadas (¡ojo!
faltan muchos campos para ser una aplicación funcional, pero para el ejemplo sirve
perfectamente, pues lo interesante es que pilléis la mecánica) con la siguiente estructura:
TPeliculas:
TActores:
TCasting:
1
Visítame en http://neckkito.siliconproject.com.ar
La tercera tabla nos sirve para simular una relación varios a
varios entre las dos primeras tablas. Los campos Pelicula y
Actor están creados con el asistente de búsqueda, y a estas
alturas creo que todo el mundo debería saber cómo. Las
tablas quedan relacionadas de la siguiente manera:
NUESTROS FORMULARIOS.
1ª Opción: Cuadro de lista:
A la hora de desarrollar el ejemplo, mi primer impulso fue trabajar con un cuadro de lista.
Entonces necesitamos un formulario (lo llamaré FCreditoLst) con un cuadro de lista
independiente (lo llamaré lstCreditos), con Origen de la fila en “lista de valores” , con una
única columna y Bloqueado: Sí.
A mí me ha quedado una cosa así:
Para ese alto de cuadro de lista, he comprobado que me cogen 20 filas, algo que hay que tener
en cuenta luego en el código.
La idea es crear y rellenar una colección, y luego traspasar los elementos de esa colección al
2
Visítame en http://neckkito.siliconproject.com.ar
cuadro de lista. También se podría hacer directamente en el cuadro de lista, pero luego es un
poco más lioso manejar el efecto…
Para crear y rellenar la colección, creamos el siguiente código en el
módulo del formulario:
Dim miColeccion As Collection
Dim i As Integer
miColeccion.Add ""
Next i
'Añado el "título", el director y algún texto y líneas en blanco para hacerlo bonito
Set rst = CurrentDb.OpenRecordset("SELECT * FROM TPeliculas WHERE ID=1")
miColeccion.Add UCase(rst("Titulo"))
miColeccion.Add ""
miColeccion.Add "DIRECTED BY"
miColeccion.Add CStr(rst("Director"))
miColeccion.Add ""
miColeccion.Add "CASTING"
'Recorro una consulta sobre las tablas TCasting y TActores y voy añadiendo los registros a la colección
Set rst = CurrentDb.OpenRecordset("SELECT TCasting.ID, TCasting.Pelicula, TActores.Actor, TCasting.Personaje
FROM TActores INNER JOIN TCasting ON TActores.IDActor = TCasting.Actor WHERE TCasting.Pelicula=1")
rst.MoveFirst
Do Until rst.EOF
rst.MoveNext
Loop
rst.Close
Set rst = Nothing
End Sub
Como se puede ver no tiene nada de complicado: por medio del método Add, vamos
añadiendo elementos a la colección, teniendo en cuenta que cada elemento será una fila del
cuadro de lista.
Para rellenar el cuadro de lista, hacemos otro procedimiento, en el que recorreremos todos los
elementos de la colección, los pasamos al cuadro de lista con AddItem y lo recargamos:
Private Sub rellenaLista()
Me.lstCreditos.RowSource = ""
For i = 1 To miColeccion.Count
Me.lstCreditos.AddItem miColeccion(i)
Next i
3
Visítame en http://neckkito.siliconproject.com.ar
Me.lstCreditos.Requery
End Sub
miColeccion.Remove 1
rellenaLista
Else
Me.TimerInterval = 0
End If
End Sub
En el evento “Al cargar”, llamamos a los procedimientos anteriores, para rellenar la colección y
pasarlo al cuadro de lista y activamos el intervalo de cronómetro, en el ejemplo, a medio
segundo (u otro valor que os guste más)
En el evento “Al cronómetro”, mientras haya elementos en la colección (If miColeccion.Count>0)
eliminamos el primer elemento (miColeccion.Remove 1) y rellenamos el cuadro de lista. Cuando la
colección quede vacía, paramos el cronómetro.
4
Visítame en http://neckkito.siliconproject.com.ar
2ª Opción: Cuadro de texto:
Para solucionar el problema del centrado, se me ocurrió
probar con un cuadro de texto. Si copiáis el formulario
anterior, lo renombráis como FCreditosTxt, lo abrís en Vista
Diseño y cambiáis el cuadro de lista por uno de texto (ver
imagen), las modificaciones en el código son mínimas.
Next i
End Sub
5
Visítame en http://neckkito.siliconproject.com.ar
Set rst = CurrentDb.OpenRecordset("SELECT TCasting.ID, TCasting.Pelicula, TActores.Actor, TCasting.Personaje
FROM TActores " _
rst.MoveNext
Loop
'Añado unas líneas en blanco para que desaparezca el texto
For i = 1 To 25
miColeccion.Add ""
Next i
rst.Close
Set rst = Nothing
End Sub
6
Visítame en http://neckkito.siliconproject.com.ar