¿Cómo relacionar en otra tabla imagen con access?
He diseñado un programa con access para desarrollar una liga por equipos.
Me gustaría que en la tabla de Jornadas saliera el logo del equipo que tengo en la tabla de Equipos. De tal forma que pueda hacer un logo Vs logo de cada equipo.
Gracias de antemano y felicidades por esta gran web, no podría haber hecho el programa sin vosotros.
1 respuesta
Lo primero de todo. Abre el editor de VB y pulsa Herramientas-Referencias y activa la casilla Microsoft Office XX.X Object Library
Lo de XX. X es por la versión del Office que tengas instalado.
Puedes hacerlo de muchas, muchas formas. Vamos a suponer que tienes la tabla Equipos, con Idequipo, Nombre y Logo. Con ella haces un formulario como el de la imagen, y en vista diseño abre el editor de VB y pega la función
Public Function buscaArchivo() As String
Dim fDialog As Office.FileDialog
Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
With fDialog
.AllowMultiSelect = False
.ButtonName = "Seleccionar"
.Title = "Seleccionar el archivo"
.InitialFileName = Application.CurrentProject.Path
.InitialView = msoFileDialogViewDetails
.Filters.Clear
.Filters.Add "All files", "*.*"
If .Show = True Then
buscaArchivo = .SelectedItems(1)
Else
MsgBox "Ha pulsado el botón <Cancelar>."
End If
End With
End Function
En vista diseño del formulario añádele un control imagen y llámalo, por ejemplo, ImagenLogo

Cuando el cursor llegue al control Logo se abrirá un explorador para que localices su imagen

Una vez localizada y aceptada

Te vas al siguiente registro y más de lo mismo.
Ahora vamos a suponer que tienes una tabla Jornadas, con NumJornada, EquipoLocal, EquipoVisitante,... Con ella haces tambien un formulario, al que añadirás dos controles imagen. ImagenLocal, ImagenVisitante

Cuando elijo al Depor
Y en visitante elijo al Villareal

No sé que mierda le pasa a la página que no me deja seguir.
El código del formulario Equipos es
Private Sub Form_Current() If Me.NewRecord Then Logo = "" Else ImagenLogo.Picture = Logo End If End Sub Private Sub Logo_GotFocus() Logo = buscaArchivo() ImagenLogo.Picture = Logo End Sub
Y el código del formulario Jornadas es
Private Sub Form_Current()
If Not IsNull([Local]) Then
ImagenLocal.Picture = DLookup("logo", "equipos", "nombre='" & Me.Local & "'")
End If
If Not IsNull([Visitante]) Then
ImagenVisitante.Picture = DLookup("logo", "equipos", "nombre='" & Me.Visitante & "'")
End If
End Sub
Private Sub Local_AfterUpdate()
ImagenLocal.Picture = DLookup("logo", "equipos", "nombre='" & Me.Local & "'")
End Sub
Private Sub Visitante_AfterUpdate()
ImagenVisitante.Picture = DLookup("logo", "equipos", "nombre='" & Me.Visitante & "'")
End Sub
Muchisimas gracias Icue González, he buscado por todos sitios y no supe encontrar el metodo. De esta manera quedaria la imagen guardada en la base de datos? Si no se quedara en la base de datos, se podria modificar algo para ello?
Muchisimas gracias. Estoy trabajando fuera de casa y no podre provarlo hasta el fin de semana, ya te comentare. Saludos.
Efectivamente te lo guarda en el campo Logo de la tabla Equipos. Realmente lo que te guarda es la ruta a esa imagen. El problema de usar campos OLE es que "engordan" la base un montón, mientras que tal como te lo he puesto prácticamente no ocupa nada.
En el caso de que los logos de los equipos los tuvieras todos en una misma carpeta, sobraría todo lo que te señale en la anterior respuesta. Y si esos logos se guardaran, por ejemplo, con el mismo nombre del equipo, aún sería más sencillo.
El archivo lo vamos a utilizar varios administradores, desde la nuve, por eso preguntaba de incorporar en el mismo access las imagenes. Seran 16 equipos, por lo que calculo unos 20 megas asumibles(no se si 20 megas suponen mas en OLE).
Me sabe mal el currazo que te has pegado si hay alguna manera mas simple de hacerlo, disculpame por no haber especificado mejor desde el principio lo que necesitaba. Pero como podria hacerlo guardando las imagenes en el access.
Muchas gracias, y siento las molestias.
Buenas tardes. Siento mucho no entender la respuesta, Estuve trabajando fuera de casa y no pude hacer pruebas. Llevo un rato buscando por Internet pero no encuentro como hacer la relación del campo OLE. lamento dar una imagen de noob pero es lo que soy :)
Yo siempre relaciono para que me salga un valor de una tabla automáticamente en otra columna de la segunda tabla, de la siguiente manera después de crear una columna de búsqueda y relación en la tabla y una columna vacía con el nombre por ejemplo "logo", en un botón del formulario en el evento después de actualizar:
If IsNumeric(Equipo) Then
logo = [Equipo].[Column](2)
End If
En según que ocasiones mando datos a otra tabla a través de un botón introduciendo el siguiente código (pongo al principio borrar tabla para no duplicar al darle dos veces si me confundo):
DoCmd.SetWarnings False
DoCmd.RunSQL "delete*from jornadas"
Dim rstRecorrer As DAO.Recordset
Dim rstInsertar As DAO.Recordset
Set rstRecorrer = CurrentDb.OpenRecordset("Select * from Equipos")
Set rstInsertar = CurrentDb.OpenRecordset("Select * from Jornadas")
While Not rstRecorrer.EOF
rstInsertar.AddNew
rstInsertar!logo = rstRecorrer!Equipoatacantelogo
rstInsertar.Update
rstRecorrer.MoveNext
Wend
rstRecorrer.Close
rstInsertar.Close
Set rstInsertar = Nothing
Set rstRecorrer = Nothing
De ninguna de las dos maneras he conseguido hacerlo con archivos adjuntos ni con OLE....
Se que para vosotros debe ser fácil, pero para mi esta siendo un infierno. Llevo muchas horas invertidas en google para intentar que se vean las imágenes en jornadas.
Disculpa que sea tan patoso, quizás tengo delante la solución pero no atino.
- Compartir respuesta