Access VBA - Gespeicherten Import ausführen


#1
Hallo zusammen,

ich bin im Moment etwas ratlos :unsure:

Ich habe als Datenquelle eine .csv Datei und hole mir von dort per gespeichertem Import die Daten ab. Aktuell nutze ich hierzu folgenden Code:

Visual Basic:
Private Sub butMedImport_Click()
If Dir("\\server\Daten\07. Pflege\Medikation (Klienten) für Datenbank.csv") <> "" Then
DoCmd.RunSavedImportExport "ImportMed"
Else
MsgBox "Keine Datei zum Import vorhanden!"
End If
End Sub
Mein Problem ist, dass dieser Befehl einfach nicht ausgeführt wird, wenn auf die Zieltabelle "tblMedikation" zugegriffen wird. Es gibt keine Fehlermeldung o.ä.. Wenn ich den Import manuell ausführe meldet Access mir den Fehler dass die Tabelle zur Zeit bearbeitet wird.

Kann ich das Ersetzen der Datei erzwingen oder irgendwie den Fehler abgreifen, damit ich dem User klar machen kann, dass der Import nicht erfolgreich war?

Vielen Dank im Voraus!

LG
 
Zuletzt bearbeitet:
#2
Hallo,

habe jetzt etwas gebastelt und die Antwort gefunden :)

Zur Vollständigkeit hier mein Code:

Visual Basic:
Private Sub butMedImport_Click()
Dim rs As DAO.Recordset

'Überprüfen ob die Tabelle in Verwendung ist
On Error Resume Next
Set rs = CurrentDb().OpenRecordset("tblMedikation", dbOpenTable, dbDenyWrite Or dbDenyRead)
If Err Then
MsgBox "Daten werden aktuell verwendet, bitte später noch einmal versuchen!"
Else
rs.Close

'Überprüfen ob Datei vorhanden ist
If Dir("\\server\Daten\07. Pflege\Medikation (Klienten) für Datenbank.csv") <> "" Then
'Import
DoCmd.RunSavedImportExport "ImportMed"
'Updatedatum im Textfeld aktualisieren
Me!txtLastUpdate.Caption = "Letzter erfolgreicher Import: " & CurrentDb.TableDefs("tblMedikation").LastUpdated
'Alte Datei löschen
On Error Resume Next
   Kill "\\server\Daten\07. Pflege\Medikation (Klienten) für Datenbank.csv"
Else
MsgBox "Keine Datei zum Import vorhanden!"
End If
End If
End Sub
Könnte wahrscheinlich noch etwas aufgehübscht werden, aber er funktioniert. (y):)


Grüße aus dem Westerwald
 

Yaslaw

n/a
Moderator
#3
Nur einige Style-Tips

Vor allem mit formatieren.
Einrücken, damit man sieht, welcher If wo endet.

Um eine ganze Funktion nach der ersten Prüfung abzubrechen, kann man exit verwenden. Dann mus nicht alles bis zur unkenntlichkeit verschachtelt sein

Zudem setzt du On Error Resume Next 2 mal. Nach dem ersten mal ist es für den ganzen Restcode gesetzt.
Das ist nicht schön, denn so findest du auch keine Fehler.
Normalweise setzt man das wieder zurück
Visual Basic:
On Error Resume Next
    Set rs = CurrentDb().OpenRecordset("tblMedikation", dbOpenTable, dbDenyWrite Or dbDenyRead)
On Error Goto 0
Visual Basic:
Private Sub butMedImport_Click()
    Dim rs As DAO.Recordset

    'Überprüfen ob die Tabelle in Verwendung ist
    On Error Resume Next
        Set rs = CurrentDb().OpenRecordset("tblMedikation", dbOpenTable, dbDenyWrite Or dbDenyRead)
        If Err.Number <> 0 Then
            MsgBox "Daten werden aktuell verwendet, bitte später noch einmal versuchen!"
            Exit Sub
        End If
    On Error Goto 0
    rs.Close
    Set rs = Nothing

    'Überprüfen ob Datei vorhanden ist
    If Dir("\\server\Daten\07. Pflege\Medikation (Klienten) für Datenbank.csv") = "" Then 
        MsgBox "Keine Datei zum Import vorhanden!"
        Exit Sub
    End If

    'Alles da wo es sein soll, also den Prozess ausführen

    'Import
    DoCmd.RunSavedImportExport "ImportMed"
    'Updatedatum im Textfeld aktualisieren
    Me!txtLastUpdate.Caption = "Letzter erfolgreicher Import: " & CurrentDb.TableDefs("tblMedikation").LastUpdated
    
    'Alte Datei löschen
    On Error Resume Next
       Kill "\\server\Daten\07. Pflege\Medikation (Klienten) für Datenbank.csv"
    On Error Goto 0
End Sub