Tabelle temporär sperren


#1
Hallo zusammen!

Ich habe in meiner Datenbank eine Tabelle namens tblMedikation. Über eine qry können die Nutzer aus dieser die patientenbezogene Medikation auslesen.

Die Tabelle muss aber immer wieder durch einen gespeicherten Import ersetzt werden. Das Problem ist, dass dieser Import fast nie möglich ist, da immer ein User gerade auf die Tabelle zugreift.

Meine Frage: Ist es möglich per VBA die Tabelle temporär zu sperren um den Import durchzuführen? Hier ist mein Code für den Import:

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


DoCmd.Close acForm, "Bestellliste", acSaveYes
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
If Dir("\\server\Daten\07. Pflege\Medikation (Klienten) für Datenbank.csv") <> "" Then
DoCmd.RunSavedImportExport "ImportMed"
Me!txtLastUpdate.Caption = "Letzter erfolgreicher Import: " & CurrentDb.TableDefs("tblMedikation").LastUpdated
On Error Resume Next
   Kill "\\server\Daten\07. Pflege\Medikation (Klienten) für Datenbank.csv"
Else
MsgBox "Keine Datei zum Import vorhanden!"
End If
DoCmd.OpenForm "Bestellliste"
Forms("Bestellungen verwalten").SetFocus
End If
End Sub
 

Zvoni

Erfahrenes Mitglied
#2
Das dbDenyWrite irritiert mich. Lass das mal weg, und kommentier das rs.close aus (oder setze es nach dem Import)
 
#3
Vielen Dank für die schnelle Antwort!

Wenn ich das dbDenyWrite weglasse wird der Import nicht ausgeführt.

Hier mein aktueller Code:
Code:
Private Sub butMedImport_Click()
Dim rs As DAO.Recordset


'DoCmd.Close acForm, "Bestellliste", acSaveYes
On Error Resume Next
Set rs = CurrentDb().OpenRecordset("tblMedikation", dbOpenTable, dbDenyRead)
If Err Then
MsgBox "Daten werden aktuell verwendet, bitte später noch einmal versuchen!"
Else

If Dir("\\server\Daten\07. Pflege\Medikation (Klienten) für Datenbank.csv") <> "" Then
DoCmd.RunSavedImportExport "ImportMed"
rs.Close
Me!txtLastUpdate.Caption = "Letzter erfolgreicher Import: " & CurrentDb.TableDefs("tblMedikation").LastUpdated
On Error Resume Next
   Kill "\\server\Daten\07. Pflege\Medikation (Klienten) für Datenbank.csv"
Else
MsgBox "Keine Datei zum Import vorhanden!"
End If
'DoCmd.OpenForm "Bestellliste"
'Forms("Bestellungen verwalten").SetFocus
End If
End Sub
War doch so gemeint, oder?
 
#6
Hallo, ich möchte das Thema nochmal aufgreifen.

Ist es möglich den Code per Powershell ausführen zu lassen? Dann könnte ich irgendwann in der Nacht per Servertask die AccessDb sperren und den Import von Powershell auslösen lassen. Beim googeln bin ich leider noch nicht fündig geworden..

Beste Grüße