Bilder in Access komprimieren?
Moinsen,
Ich erstelle gerade eine Datenbank zur Inventur. Mein Arbeitgeber hat sich gewünscht, dass jeder eingetragene Artikel ein Foto im Formular angezeigt bekommt. Dies funktioniert soweit auch ganz gut. Die Bilder werden als Typ Anlage abgespeichert. Ich habe jetzt allerdings das Problem, dass die Datenbank nach nicht einmal 180 Bildern schon auf 422 MB angewachsen sind. Die Bilder sind unkomprimiert und die Qualität massiv zu hoch.
Gibt es eine Möglichkeit die Bilder automatisiert zu verkleinern? Wenn ich jedes einzelne Bild manuell komprimieren und neu einbinden muss, würde mich das eine Menge Zeit kosten... Die Funktion Datenbank komprimieren hat leider keinerlei Einfluss auf die Bilder.
Danke
2 Antworten
Speichere die Bilder in einem Verzeichnis auf deiner Festplatte und in Access nur den Pfad\Dateiname.
Du hast eine Kopie der Datenbank pro Client? Mach mal eine Skizze die die Infrastruktur darstellt.
Ein Netzlaufwerk freigeben das bei allen Computern gleich heißt.
Die Datenbank ist auf einem Netzlaufwerk auf welches verschiedene PCs zugreifen. Ich habe aber keine Kontrolle darüber, wie die jeweils dort das Laufwerk eingebunden haben. Es muss auf jeden Fall pfadunabhägig sein. Kann ich irgendwie einfach im Ordner der Datenbank arbeiten ohne einen absoluten Pfad zu verwenden?
Das hab ich mittlerweile gelöst.
Ich bräuchte aber trotzdem noch Hilfe: Es soll einen Knopf geben, der einem die Möglichkeit gibt ein Bild zu wählen. Dieses Bild muss dann in den Bilder-Ordner der Datenbank Kopiert werden, damit auch andere PCs die Bilder sehen können. Bloß wie mache ich das? Ich habe leider nicht besonders viel Erfahrung mit Access.
Ich würde das über Scripting.FileSystemObject machen daß du über Verweise zuerst hinzufügen musst.
Hier noch ein paar nützliche Funktionen für das Verzeichnis-Handling:
Option Explicit
Dim FSO As Scripting.FileSystemObject
Public Function GenerateFolder(ByVal Pfad As String) As Boolean
If FSO.FolderExists(Pfad) Then
GenerateFolder = True
Else
If FolderCreateAble(Pfad) Then
If FSO.FolderExists(FSO.GetParentFolderName(Pfad)) Then
Call FSO.CreateFolder(Pfad)
GenerateFolder = FSO.FolderExists(Pfad)
Else
If GenerateFolder(FSO.GetParentFolderName(Pfad)) Then
Call FSO.CreateFolder(Pfad)
GenerateFolder = FSO.FolderExists(Pfad)
End If
End If
End If
End If
End Function
Public Function FolderCreateAble(ByVal Pfad As String) As Boolean
If IsValidPath(Pfad) Then
Do While Not FSO.FolderExists(Pfad) And Len(Trim(Pfad)) > 0
Pfad = FSO.GetParentFolderName(Pfad)
Loop
FolderCreateAble = Len(Pfad) > 0
End If
End Function
Public Function IsValidPath(Pfad As String) As Boolean
Select Case True
Case Len(Trim(Pfad)) = 0
Case InStr(1, Pfad, "/") > 0
Case InStr(1, Pfad, ":") > 2
Case InStr(1, Pfad, "*") > 0
Case InStr(1, Pfad, "?") > 0
Case InStr(1, Pfad, Chr(34)) > 0
Case InStr(1, Pfad, "<") > 0
Case InStr(1, Pfad, ">") > 0
Case InStr(1, Pfad, "|") > 0
Case Else
IsValidPath = True
End Select
End Function
Public Function IsValidFileName(FileName As String) As Boolean
Select Case True
Case Len(Trim(FileName)) = 0
Case InStr(1, FileName, "\") > 0
Case InStr(1, FileName, "/") > 0
Case InStr(1, FileName, ":") > 0
Case InStr(1, FileName, "*") > 0
Case InStr(1, FileName, "?") > 0
Case InStr(1, FileName, Chr(34)) > 0
Case InStr(1, FileName, "<") > 0
Case InStr(1, FileName, ">") > 0
Case InStr(1, FileName, "|") > 0
Case Else
IsValidFileName = True
End Select
End Function
Public Function FileCreateAble(ByVal Pfad As String) As Boolean
If IsValidFileName(FSO.GetFileName(Pfad)) Then
If FolderCreateAble(FSO.GetParentFolderName(Pfad)) Then
FileCreateAble = True
End If
End If
End Function
das würde bedeuten, dass ich alle bilder neu verknüpfen müsste. oder gibt es einen anderen weg?
Schreib ein Programm, der diese Aufgabe erledigt. Von Hand kann das evtl. lange dauern (hängt von der Anzahl der Bilder ab).
http://www.chip.de/downloads/Der-grandiose-Bildverkleinerer_42536802.html
Ich würde aber zusätzlich einen Ordner "Thumbnails" erstellen, die Thumbnails in der Datenbank abspeichern und mit einem Hyperlink zu dem Ordner mit den Bildern in der endgültigen Bildgröße versehen.
zudem habe ich dann das problem, dass ich keinen gleichen pfad habe (soll auf unterschiedlichen geräten verwendet werden)