A volte risulta poco pratico memorizzare le immagini in una
tabella di Microsoft Access. Se le immagini sono numerose o di grandi
dimensioni, la dimensione del file del database di Microsoft Access può
aumentare rapidamente.
In questo articolo viene illustrata una
funzione personalizzata che è possibile utilizzare per:
Memorizzare i percorsi e i nomi file delle immagini in una
tabella.
Visualizzare le immagini mediante un controllo
immagine.
Nascondere il controllo immagine se non sono disponibili
immagini.
Fornire informazioni sullo stato di visualizzazione
dell'immagine.
Questo articolo contiene inoltre un esempio di script di Visual
Basic che è possibile utilizzare per visualizzare le immagini in una pagina di
accesso ai dati.
NOTA: sebbene in questo esempio vengano utilizzate immagini bitmap
(bmp), è possibile utilizzare anche altri tipi di immagini, 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 procedura, ma in nessun caso a modificare
questi esempi per fornire funzionalità aggiuntive o a creare procedure atte a
soddisfare specifiche esigenze.
Creazione della tabella per la memorizzazione di dati su file e percorsi
Aprire il database di esempio Northwind.mdb o il progetto
di esempio NorthwindCS.adp.
Creare la seguente tabella in Northwind.mdb o in
NorthwindCS.adp.
In Northwind.mdb:
Tabella: tblImage
---------------------------------------
Nome campo: ImageID
Tipo dati: AutoNumber
Indicizzato: Sì (Duplicati non ammessi)
Nome campo: txtImageName
Tipo dati: Text
Proprietà tabella: tblImage
---------------------------
ChiavePrimaria: ImageID
In NorthwindCS.adp:
Tabella: tblImage
------------------------------
Nome colonna: ImageID
TipoDati: Int
Ammetti Null: Non selezionata
Identità: Sì
Nome colonna: txtImageName
TipoDati: varchar
Proprietà tabella: ImageTable
-----------------------------------
Vincolo di chiave primaria: ImageID
Aprire la tabella tblImage in visualizzazione Foglio dati,
quindi aggiungere il percorso e il nome di un file bitmap a ciascun record.
Nella seguente tabella di esempi viene illustrato come potrebbero apparire i
record:
Creare un nuovo modulo, quindi incollare o digitare il
seguente codice:
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
Utilizzo della funzione personalizzata in una maschera
Creare la nuova maschera seguente basata sulla tabella
tblImage.
Maschera: frmImage
------------------------
Etichetta: Image Form
OrigineRecord: tblImage
Controllo immagine
----------------------------------
Nome: ImageFrame
Immagine: "C:\Windows\Zapotec.bmp"
Casella di testo
-------------------------
Nome: txtImageID
OrigineControllo: ImageID
Casella di testo
------------------------------
Nome: txtImageName
OrigineControllo: txtImageName
Casella di testo
-------------------------
Nome: txtImageNote
OrigineControllo: <Vuoto>
NOTA: se si desidera che il percorso non venga visualizzato nella
maschera, è possibile impostare la proprietà Visibile del controllo txtImageName su False.
Scegliere Codice dal menu Visualizza, quindi incollare o digitare il seguente codice:
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 in visualizzazione Maschera.
Nella maschera viene visualizzata la bitmap corrispondente per ogni record. Se
il campo txtImageName è vuoto o se non è possibile trovare l'immagine, vengono
visualizzati i messaggi appropriati anziché la cornice
dell'immagine.
Utilizzo della funzione personalizzata in un report
Creare il nuovo report seguente basato sula tabella
ImageTable.
Report: rptImage
-----------------------
Etichetta: Image Report
OrigineRecord: tblImage
Controllo immagine
----------------------------------
Nome: ImageFrame
Immagine: "C:\Windows\Zapotec.bmp"
Casella di testo
-------------------------
Nome: txtImageID
OrigineControllo: ImageID
Casella di testo
------------------------------
Nome: txtImageName
OrigineControllo: txtImageName
Casella di testo
-------------------------
Nome: txtImageNote
OrigineControllo: <Vuoto>
NOTA: se si desidera che il percorso non venga visualizzato nel
report, è possibile impostare la proprietà Visibile del controllo txtImageName su False.
Scegliere Codice dal menu Visualizza, quindi incollare o digitare il seguente codice:
Option Compare Database
Option Explicit
Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer)
Me!txtImageNote = DisplayImage(Me!ImageFrame, Me!txtImageName)
End Sub
Riaprire il report rptImage in anteprima di stampa. Nel
report viene visualizzata la bitmap corrispondente per ogni record. Se il campo
txtImageName è vuoto o se non è possibile trovare l'immagine, vengono
visualizzati i 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.
Pagina di accesso ai dati: dapImage
-----------------------------------
Titolo: Image Data Access Page
Controllo immagine
------------------
ID: ImageFrame
Casella di testo
-------------------------
ID: txtImageID
OrigineControllo: ImageID
Casella di testo
------------------------------
ID: txtImageName
OrigineControllo: txtImageName
NOTA: se si desidera che il percorso non venga visualizzato nella
pagina, è possibile impostare la proprietà Visibilità del controllo txtImageName su Nascosto.
Scegliere Macro dal menu Strumenti, quindi scegliere Microsoft Script Editor.
Aggiungere il seguente script all'evento corrente di MSODSC
nella parte di tag HEAD del documento HTML.
NOTA: è necessario passare un parametro per attivare l'evento.
Aprire la pagina dapImage in visualizzazione Pagina. 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 l'icona
di una X.
Utilizzo di un percorso http:// path in una maschera
Per utilizzare un percorso http:// in una maschera, utilizzare il
controllo browser Web (shdocvw.dll) come segue:
Aggiungere un controllo browser Web alla maschera e
denominarlo WebBrowser.
Aggiungere a un modulo il seguente codice:
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 seguente codice dietro la maschera:
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
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.
Lasciare un commento su queste informazioni
Queste informazioni hanno risolto il problema?
Sì
No
Non so
Queste informazioni erano pertinenti?
Sì
No
In che modo possiamo migliorarle?
Per salvaguardare la privacy, non includere informazioni personali nei commenti.
Grazie. I commenti e suggerimenti forniti verranno utilizzati per migliorare la qualità dei contenuti di supporto tecnico. Per ulteriori opzioni di assistenza, visitare la home page del Supporto Tecnico Microsoft.