Cómo mostrar imágenes de una carpeta en un formulario, un informe o una página de acceso a datos
Número de KB original: 285820
Nota:
Requiere conocimientos expertos de codificación, interoperabilidad y multiusuario. Este artículo se aplica a una base de datos de Microsoft Access (.mdb/.accdb) y a un proyecto de Microsoft Access (.adp).
Resumen
A veces, no resulta práctico almacenar imágenes en una tabla de Microsoft Access. Si tiene muchas imágenes o si cada uno de los archivos de imagen es grande, el tamaño del archivo de base de datos de Microsoft Access puede aumentar rápidamente.
En este artículo se muestra una función personalizada que puede usar para:
- Almacene las rutas de acceso de archivo y los nombres de las imágenes en una tabla.
- Mostrar imágenes mediante un control de imagen.
- Oculte el control de imagen si no hay ninguna imagen disponible.
- Proporcione comentarios sobre el estado de visualización de la imagen.
Este artículo también contiene un script de Visual Basic de ejemplo que puede usar para mostrar las imágenes en una página de acceso a datos.
Nota:
Aunque en este ejemplo se usan imágenes de mapa de bits (.bmp), también puede usar otros tipos de imagen, como .jpg, .pcx y .gif.
Microsoft proporciona ejemplos de programación con fines ilustrativos únicamente, sin ninguna garantía, ya sea expresa o implícita. Esto incluye, entre otras, las garantías implícitas de comerciabilidad e idoneidad para un fin determinado. Se considera que está familiarizado con el lenguaje de programación que se muestra y con las herramientas para crear y depurar procedimientos. Los ingenieros de soporte técnico de Microsoft pueden explicarle la funcionalidad de un determinado procedimiento, pero no modificarán estos ejemplos para ofrecer mayor funcionalidad ni crearán procedimientos adaptados a sus necesidades específicas.
Creación de la tabla para almacenar datos de archivo y ruta de acceso
Abra la base de datos de ejemplo, Northwind.mdb o el proyecto de ejemplo NorthwindCS.adp.
Cree la tabla siguiente en Northwind.mdb o en NorthwindCS.adp.
En Northwind.mdb:
Table: tblImage ---------------------------- Field Name: ImageID Data Type: AutoNumber Indexed: Yes (No Duplicates) Field Name: txtImageName Data Type: Text Table Properties: tblImage -------------------------- PrimaryKey: ImageID
En NorthwindCS.adp:
Table: tblImage ----------------------- Column Name: ImageID Datatype: Int Allow Nulls: Unchecked Identity: Yes Column Name: txtImageName Datatype: varchar Table Properties: ImageTable ------------------------------- Primary Key Constraint: ImageID
Abra la tabla tblImage en la vista Hoja de datos y agregue la ruta de acceso y el nombre de un archivo de mapa de bits a cada registro. En la tabla siguiente de ejemplos se muestra el aspecto de los registros:
Tipo Ejemplo Absoluto (local) C:\Windows\Zapotec.bmp Absoluto (ruta de acceso UNC) \\Servername\sharename\Zapotec.bmp Relative Zapotec.bmp
Creación de la función personalizada
Cree un nuevo módulo y, a continuación, pegue o escriba el código siguiente:
Option Compare Database Option Explicit Public Function DisplayImage(ctlImageControl As Control, strImagePath As Variant) As String On Error GoTo Err_DisplayImage Dim strResult As String Dim strDatabasePath As String Dim intSlashLocation As Integer With ctlImageControl If IsNull(strImagePath) Then .Visible = False strResult = "No image name specified." Else If InStr(1, strImagePath, "\") = 0 Then ' Path is relative strDatabasePath = CurrentProject.FullName intSlashLocation = InStrRev(strDatabasePath, "\", Len(strDatabasePath)) strDatabasePath = Left(strDatabasePath, intSlashLocation) strImagePath = strDatabasePath & strImagePath End If .Visible = True .Picture = strImagePath strResult = "Image found and displayed." End If End With Exit_DisplayImage: DisplayImage = strResult Exit Function Err_DisplayImage: Select Case Err.Number Case 2220 ' Can't find the picture. ctlImageControl.Visible = False strResult = "Can't find image in the specified name." Resume Exit_DisplayImage: Case Else ' Some other error. MsgBox Err.Number & " " & Err.Description strResult = "An error occurred displaying image." Resume Exit_DisplayImage: End Select End Function
Guarde el módulo como Module1.
Uso de la función personalizada en un formulario
Cree el siguiente formulario nuevo basado en la tabla tblImage.
Form: frmImage ---------------------- Caption: Image Form RecordSource: tblImage Image Control --------------------------------- Name: ImageFrame Picture: "C:\Windows\Zapotec.bmp" Text box ---------------------- Name: txtImageID ControlSource: ImageID Text box --------------------------- Name: txtImageName ControlSource: txtImageName Text box --------------------------- Name: txtImageNote ControlSource: <Blank>
Nota:
Si no desea que la ruta de acceso aparezca en el formulario, puede establecer la
Visible
propiedad deltxtImageName
control en False.En el menú Ver , haga clic en Código y, a continuación, pegue o escriba el código siguiente:
Option Compare Database Option Explicit Private Sub Form_AfterUpdate() CallDisplayImage End Sub Private Sub Form_Current() CallDisplayImage End Sub Private Sub txtImageName_AfterUpdate() CallDisplayImage End Sub Private Sub CallDisplayImage() Me!txtImageNote = DisplayImage(Me!ImageFrame, Me!txtImageName) End Sub
Abra el formulario frmImage en la vista Formulario. Tenga en cuenta que el formulario muestra el mapa de bits correspondiente para cada registro. Si el
txtImageName
campo está en blanco o si no se encuentra la imagen, recibirá los mensajes adecuados en lugar del marco de imagen.
Uso de la función personalizada en un informe
Cree el siguiente informe nuevo basado en la tabla ImageTable.
Report: rptImage ---------------------- Caption: Image Report RecordSource: tblImage Image Control --------------------------------- Name: ImageFrame Picture: "C:\Windows\Zapotec.bmp" Text box ---------------------- Name: txtImageID ControlSource: ImageID Text box --------------------------- Name: txtImageName ControlSource: txtImageName Text box --------------------------- Name: txtImageNote ControlSource: <Blank>
Nota:
Si no desea que la ruta de acceso aparezca en el informe, puede establecer la
Visible
propiedad deltxtImageName
control en False.En el menú Ver , haga clic en Código y, a continuación, pegue o escriba el código siguiente:
Option Compare Database Option Explicit Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer) Me!txtImageNote = DisplayImage(Me!ImageFrame, Me!txtImageName) End Sub
Abra el informe rptImage en vista previa de impresión. Tenga en cuenta que el informe muestra el mapa de bits correspondiente para cada registro. Si el
txtImageName
campo está en blanco o si no se encuentra la imagen, recibirá los mensajes adecuados en lugar del marco de imagen.
Duplicación de la función personalizada en una página de acceso a datos
Cree la siguiente página de acceso a datos que se basa en la tabla tblImage.
Data Access Page: dapImage ----------------------------- Title: Image Data Access Page Image Control --------------------------------- ID: ImageFrame Text box ---------------------- ID: txtImageID ControlSource: ImageID Text box --------------------------- ID: txtImageName ControlSource: txtImageName
Nota:
Si no desea que la ruta de acceso aparezca en la página, puede establecer la
Visibility
propiedad deltxtImageName
control en Oculto.En el menú Herramientas, seleccione Macros y, a continuación, haga clic en Microsoft Script Editor.
Agregue el siguiente script al evento Current del MSODSC en la parte de etiqueta HEAD del documento HTML.
Nota:
Debe pasar un parámetro para que se desencadene el evento.
<SCRIPT language=vbscript event=Current(oEventInfo) for=MSODSC> <!-- ImageFrame.src=txtImageName.value --> </SCRIPT>
Abra la página dapImage en la vista Página. Tenga en cuenta que la página muestra el mapa de bits correspondiente para cada registro. Si el campo txtImageName está en blanco, se muestra un icono de control. Si no se encuentra la imagen, aparece un icono X en el control de imagen.
Uso de una ruta de acceso de http:// en un formulario
Para usar una ruta de acceso de http:// en un formulario, use el control del explorador web (shdocvw.dll) como se indica a continuación:
Agregue un control Microsoft Web Browser al formulario y asígnele el nombre WebBrowser.
Agregue el código siguiente a un módulo:
Public Function DisplayImageWeb(ctlBrowserControl As Control, _ strImagePath As Variant) On Error GoTo Err_DisplayImage Dim strDatabasePath As String Dim intSlashLocation As Integer With ctlBrowserControl If IsNull(strImagePath) Then ElseIf Left(strImagePath, 4) = "http" Then .Navigate (strImagePath) Else If InStr(1, strImagePath, "\") = 0 Then ' Path is relative strDatabasePath = CurrentProject.FullName intSlashLocation = InStrRev(strDatabasePath, "\", Len(strDatabasePath)) strDatabasePath = Left(strDatabasePath, intSlashLocation) strImagePath = strDatabasePath & strImagePath End If .Navigate (strImagePath) End If End With Exit_DisplayImage: Exit Function Err_DisplayImage: Select Case Err.Number Case Else MsgBox Err.Number & " " & Err.Description Resume Exit_DisplayImage: End Select End Function
Agregue el código siguiente detrás del formulario:
Option Compare Database Option Explicit Private Sub Form_AfterUpdate() CallDisplayImage End Sub Private Sub Form_Current() CallDisplayImage End Sub Private Sub txtImageName_AfterUpdate() CallDisplayImage End Sub Private Sub CallDisplayImage() DisplayImageWeb Me.WebBrowser9, Me.txtImageName End Sub
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de