ich nutze seit Jahren ein Makro, um eine Access-DB die auf meinem eigenem Computer unter C:\ liegt, von verschiedenen Computern aus dem Netzwerk berschreiben / auslesen zu lassen. Hier erstmal das bis gestern funktionale Makro, unwichtiges (Fehlerbehandlung usw.) habe ich zwecks besserer Lesbarkeit heraus gekürzt:
Option Explicit
Const MapIn As String = "net use Y: \\de3dl14i\scanbox /Persistent:YES" 'Shell-Befehl zum mappen des Y-Laufwerks
Const MapOut As String = "net use Y: /delete /YES" 'Shell-Befehl zum ent-mappen des Y-Laufwerks
'*** Variablendeklaration Access
Public cmd As ADODB.Command
Public con As ADODB.Connection
Public rs As ADODB.Recordset
Sub StandardAccessModul()
'*** Variablendeklaration
Dim mySql As String
Shell MapIn, vbHide 'Datenbanklaufwerk mappen
'*** EarlyBind des Access Objekts. Mode "Share Deny None" verhindert Datenbank-Schreibschutz
Set con = New ADODB.Connection
con.Open ConnectionString:="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Y:\MeineDatenbank.accdb;Mode=Share Deny none"
Set cmd = New ADODB.Command
cmd.ActiveConnection = con
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseServer
'*** Daten LESEN per SQL Kommando und in die Tablle schreiben
mySql = "Select * from [Table] where ..."
rs.Open mySql, ActiveConnection:=con, CursorType:=adOpenStatic, LockType:=adLockPessimistic, Options:=adCmdTableDirect
Tabelle1.Range("A1").CopyFromRecordset Data:=rs
rs.Close
'*** Daten SCHREIBEN in Datenbank per SQL Kommando
mySql = "Update [Table] Set ...."
cmd.CommandText = mySql
cmd.Execute
'*** Zurücksetzen.
On Error Resume Next: con.Close 'ErrorNext falls Con bereits geschlossen
Set cmd = Nothing
Set con = Nothing
Shell MapOut, vbHide 'un-map Datenbanklaufwerk
End Sub
Erklärung: Ich habe keine Server-Edition von Windows, daher dürfen nur 20 User gleichzeitig auf ein gemapptes Laufwerk (In diesem Makro Y:) zugreifen. Ich habe aber etwa 150 User auf meiner Datenbank! Um das Problem zu umgehen mappe ich das Y:-Laufwerk, führe dann das Datenbankkommando aus, und entmappe das Laufwerk dann wieder per Shell-Befehl. Das ist zwar etwas .... hanebüchen, aber es funktioniert. Bitte keine Ratschläge in Richtung "anderes OS oder richtige SQL Datenbankserver", das bekomme ich eh nicht genehmigt und umgesetzt :-)Das Makro an sich muss eigentlich OK sein, da es auch heute noch auf etwa 100 Rechnern fehlerfrei läuft. Auf diesen Rechnern läuft Excel 365 "Version 2102 Build 13801.21050 Klick-und Los".
Es wird aber in diesem Moment ein Update auf Excel 365 "Version 2102 Build 13801.21086 Klick-und-Los" ausgerollt, das bereits die ersten 50 Rechner erreicht hat. Dieses Update wird automatisch eingespielt und ich kann es nicht verhindern. Jetzt das kuriose: Das identische Makro führt unter diesem aktuellerem BUILD zu folgender Fehlermeldung in der Zeile "con open":
Fehlernummer -2147467529: Datei konnte nicht gesperrt werden.
Noch kurioser: das Y:\ Laufwerk ist in diesem Moment über den Explorer anwählbar! Das Mapping an sich erzeugt also keine Fehler. Die Access Version kann eigentlich nicht relevant sein - auf dem Computer wo die ACCDB liegt ist Access nicht mal installert ....
Leute, das Thema übersteigt meinen Horizont leider um weiten. Wenn jemand kurzfristig helfen kann, spende ich in seinem Namen privat 50 an gemeinnützige Zwecke!
Liebe Grüße,
Klaus M.