access zum Verwalten von Bildern?

Avariel

Erfahrenes Mitglied
Hallo zusammen

Mein Chef ist jetzt auf die Idee gekommen, das man doch Access nutzen könnte um sein umfangreiches Bilderarchiv n bisschen zu organisieren. Er stellt sich das ganze wohl so Suchmaschinen-Style vor, also er gibt in die Suchmaske ein: Müller & Meier, und dann werden alle Bilder aufgelistet, wo der Müller und der Meier drauf sind. Ist sowas mit Access überhaupt zu realisieren?

/me hofft auf nein, sonst bin ich das arme A****, das das machen darf.
 
klar, gehen tut das schon.
man muss halt einfach nur mit access basic alle verzeichnisse rekursiv durchlaufen, und alle bilddateien in eine tabelle schreiben. sollte aber nicht all zu schwer sein, sowas zu realisieren.

vorraussetzung ist nur, dass die bilder einen halbwegs eindeutigen dateinamen haben. und du müsstest irgendwie die systemverzeichnisse überspringen, sonst hast du auch so bilder wie "blauenoppen.bmp" mit drin. ;)

das suchen geht über eine simple abfrage (select ... from ... where ... like ...). bleibt nur die frage, wieviele bilder dabei zusammenkommen würden. access macht bei ein paar tausend datensätzen schnell mal schlapp.
 
ich hab dir auch schon mal etwas code dazu geschrieben. ist zwar nicht das schnellste, aber es funktioniert.
damit kannst du dann schonmal die bilder in die tabelle eintragen.

Code:
Option Compare Database
Option Explicit

Private Declare Sub FindClose Lib "kernel32" (ByVal hFindFile As Long)
Private Declare Function FindFirstFileA Lib "kernel32" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFileA Lib "kernel32" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function GetFileAttributesA Lib "kernel32" (ByVal lpFileName As String) As Long

Private Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type

Private Type WIN32_FIND_DATA
    dwFileAttributes As Long
    ftCreationTime As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime As FILETIME
    nFileSizeHigh As Long
    nFileSizeLow As Long
    dwReserved0 As Long
    dwReserved1 As Long
    cFileName As String * 260
    cAlternate As String * 14
End Type

Public Function FindFiles(ByVal Path As String, ByRef Files As Collection, Optional ByVal Pattern As String = "*.*", Optional ByVal Attributes As VbFileAttribute = vbNormal, Optional ByVal Recursive As Boolean = True) As Long
Const vbErr_PathNotFound = 76
Const INVALID_VALUE = -1
Dim FileAttr As Long
Dim FileName As String
Dim hFind As Long
Dim WFD As WIN32_FIND_DATA
  
'Initialisierung:
If Right$(Path, 1) <> "\" Then Path = Path & "\"
If Files Is Nothing Then Set Files = New Collection
Pattern = LCase$(Pattern)
  
'Suche starten:
hFind = FindFirstFileA(Path & "*", WFD)
If hFind = INVALID_VALUE Then
    Err.Raise vbErr_PathNotFound
End If

'Suche fortsetzen:
Do While FindNextFileA(hFind, WFD)
    FileName = LeftB$(WFD.cFileName, _
    InStrB(WFD.cFileName, vbNullChar))
    FileAttr = GetFileAttributesA(Path & FileName)

    If FileAttr And vbDirectory Then

    'Verzeichnis analysieren:
        If Recursive Then
            If FileAttr <> INVALID_VALUE And FileName <> "." And FileName <> ".." Then
                FindFiles = FindFiles + FindFiles(Path & FileName, Files, Pattern, Attributes)
            End If
        End If

    Else

    'Datei analysieren:
        If (FileAttr And Attributes) = Attributes Then
            If LCase$(FileName) Like Pattern Then
                FindFiles = FindFiles + 1
                Files.Add Path & FileName
            End If
        End If

    End If
Loop

FindClose hFind

End Function

Private Sub Befehl0_Click()
On Error GoTo 1

'Lokale Variablen und Objekte
Dim rs As ADODB.Recordset
Dim dateien As Collection
Dim i As Long

'Objekte initialisieren
Set rs = New ADODB.Recordset

rs.Open "SELECT * FROM bilder;", CurrentProject.Connection, adOpenStatic, adLockPessimistic, -1

If rs.RecordCount > 0 Then
    'Wenn schon Datensätze eingetragen worden sind, diese zuerst löschen, um Dupletten zu vermeiden.
    rs.MoveFirst
    Do While Not rs.EOF
        rs.Delete adAffectCurrent
        DoEvents
    Loop
End If
    
'Dateimuster (*.jpg) suchen und alle gefundenen Dateien in das Recordset eintragen
If FindFiles("C:", dateien, "*.jpg", vbArchive) Then
    For i = 1 To dateien.Count
        rs.AddNew
        rs!datei = dateien(i)
        rs.Update
        DoEvents
    Next i
    MsgBox "Es wurden " & CStr(dateien.Count) & " JPG-Bilder auf Laufwerk C: gefunden.", vbInformation, "Ergebnis"
Else
    MsgBox "Keine JPG-Bilder auf Laufwerk C: gefunden.", vbInformation, "Ergebnis"
End If

rs.Close

'Objekte zerstören
Set rs = Nothing

Exit Sub
1   MsgBox "Fehler 1: " & Err.Description

End Sub

müsstest du eventuell noch an deine bedürfnisse anpassen und die suchfunktion einbinden. wobei die suchfunktion nicht sonderlich schwer sein sollte.
wenn du noch was brauchst, dann meld dich nochmal bei mir. :)
 
Waaaahhh!! Du hast dir ja gleich den übelsten Stress gemacht! Danke schön dafür. Erst werd ich aber mal versuchen, das ganze auf jemand anderen abzuwälzen, bzw. auf andere Weise davon loszukommen. Weil,
/me ist ein Access Noob und ich hab recht wenig Bock mich einzuarbeiten. Falls ich trotz allem nicht drum rumkomme, wirds bestimmt neue Fragen von mir geben :p

Schade, ich hab gehofft das ganze läuft nicht unter Access...naja, man kann nicht alles haben ;)
 
*rofl* mein Chef ist Abteilungsleiter in einer Städtischen Kommune. Bedeutet: Alles unter dem Wert von ein paar Tausend Euro müssen irgendwelche armen Azubis erledigen, ab der Summe spielt Geld sowieso keine Rolle mehr, da kann man dann zulangen :)
 
Nö, sagt mir leider nix. Und wir sind in Schweinfurt (bzw. wir sind die Stadt Schweinfurt :) )
Falls dir das nix sagt: liegt in Bayern/Unterfranken
 
offtopic

doch, das sagt mir was. da bin ich sogar schonmal gewesen... (glaub ich :rolleyes: ).

was ist das denn für eine kommune? bzw. was macht ihr da? jugendarbeit?

ich glaub, das wird hier etwas zu offtopic :rolleyes:
 

Neue Beiträge

Zurück