DatenbankManufaktur

Anwendungen so individuell wie Ihr Unternehmen   –   Office- und VBA-Erfahrung seit 1995

Bilddateien gehören nicht in eine Datenbank

Wie man diese Dateien einliest und anzeigt demonstriert diese Beispieldatenbank.

So sieht es aus

Da Bilddateien viel Platz wegnehmen, gehören diese nicht in eine Access-Datenbank, die (je nach Version) nur 1 - 2 GB groß werden kann. Mit der Dir-Funktion kann man die Bilddateien eines Ordners einlesen, die Pfade zu einer Datei speichern und diese dann einfach in einem Formular anzeigen.

Mit einem Verzeichnis-/Dateiauswahl-Dialog kann man das Beispiel weiter aufbohren und in seine eigene Anwendung einbauen.

Die Dateien können nur angezeigt werden, wenn die entsprechenden Graphikfilter installiert sind. Dies ist bei den meisten (aber leider nicht allen) Office-Installationen der Fall.

Da die Dateinamen in die RowSource-Eigenschaft des Listenfeldes geschrieben werden, ist dieses Beispiel auf eine Anzahl Dateien beschränkt, deren Namen zusammen nicht mehr als 2048 Zeichen (einschl. Trennzeichen) beträgt. Um mehr Dateien anzuzeigen, könnte man die Dateinamen in eine Tabelle importieren, und deren Inhalt dann im Listenfeld anzeigen. Und wie das geht, zeigt dieses Beispiel.

Code-Schnipsel

-----------------------------------------------
Private Sub fBildAuswahl()

   Dim strPfad As String
   Dim strDatei As String
   Dim strBilder As String

   ' Namen in Pfad anzeigen, die keine Verzeichnisse darstellen.
   strPfad = Me!txtPfad    ' Pfad setzen.
   strDatei = Dir(strPfad, vbDirectory)    ' Ersten Eintrag abrufen.
   Do While strDatei <> ""    ' Schleife beginnen.
       ' Aktuelles und übergeordnetes Verzeichnis ignorieren.
      If strDatei <> "." And strDatei <> ".." Then
         If (GetAttr(strPfad & strDatei) <> vbDirectory) Then
            If Right$(strDatei, 3) = "jpg" Or _
               Right$(strDatei, 3) = "gif" Or _
               Right$(strDatei, 3) = "bmp" Or _
               Right$(strDatei, 3) = "png" Then
               If Len(strBilder) + Len(strDatei) + 1 > 2048 Then
                  MsgBox "Es können nicht alle Bilder angezeigt werden."
                  Exit Do
               Else
                  strBilder = strBilder & strDatei & ";"
               End If
            End If
         End If
      End If
      strDatei = Dir    ' Nächsten Eintrag abrufen.
   Loop

   If Len(strBilder) > 0 Then                  ' wenn Bilder vorhanden sind
      Me!lstBilder.RowSource = strBilder      '   Bilderauswahl füllen
      Me!lstBilder = Me!lstBilder.ItemData(0) '   erstes Bild wählen
      Call fBildAnzeigen                      '   Bild anzeigen
   Else                                        ' sonst
      Me!lstBilder.RowSource = ""             '   Bildauswahl löschen
      Me!picBild.Picture = ""                 '   Bild löschen
   End If
End Sub
-----------------------------------------------

[ Download ]  [ nach oben ]