Microsoft Office Forum [ www.Office-Fragen.de ] >> READONLY <<
Microsoft Office 2003-2019 => Excel => Thema gestartet von: Lausitzkater am Dezember 26, 2011, 14:53:17 Nachmittag
-
Hallo alle zusammen,
Ich habe eine Excel-Datei, welche auf einem Netzlaufwerk liegt.
Von den betreffenden Usern wird diese Excel-Datei, um mit dieser zu arbeiten, auf die lokale Festplatte kopiert
und anschließend geöffnet. Excel greift dabei auf eine Access-Datenbank zu, damit mehrere User gleichzeitig mit den Daten arbeiten können. Der Zugriff auf die Datenbank erfolgt auch nur dann, wenn er notwendig ist; sprich: Nach jedem Zugriff auf Daten wird die Datenbank wieder geschlossen.
Das Problem was jetzt auftritt ist, das sich die Datenbank irgendwie selber einen Schreibschutz "verpasst" und man somit keinen Zugriff mehr auf diese erhält. Somit ist ein Arbeiten nicht möglich.
Wenn ich selber in Access die Datenbank öffne, erhalte ich auch die Warnung, das die Datenbank schreibgeschützt ist.
Kopiere ich aber die Datei und öffne sie dann, habe ich wieder vollen Zugriff.
Wer kann mir weiterhelfen?? Was ist die Ursache des Schreibschutzes?? Und wie kann ich verhindern, das die Datenbank schreibgeschützt wird??
Hier mal ein Beispiel, wie auf die Datenbank zugegriffen wird:
Sub Datenbankverbindung_aufbauen()
Dim strDatei As String
Set connDB = New ADODB.Connection
strDatei = U:\Datenbank\2012.mdb"
With connDB
.Provider = "Microsoft.Jet.OLEDB.4.0"
.Mode = adModeReadWrite
.Open "Data Source=" + strDatei + ";Persist Security Info=False;Jet OLEDB:Database; Password=TTTTTT"
End With
End Sub
Sub Mitarbeiterdaten_Recordset_lesen()
Call Datenbankverbindung_aufbauen
Set rsMitarbeiterdaten = New ADODB.Recordset
strSQL = "SELECT Mitarbeiterdaten.Name, Mitarbeiterdaten.Tätigkeit, Mitarbeiterdaten. _
Schicht, Mitarbeiterdaten.Schichtsystem, Mitarbeiterdaten.Beginn, Mitarbeiterdaten.Ende, Mitarbeiterdaten.Pos, Mitarbeiterdaten.Zusatztage, Mitarbeiterdaten.SilvesterAlt, Mitarbeiterdaten.ResttageUrlaubAlt, Mitarbeiterdaten.ResttageAbbummelnAlt, Mitarbeiterdaten.Anzeigebereich FROM Mitarbeiterdaten;"
rsMitarbeiterdaten.Open strSQL, connDB, adOpenForwardOnly, adLockOptimistic
End Sub
Sub Mitarbeiterdaten_lesen()
Call Mitarbeiterdaten_Recordset_lesen
rsMitarbeiterdaten.MoveFirst
intAA = 3
While Not rsMitarbeiterdaten.EOF
intAA = intAA + 1
Cells(intAA, 1).Value = rsMitarbeiterdaten("Name")
Cells(intAA, 2).Value = rsMitarbeiterdaten("Tätigkeit")
Cells(intAA, 3).Value = rsMitarbeiterdaten("Schicht")
Cells(intAA, 4).Value = rsMitarbeiterdaten("Schichtsystem")
Cells(intAA, 5).Value = rsMitarbeiterdaten("Pos")
Cells(intAA, 6).Value = rsMitarbeiterdaten("Beginn")
Cells(intAA, 7).Value = rsMitarbeiterdaten("Ende")
rsMitarbeiterdaten.MoveNext
Wend
rsMitarbeiterdaten.Close
Set rsMitarbeiterdaten = Nothing
Set connDB = Nothing
End Sub
Über Call Mitarbeiterdaten_lesen wird die Prozedur gestartet. Das Recordset wird gelesen (mit öffnen der Datenbank). Nachdem die Datenausgelesen sind, wird das Recordset und die Datenbank geschlossen.
Gruß Thomas
-
Hallo Thomas,
da die Access-Datenbank schreibgeschützt geöffnet wird, selbst dann, wenn Du sie direkt in Access öffnest, liegt das Problem sicher nicht im VBA-Code über den Du von Excel aus auf die Datenbank zugreifst.
Ich vermute, dass Du in dem Verzeichnis in dem sich die Access-Datenbank befindet keine Schreibrechte besitzt.
Gruß
Stefan
-
Grüezi Thomas
Warum ist denn dieser Aufbau in 3 Teile zerstückelt?
Das bedingt die Verwendung globaler Variabeln, deren Deklaration hier noch fehlt.
Einfacher und geradliniger wär es doch IMO, wenn der Code in eine einzelne Sub gepackt würde.
Kann es sein, dass Du noch connDB.Close einfügen musst, also nicht bloss das Recordset sondern auch die Verbindung noch schliessen bevor Du alle Objekt-Variablen zerstörst?