VBA Tipp: Download einer Datei aus dem Internet und Import in eine Access Datenbank

Aus DBWiki
Wechseln zu: Navigation, Suche

Anforderung

Ich möchte eine Datei aus dem Internet herunterladen. Der Download erfolgt über das http-Protokoll.

  • Lösung 1:
    • Der "Speichern unter"-Dialog wird eingeblendet, um den Speicherort der Datei auszuwählen.
    • Nach dem Download wird das "Download beendet"-Fenster angezeigt.
    • Nach dem Download kann der Dateiinhalt in eine Access-Tabelle importiert werden.
  • Lösung 2:
    • Die Datei wird sofort ohne Meldung heruntergeladen, und im vorgegebenen Pfad gespeichert.

Lösung 1

Das geht mit der folgenden API-Deklaration und Funktion, die in einem globalen Modul hinterlegt werden.
Die API-Funktion DoFileDownload stammt von der ActiveVB-Seite und wurde auf VBA angepasst. Diese Funktion startet den Download-Dialog des Internet-Explorer.

Private Declare Function DoFileDownload Lib "shdocvw.dll" ( _
                         ByVal lpszFile As String _
                         ) As Long
 
 
Public Function download_myFile(URL As String)
 
 Dim UniCodeURL As String
 
 'in Unicode konvertieren 
 UniCodeURL = StrConv(URL, vbUnicode)
 DoFileDownload UniCodeURL
 
End Function

Aufruf

Angewandt am Beispiel der Outputdatei eines Online-Games:

download_myFile "http://www.die-staemme.org/map/village.txt"


Der Dateiinhalt kann in eine Access-Tabelle importiert werden.
Die Importfunktion von Access sieht dann so aus:

DoCmd.TransferText acImportDelim, _
      "Village Importspezifikation", "T_VILLAGE", _
      "C:\TEMP\village.TXT", False, ""

Um den Import fehlerfrei über die Bühne zu bringen, sollte die Tabelle nicht indiziert sein. Wichtig ist auch, dass man den Aufbau des Textfiles kennt, und durch welches Zeichen die Datensätze getrennt werden. Am einfachsten ist es, die Textdatei anzuschauen, um das Trennzeichen zu finden.

Die Importspezifikation erstellt man durch Datei > Externe Daten, indem man die Textdatei auswählt, das Trennzeichen eingibt, die nötigen Informationen zum Import angibt, und diese speichert. Anschließend kann die Spezifikation ganz einfach in VBA verwendet werden.


Lösung 2

Das geht mit der folgenden API-Funktion und VBA-Funktion, die in einem globalen Modul hinterlegt werden.

Private Declare Function URLDownloadToFile Lib "urlmon.dll" Alias "URLDownloadToFileA" ( _
                         ByVal pCaller As Long, _
                         ByVal szURL As String, _
                         ByVal szFileName As String, _
                         ByVal dwReserved As Long, _
                         ByVal lpfnCB As Long) _
                         As Long
 
 
Public Function DateiHerunterladen(Url As String, Pfad As String) As Long
 
 'Quelle: http://www.dbwiki.net/
 
 DoCmd.Hourglass True
 DateiHerunterladen = URLDownloadToFile(0, Url, Pfad, 0, 0)
 DoCmd.Hourglass False
 
End Function

Aufruf

 Dim strUrl As String
 Dim strDatei As String
 
 strUrl = "http://www.meinedomain.de/update/MeineDatei.mdb"
 strDatei = CurrentProject.Path & "\MeineDatei.mdb"
 
 If DateiHerunterladen(strquellpfad, strzielpfad) = 0 Then
   MsgBox "Download erfolgreich"
 Else
   MsgBox "Download nicht erfolgreich"
 End If
Wiki hinweis.png Hinweis: Falls die Datei bereits existiert, wird sie ohne Vorwarnung überschrieben.


Web-Links