Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Origineel KB-nummer: 285820
Notitie
Vereist professionele codering, interoperabiliteit en vaardigheden voor meerdere gebruikers. Dit artikel is van toepassing op een Microsoft Access-database (.mdb/.accdb) en op een Microsoft Access-project (.adp).
Soms is het niet praktisch om afbeeldingen op te slaan in een Microsoft Access-tabel. Als u veel afbeeldingen hebt of als elk van uw afbeeldingsbestanden groot is, kan de grootte van het Microsoft Access-databasebestand snel toenemen.
In dit artikel wordt een aangepaste functie beschreven die u kunt gebruiken om het volgende te doen:
- Bestandspaden en namen van afbeeldingen opslaan in een tabel.
- Afbeeldingen weergeven met behulp van een besturingselement voor afbeeldingen.
- Het besturingselement afbeelding verbergen als er geen afbeelding beschikbaar is.
- Geef feedback over de weergavestatus van de afbeelding.
Dit artikel bevat ook een voorbeeld van een Visual Basic-script dat u kunt gebruiken om de afbeeldingen weer te geven op een Data Access-pagina.
Notitie
Hoewel in dit voorbeeld bitmapafbeeldingen (.bmp) worden gebruikt, kunt u ook andere typen afbeeldingen gebruiken, zoals .jpg, .pcx en .gif.
Microsoft verstrekt programmeervoorbeelden alleen ter illustratie, zonder expliciete of impliciete garantie. daaronder mede begrepen, maar niet beperkt tot impliciete garanties met betrekking tot de verkoopbaarheid en/of geschiktheid voor een bepaald doel. In dit artikel wordt ervan uitgegaan dat u bekend bent met de programmeertaal VBScript, alsmede met de hulpprogramma's waarmee procedures worden gemaakt en waarmee fouten in procedures worden opgespoord. U kunt desgewenst contact opnemen met Microsoft Product Support Services voor uitleg over de functie van een bepaalde procedure. Microsoft Product Support Services is echter niet bereid de voorbeelden aan te passen om extra functies toe te voegen of om procedures te maken die aan uw specifieke eisen voldoen.
Open de voorbeelddatabase, Northwind.mdb of het voorbeeldproject NorthwindCS.adp.
Maak de volgende tabel in Northwind.mdb of 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
Open de tabel tblImage in de gegevensbladweergave en voeg vervolgens het pad en de naam van een bitmapbestand toe aan elke record. In de volgende tabel met voorbeelden ziet u hoe de records eruit kunnen zien:
Type Voorbeeld Absoluut (lokaal) C:\Windows\Zapotec.bmp Absoluut (UNC-pad) \\Servername\sharename\Zapotec.bmp Relatieve Zapotec.bmp
Maak een nieuwe module en plak of typ de volgende code:
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
Sla de module op als Module1.
Maak het volgende nieuwe formulier dat is gebaseerd op de tabel 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>
Notitie
Als u niet wilt dat het pad wordt weergegeven in het formulier, kunt u de
Visible
eigenschap van hettxtImageName
besturingselement instellen op Onwaar.Klik in het menu Beeld op Code en plak of typ de volgende code:
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
Open het formulier frmImage in de formulierweergave. Houd er rekening mee dat in het formulier de bijbehorende bitmap voor elke record wordt weergegeven. Als het
txtImageName
veld leeg is of als de afbeelding niet kan worden gevonden, ontvangt u de juiste berichten in plaats van het afbeeldingsframe.
Maak het volgende nieuwe rapport dat is gebaseerd op de tabel 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>
Notitie
Als u niet wilt dat het pad in het rapport wordt weergegeven, kunt u de
Visible
eigenschap van hettxtImageName
besturingselement instellen op Onwaar.Klik in het menu Beeld op Code en plak of typ de volgende code:
Option Compare Database Option Explicit Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer) Me!txtImageNote = DisplayImage(Me!ImageFrame, Me!txtImageName) End Sub
Open het rptImage-rapport in afdrukvoorbeeld. Houd er rekening mee dat in het rapport de bijbehorende bitmap voor elke record wordt weergegeven. Als het
txtImageName
veld leeg is of als de afbeelding niet kan worden gevonden, ontvangt u de juiste berichten in plaats van het afbeeldingsframe.
Maak de volgende nieuwe Data Access-pagina die is gebaseerd op de tabel 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
Notitie
Als u niet wilt dat het pad op de pagina wordt weergegeven, kunt u de
Visibility
eigenschap van hettxtImageName
besturingselement instellen op Verborgen.Wijs in het menu Extra de optie Macro's aan en klik op Microsoft Script Editor.
Voeg het volgende script toe aan de huidige gebeurtenis van de MSODSC in het koplabelgedeelte van het HTML-document.
Notitie
U moet een parameter doorgeven om de gebeurtenis te activeren.
<SCRIPT language=vbscript event=Current(oEventInfo) for=MSODSC> <!-- ImageFrame.src=txtImageName.value --> </SCRIPT>
Open de pagina dapImage in de paginaweergave. Houd er rekening mee dat op de pagina de bijbehorende bitmap voor elke record wordt weergegeven. Als het veld txtImageName leeg is, wordt er een besturingselementpictogram weergegeven. Als de afbeelding niet kan worden gevonden, wordt een X-pictogram weergegeven in het besturingselement afbeelding.
Als u een http:// pad in een formulier wilt gebruiken, gebruikt u het webbrowserbesturingselement (shdocvw.dll) als volgt:
Voeg een Microsoft Web Browser-besturingselement toe aan het formulier en geef dit de naam Webbrowser.
Voeg de volgende code toe aan een module:
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
Voeg de volgende code achter het formulier toe:
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