Necesito información de cómo usar imágenes en informes

Llevo tiempo creando una aplicación y he llegado a un atasco. La aplicación es personalizable a cualquier empresa y uno de los datos personalizables es el anagrama. Con variables Public consigo mientras está abierta la aplicación disponer de ciertos datos de la empresa y pintarlos en cualquier informe que esté utilizando, pero a la hora de tratar el tema de imágenes, en este caso de anagramas, no sé como hacerlo. También he intentado mediante búsqueda en tabla de las imágenes (las tengo como campos de datos adjuntos) mediante instrucciones tipo dlookup, pero tampoco lo consigo. ¿Alguien podría orientarme un poco?

1 respuesta

Respuesta
2

Supongamos que en una carpeta Anagramas tienes la imágenes de Pescanova.jpg, El Pozo. jpg, Carrefour, etc. En la tabla crea un campo Foto y pon simplemente Pescanova, El Pozo, Carrefour

Luego en el formulario si tiene el cuadro de texto Foto, añádele un control imagen, y llámale pon ejemplo, Imagenfoto. Luego, en el evento Al activar el registro del formulario puedes poner

Dim Ruta As String
Ruta = "c:\users\cabarcos\documents\anagramas\" & [Foto] & ".jpg"

If Not IsNull(Me.Foto) Then

Me.Imagenfoto.Picture = Ruta

Else

Me.Imagenfoto.Picture = ""

End If

Lógicamente la ruta tienes que cambiarla y poner la tuya.

En el caso del informe, tendrías que ponerlo en el evento Al dar formato de la sección donde esté el control imagen

En caso de que el nombre de la imagen no estuviera en la tabla y quisieras escribirla en el cuadro de texto Foto del formulario, con poner, en el evento después de actualizar de este cuadro

Dim Ruta As String
Ruta = "c:\users\cabarcos\documents\anagramas\" & [Foto] & ".jpg"
Me.Imagenfoto.Picture = Ruta

En caso de que no quieras que el cuadro de texto Foto no se vea en el formulario, lo puedes poner como

Me.ImagenFoto.Picture = "C:\users\cabarcos\documents\anagramas" & "\" & DLookup("foto", "clientes", "idcliente=" & Me.Idcliente & "") & "" & ".jpg"

Agradezco tus respuestas Icue, aunque me gustaría hacerlo con las imágenes incrustadas en la base de datos. En realidad se trata de una tabla que sólo tiene un registro con datos de configuración de la empresa cliente. Uno de los campos de esta tabla sería el fichero gráfico que contiene el anagrama.

Lo que tú me propones es hacerlo en base a rutas vinculadas, técnica que ya he usado en otros casos, y que se recomienda hacerlo cuando son muchos registros y se corre el riesgo de saturar las BBDD.

En realidad lo que quiero es poder seleccionar el archivo desde un formulario que recoge datos de configuración  y asignarlo al campo de la tabla de configuración, que como te he dicho sólo tiene un registro. Hasta ahí lo tengo más o menos hecho. El problema me surje en los informes que genera la aplicación, y que están basados en tablas de proceso que no contienen  dicho campo. Como decía en mi pregunta, con varias variables residentes en memoria tengo los datos básicos de la empresa para disponer de ellos al diseñar los informes, pero este datos del anagrama que es de tipo imagen no soy capaz de meterlo de manera fácil. Estoy lográndolo ahora creando dentro del informe un subinforme basado en dicha tabla de configuración, pero siento que estoy matando una mosca  a cañonazos. Debe haber una opción más sencilla.

No sé si me he explicado bien, pero te quedo muy agradecido.

Saludos

Voy a suponer cosas, corrígeme si me equivoco. Tu le vas a dar la base a cada cliente. Y él tiene que elegir su anagrama. Supongo que los datos de ese cliente en particular los guardarás en una tabla. Añádele un campo Archivo texto. Luego, en el formulario donde ese cliente introduce sus datos ponle un cuadro de texto Archivo, con origen del control en el campo Archivo, y si quieres ponlo como oculto. En el editor de VB crea 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

Luego le pones un botón Buscar Anagrama y en sus propiedades-eventos-al hacer clic le pones

Archivo = buscaArchivo()
Me.Foto.Picture = Archivo

Y en el evento Al activar el registro del formulario, por si lo usara para otras cosas

If IsNull([Archivo]) Then
Exit Sub
Else
Me.Foto.Picture = Archivo
End If

Me explico. Cuando pulse el botón se abre un navegador para que busque EN SU ORDENADOR la ruta a su anagrama, y ya le queda guardada, per secula... y en el control imagen ya te aparece su anagrama.

Luego en los informes sólo tendrías que poner algo así como

Me.Foto.Picture = DLookup("archivo", "DatosCliente", "idcliente=" & Me.Idcliente & "")

Acuérdate de, en el editor de VB, en Referencias, activar la casilla de Microsoft XX. Object Library( el XX depende de la versión del Office que tengas instalada)

Gracias Icue. Semana complicada de viajes, pero en cuanto tenga un rato lo pruebo.

HOLA ICUE, SOBRE TU ULTIMO MENSAJE EN NEGRITA  TE TRASLADO LOS PROBLEMAS QUE ME DA. BASICAMENTE ES QUE NO ENTIENDO LO DE me.foto.picture

Voy a suponer cosas, corrígeme si me equivoco. Tu le vas a dar la base a cada cliente. Y él tiene que elegir su anagrama. Supongo que los datos de ese cliente en particular los guardarás en una tabla. Ok

Añádele un campo Archivo texto. Entiendo que me dices que agregue en la tabla un campo de texto que se llama ‘Archivo’. Es Ok?

Luego, en el formulario donde ese cliente introduce sus datos ponle un cuadro de texto Archivo, con origen del control en el campo Archivo, y si quieres ponlo como oculto. Hecho

En el editor de VB crea 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

Esta función ya la tengo disponible y funciona correctamente cuando pulse el boton

Luego le pones un botón Buscar Anagrama y en sus propiedades-eventos-al hacer clic le pones

Archivo = buscaArchivo()

Me.Foto.Picture = Archivo. Esto me da error al compilar

¿Qué es foto.picture? ¿Hace referencia a un campo de la tabla, a un cuadro de texto del formulario o a una variable?

Y en el evento Al activar el registro del formulario, por si lo usara para otras cosas

If IsNull([Archivo]) Then
Exit Sub
Else
Me.Foto.Picture = Archivo AQUI ME VUELVE A DAR ERROR
End If

Me explico. Cuando pulse el botón se abre un navegador para que busque EN SU ORDENADOR la ruta a su anagrama, y ya le queda guardada, per secula... y en el control imagen ya te aparece su anagrama.

Luego en los informes sólo tendrías que poner algo así como

Me.Foto.Picture = DLookup("archivo", "DatosCliente", "idcliente=" & Me.Idcliente & "")DE  NUEVO EN EL INFORME OBTENGO ERROR

 

Acuérdate de, en el editor de VB, en Referencias, activar la casilla de Microsoft XX. Object Library( el XX depende de la versión del Office que tengas instalada). COMPROBADO QUE OFICCE 2016 ESTA MARCADO

 

Creo que lo mejor es que me mandes un mensaje(solo el mensaje) a [email protected] y te mando un ejemplo., que es como mejor se ve. Si lo haces, en el asunto del mensaje pon tu alias Marcelo Marín, ya que si no sé quien me escribe ni los abro.

Todos los errores son consecuencia de como llames a los controles de los formularios. Una cosa es el valor que guardan, que lo tienes en sus propiedades-datos-origen del control y otro es como realmente se llaman y al que hay que hacer referencia tanto en VB como en SQL que lo tienes en sus propiedades-otras nombre.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas