DatenbankManufaktur

Es ist eine neue, verbesserte
Version 2.0
zum Download verfügbar.

Das Importieren von Daten in eine Datenbank

Wie Sie Daten häufig importieren, ohne die Datenbank mehr als nötig aufzublähen.

Wenn man regelmäßig Daten in eine Datenbank importiert und wieder löscht, bläht sich die Datenbank immer weiter auf, bis man sie komprimiert und damit den freien Platz wieder freigibt. Mit ein paar Zeilen Code kann man den Platzverbrauch auf die größte zu importierende Datenmenge beschränken.

Statt jedes Mal die vorhandenen Daten zu löschen und neue einzufügen, kann man auch die vorhandenen Daten überschreiben. Müssen mehr Sätze eingefügt werden als vorhanden, werden diese angehängt. Bei weniger Sätzen werden die überzähligen geleert. Bei der Auswahl muss man nur noch beachten, dass die leeren Datensätze nicht mit angezeigt werden.

Die Einlese-Prozedur

Private Sub sBilderEinlesen()

   Dim dbs As Database
   Dim rst As Recordset
   Dim lngTblCount As Long
   Dim lngFileCount As Long
   Dim lngPicCount As Long
   Dim strPfad As String
   Dim strDatei As String
   
   Set dbs = CurrentDb
   Set rst = dbs.OpenRecordset("tblBilder")        ' Tabelle öffnen
   
   If Not rst.EOF Then                             ' Immer erst zum letzten DS gehen,
      rst.MoveLast                                 ' bevor man die Anzahl feststellt
      rst.MoveFirst
   End If
   
   lngTblCount = rst.RecordCount                   ' Anzahl vorhandene DS in Tabelle
   
   strPfad = Me!txtPfad                            ' Pfad setzen.
   strDatei = Dir(Me!txtPfad, vbDirectory)         ' Erste Datei im Verzeichnis abrufen
   
   Do While strDatei <> ""                         ' Solange noch Dateien da sind, einlesen
      ' Aktuelles und übergeordnetes Verzeichnis ignorieren.
      If strDatei <> "." And strDatei <> ".." Then
         ' Mit bit-weisem Vergleich sicherstellen, dass es kein Verzeichnis ist.
         If (GetAttr(strPfad & strDatei) <> vbDirectory) Then
            lngFileCount = lngFileCount + 1
            If Right(strDatei, 3) = "jpg" Or _
               Right(strDatei, 4) = "jpeg" Or _
               Right(strDatei, 3) = "gif" Or _
               Right(strDatei, 3) = "tif" Or _
               Right(strDatei, 3) = "bmp" Or _
               Right(strDatei, 3) = "png" Or _
               Right(strDatei, 3) = "wmf" Then
               lngPicCount = lngPicCount + 1
               If lngPicCount < lngTblCount Then  ' Wenn schon DS in der Tabelle sind, diese überschreiben
                  rst.Edit
                  rst!bil_Name = strDatei
                  rst.Update
                  rst.MoveNext
               ElseIf lngPicCount = lngTblCount Then
                  rst.Edit
                  rst!bil_Name = strDatei
                  rst.Update
               Else                                ' sonst neue DS einfügen
                  rst.AddNew
                  rst!bil_Name = strDatei
                  rst.Update
               End If
            End If
         End If
      End If
      strDatei = Dir
   Loop
   
   Do While lngPicCount <= lngTblCount            ' alle übrigen DS auf NULL setzen
      lngPicCount = lngPicCount + 1
      If lngPicCount < lngTblCount Then
         rst.Edit
         rst!bil_Name = Null
         rst.Update
         rst.MoveNext
      ElseIf lngPicCount = lngTblCount Then
         rst.Edit
         rst!bil_Name = Null
         rst.Update
      End If
   Loop
   
   DoEvents
   Me!lstBilder.Requery                         '   Liste mit Tabellendaten füllen/erneuern
   DoEvents
   
   If Me!lstBilder.ListCount > 0 Then             ' wenn Bilder vorhanden sind
      Me!lstBilder = Me!lstBilder.ItemData(0)   '   erstes Bild wählen
      Call sBildAnzeigen                        '   Bild anzeigen
   Else                                         ' sonst
      Me!lstBilder.RowSource = ""               '   Bildauswahl löschen
      Me!picBild.Picture = ""                   '   Bild löschen
   End If

   On Error Resume Next
   rst.Close
   dbs.Close
   Set rst = Nothing
   Set dbs = Nothing
   
End Sub

Tipp

Wenn Sie die Dateien nicht dauerhaft in der Datenbank benötigen, können Sie auch mit einer temporären "Tabelle" arbeiten. In der Tippdatenbank Dateien auflisten mit einem temporären Recordset zeige ich ein Beispiel, bei dem sogar das Anzeigen mehrerer Dateiparameter und das Sortieren nach Dateiname oder Parameter möglich ist.

Download

Import für Access 2016 (und neuer)
(Datei: Import.zip, ca. 60 KB)

Bitte denken Sie daran, dass Sie die Datei(en) nach dem Download Zulassen müssen.
Hier steht, warum und wie.