Come visualizzare immagini da una cartella in una maschera, un report o una pagina di accesso ai dati
Numero KB originale: 285820
Nota
Richiede competenze esperte di codifica, interoperabilità e multiutente. Questo articolo si applica a un database di Microsoft Access (.mdb/.accdb) e a un progetto di Microsoft Access (con estensione adp).
Riepilogo
A volte, non è pratico archiviare immagini in una tabella di Microsoft Access. Se si dispone di molte immagini o se ognuno dei file di immagine è di grandi dimensioni, le dimensioni del file di database di Microsoft Access possono aumentare rapidamente.
Questo articolo illustra una funzione personalizzata che è possibile usare per:
- Archiviare i percorsi di file e i nomi delle immagini in una tabella.
- Visualizzare le immagini usando un controllo immagine.
- Nascondere il controllo immagine se non è disponibile alcuna immagine.
- Fornire commenti e suggerimenti sullo stato di visualizzazione dell'immagine.
Questo articolo contiene anche uno script visual basic di esempio che è possibile usare per visualizzare le immagini in una pagina di accesso ai dati.
Nota
Anche se questo esempio usa immagini bitmap (.bmp), è anche possibile usare altri tipi di immagine, ad esempio .jpg, pcx e .gif.
Microsoft fornisce esempi di programmazione a scopo puramente illustrativo, senza alcuna garanzia di qualsiasi tipo, sia espressa che implicita, ivi incluse, senza limitazioni, le garanzie implicite di commerciabilità o idoneità per uno scopo particolare. In questo articolo si presuppone che l'utente conosca il linguaggio di programmazione in questione e gli strumenti utilizzati per creare ed eseguire il debug delle procedure. Gli esperti Microsoft sono autorizzati a fornire spiegazioni in merito alla funzionalità di una particolare routine, ma in nessun caso a modificare questi esempi per fornire funzionalità aggiuntive o a creare routine atte a soddisfare specifiche esigenze.
Creazione della tabella per archiviare i dati di file e percorsi
Aprire il database di esempio, Northwind.mdb o il progetto di esempio NorthwindCS.adp.
Creare la tabella seguente in Northwind.mdb o in NorthwindCS.adp.
In 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
In 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
Aprire la tabella tblImage in visualizzazione Foglio dati e quindi aggiungere il percorso e il nome di un file bitmap a ogni record. La tabella di esempi seguente illustra l'aspetto dei record:
Tipo Esempio Assoluto (locale) C:\Windows\Zapotec.bmp Assoluto (percorso UNC) \\Servername\sharename\Zapotec.bmp Relativo Zapotec.bmp
Creazione della funzione personalizzata
Creare un nuovo modulo e quindi incollare o digitare il codice seguente:
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
Salvare il modulo come Module1.
Uso della funzione personalizzata in un modulo
Creare il nuovo modulo seguente basato sulla tabella 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
Se non si desidera che il percorso venga visualizzato nel modulo, è possibile impostare la
Visible
proprietà deltxtImageName
controllo su False.Scegliere Codice dal menu Visualizza e quindi incollare o digitare il codice seguente:
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
Aprire la maschera frmImage nella visualizzazione Maschera. Si noti che nel modulo viene visualizzata la bitmap corrispondente per ogni record. Se il
txtImageName
campo è vuoto o se non è possibile trovare l'immagine, si ricevono messaggi appropriati anziché la cornice dell'immagine.
Uso della funzione personalizzata in un report
Creare il nuovo report seguente basato sulla tabella 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
Se non si desidera che il percorso venga visualizzato nel report, è possibile impostare la
Visible
proprietà deltxtImageName
controllo su False.Scegliere Codice dal menu Visualizza e quindi incollare o digitare il codice seguente:
Option Compare Database Option Explicit Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer) Me!txtImageNote = DisplayImage(Me!ImageFrame, Me!txtImageName) End Sub
Aprire il report rptImage nell'anteprima di stampa. Si noti che nel report viene visualizzata la bitmap corrispondente per ogni record. Se il
txtImageName
campo è vuoto o se non è possibile trovare l'immagine, si ricevono messaggi appropriati anziché la cornice dell'immagine.
Duplicazione della funzione personalizzata in una pagina di accesso ai dati
Creare la nuova pagina di accesso ai dati seguente basata sulla tabella 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
Se non si desidera che il percorso venga visualizzato nella pagina, è possibile impostare la
Visibility
proprietà deltxtImageName
controllo su Nascosto.Scegliere Macro dal menu Strumenti e quindi fare clic su Microsoft Script Editor.
Aggiungere lo script seguente all'evento Current di MSODSC nella parte del tag HEAD del documento HTML.
Nota
È necessario passare un parametro affinché l'evento venga attivato.
<SCRIPT language=vbscript event=Current(oEventInfo) for=MSODSC> <!-- ImageFrame.src=txtImageName.value --> </SCRIPT>
Aprire la pagina dapImage nella visualizzazione Pagina. Si noti che nella pagina viene visualizzata la bitmap corrispondente per ogni record. Se il campo txtImageName è vuoto, viene visualizzata un'icona di controllo. Se non è possibile trovare l'immagine, nel controllo immagine viene visualizzata un'icona X.
Usare un percorso http:// in un modulo
Per usare un percorso http:// in un modulo, usare il controllo Web browser (shdocvw.dll) come indicato di seguito:
Aggiungere un controllo Microsoft Web Browser al modulo e denominarlo WebBrowser.
Aggiungere il codice seguente a un modulo:
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
Aggiungere il codice seguente dietro il modulo:
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
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per