September 23, 2021, 14:40:37

Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!


Nach Ausführen eines Makro oder Formular Ereignisses Datenbank gesperrt

Begonnen von TerracottaCSV, September 15, 2021, 10:34:19

⏪ vorheriges - nächstes ⏩

TerracottaCSV

Hallo, sobald ich mein AutoExec Makro ausführe oder das Startformular ein Form_Load Event ausführt, ist die Datenbank schreibgeschützt mit folgendem Fehler: "Sie haben keinen Exklusiven Zugriff auf die Datenbank"

Das ist extrem nervig und war vor ein paar Wochen noch nicht so, ist das vielleicht ein Bug in der Software?
Oder mach ich irgendwas falsch? Gibt es da eine Einstellung für?

MzKlMu

Hallo,
Zitatsobald ich mein AutoExec Makro ausführe oder das Startformular ein Form_Load Event ausführt,
Wie stellst Du Dir Hilfe vor, wenn man nicht weiß was da abläuft?
Gruß
Klaus

TerracottaCSV

Hallo der Code tut dabei nichts zur Sache, denn egal ob es ein 2 Zeiler ist, oder ein Ellenlanger Code, das Endergebnis ist immer gleich.

Beispielszenario: Ich habe in meinem Form_Load Event eine MSGBOX

Private Sub Form_Load()
MsgBox "Text"
End Sub
danach steht die Datenbank auf Schreibgeschützt und die Meldung mit Exklusiver Zugriff erscheint. Ich muss die DB also neu öffnen.

Beispielszenario2: Ich öffne meine DB und ein AutoExec Makro löst aus.
Das Makro führt dann eine Function aus.
Und öffnet danach ein Formular.

Folgende Function kann zb von einem Makro ausgelöst werden, damit ebenfalls die Meldung mit Exklusivem Zugriff erscheint:

Public Function Auto()
Dim PfadBE as String

PfadBE = C:\Users\User\Documents\Backend.accdb
DoCmd.DeleteObject acTable, "TempCSV"
DoCmd.TransferDatabase acLink, "Microsoft Access", PfadBE, acTable, "Test", "Test_Link"
End Function

Also es ist egal was für Code dort eingesetzt wird, die Datenbank geht immer in den Schreibschutz.
Wenn ich kein AutoExec oder Form_Load Event ausführe, sondern zb. den Code über eine Schaltfläche ausführe oder händisch über das Makro (Rechtsklick -> Ausführen) dann funktioniert es.

markus888

Zitat von: TerracottaCSV am September 15, 2021, 14:11:44danach steht die Datenbank auf Schreibgeschützt und die Meldung mit Exklusiver Zugriff erscheint. Ich muss die DB also neu öffnen.


"Schreibschutz" und "Exklusiver Zugriff", haben nichts miteinander zu tun.
Exklusiver Zugriff ist auch nicht erwünscht - wie sollen sonst mehrere Personen gleichzeitig arbeiten?

Aber erkläre doch mal, was nach deiner Meinung das Problem ist.
10 Jahre Access

TerracottaCSV

Das Problem ist, das das auf jedenfall kein gewolltes verhalten ist, das die DB auf Exklusiver Zugriff springt.

Das heißt wenn ich etwas teste muss ich DB jedes mal neu öffnen, das ist sehr nervig und war vor ein paar Wochen noch nicht so.

Natürlich ist Exklusiver Zugriff nicht erwünscht, das ist der Sinn dieses Threads....
Die DB ist auch in Front und Backend aufgeteilt, trotzdem wird das Frontend mit Exklusivem Zugriff gesperrt, wie in #2 beschrieben.

markus888

Zitat von: TerracottaCSV am September 17, 2021, 07:41:57trotzdem wird das Frontend mit Exklusivem Zugriff gesperrt, wie in #2 beschrieben.

Da gibts wohl ein Missverständnis.
Das Frontend ist nicht mit exklusivem Zugriff gesperrt.

Die Meldung "Sie haben keinen exklusiven Zugriff...", kommt in der Regel dann, wenn eine Anwendung mehrfach geöffnet ist. Das Problem: In dem Moment lässt Access nur noch Änderungen bei Tabellen und Abfragen und Daten zu. Entweder gibt es durch einen Absturz eine fehlerhafte .laccdb Datei, oder einen mehrfachen Zugriff auf das Frontend. Einfach mal prüfen.
Du kannst das Frontend auch exklusiv öffnen. Dadurch kann es gar nicht zu dem Problem kommen.
10 Jahre Access

TerracottaCSV

Hallo Markus, wie öffne ich das Frontend denn Exklusiv?

2x geöffnet ist es auf keinen Fall. Liegt noch Lokal auf C:\, auch im Taskmanager sehe ich nur eine Access Instanz.
Access lässt dann gar nichts mehr zu, wenn ich ein Formular bearbeite, zb. Buttons anlegen und verschieben oder alleine das wechseln in den Entwurfsmodus gibt mir schon die "Exklusiver Zugriff" Meldung.

Woran würde ich denn eine fehlerhafte .laccdb Datei erkennen? und wie erstelle ich eine "neue"?

ebs17

Zum Beginn des Testens darf man ruhig einen definierten Zustand herstellen, also Rechner runterfahren und neu starten. Damit dürften alle externen Zugriffe gekillt sein.
Mit freundlichem Glück Auf!

Eberhard

markus888

Zitat von: TerracottaCSV am September 17, 2021, 11:31:35Hallo Markus, wie öffne ich das Frontend denn Exklusiv?

Das kannst du doch sicher selbst rausfinden - etwas mehr Eigeninitiative ist da wohl gefragt.


Zitat von: TerracottaCSV am September 17, 2021, 11:31:352x geöffnet ist es auf keinen Fall. Liegt noch Lokal auf C:\, auch im Taskmanager sehe ich nur eine Access Instanz.

Das ist ohne Bedeutung. Es reicht schon, wenn die Datei einmal via Application und einmal via Database Schnittstelle geöffnet ist. Das wird im Tastmanager nicht angezeigt.

Zitat von: TerracottaCSV am September 17, 2021, 11:31:35Access lässt dann gar nichts mehr zu, wenn ich ein Formular bearbeite, zb. Buttons anlegen und verschieben oder alleine das wechseln in den Entwurfsmodus gibt mir schon die "Exklusiver Zugriff" Meldung.

Genau das würde ich bei zweifacher Öffnung erwarten.

Zitat von: TerracottaCSV am September 17, 2021, 11:31:35Woran würde ich denn eine fehlerhafte .laccdb Datei erkennen? und wie erstelle ich eine "neue"?

Lies den Artikel dazu:
http://files.avanquest.com/file-extension-laccdb/de/

Nach dem Lesen schaust du erstmal nach, ob die .laccdb Datei des Frontends beim Schließen gelöscht wird.
Solltest du die Datei übrigens im exklusiven Modus öffnen - so existiert keine solche Datei.
10 Jahre Access

TerracottaCSV

September 17, 2021, 12:09:03 #9 Letzte Bearbeitung: September 17, 2021, 13:14:14 von TerracottaCSV
ZitatZum Beginn des Testens darf man ruhig einen definierten Zustand herstellen, also Rechner runterfahren und neu starten. Damit dürften alle externen Zugriffe gekillt sein.

Klar wurde dieser Zustand hergestellt. Auch wenn ich den PC frisch starte beobachte ich dieses Phänomen.


ZitatDas kannst du doch sicher selbst rausfinden - etwas mehr Eigeninitiative ist da wohl gefragt.

Alles klar, ich schaue mal bei einschlägigen Suchmaschinen nach.


ZitatNach dem Lesen schaust du erstmal nach, ob die .laccdb Datei des Frontends beim Schließen gelöscht wird.

Ja - ich öffne das Frontend -> .laccdb wird erstellt -> ich schließe das Frontend und die .laccdb wird gelöscht


markus888

Zitat von: TerracottaCSV am September 17, 2021, 12:09:03Ja - ich öffne das Frontend -> .laccdb wird erstellt -> ich schließe das Frontend und die .laccdb wird gelöscht

So soll es sein.
Gib Bescheid, nachdem du deinen Code mit einem exklusiv geöffnetem Frontend getestet hast.
Irgendwo in deinem Code würde ich dann mit einer Überraschung rechnen.
10 Jahre Access

TerracottaCSV

Hey, Markus.

Sorry das ich mich erst jetzt melde. Wenn ich das Frontend exklusiv öffne, dann bekomme ich die Fehlermeldung das meine DB schon in Verwendung ist und der Debugger markiert mir die Db Variable die ich mit Set db = CurrentDb zugewiesen habe.

Kann ich das auch anders machen ohne Db zu setzen? Ich verwende Db nur zwei mal.
Einmal db.tabledefs.append und db.tabledefs.refresh

Grüße

DF6GL

Hallo,

wie wäre es, die jetzt bekannte(n) Stelle(n) der "Fehler"-Ursache mal auszukommentieren?


Und könntest Du auch den kompletten Code posten? Solche Kurzhinweise bringen nichts.


Sehr vermutlich sollen Operationen ausgeführt werden, während denen andere Zugriffe (z. B. Formulare, Recordsets, etc.) auf diese Objekte zeitgleich stattfinden.


markus888

September 20, 2021, 10:06:28 #13 Letzte Bearbeitung: September 20, 2021, 10:12:04 von markus888
Zitat von: TerracottaCSV am September 20, 2021, 07:51:51Set db = CurrentDb

Kann ich das auch anders machen ohne Db zu setzen? Ich verwende Db nur zwei mal.
Einmal db.tabledefs.append und db.tabledefs.refresh


CurrentDB kann nicht zu dem Problem führen, da Currentdb einen Verweis auf die bereits geöffnete Datenbank darstellt welche von der Application hergeleitet ist.

Kannst ja ganz einfach mit einer neuen Access Anwendung testen.
Vielleicht ist deine Anwendung defekt -> google mal nach decompile und verwende es.

Um sicher zu gehen, kannst du ja einfach eine neue DB erstellen, die nur den fraglichen Code enthält und damit testen. Leider ist der Access Compiler der den Zwischencode erstellt etwas fehleranfällig und in seltenen Fällen muss man eine Anwendung neu erstellen, um den Fehler zu beseitigen.
Wenn das keine Lösung bringt, einfach mal die neue Datei hochladen, dann kann man sich das ansehen.
Dazu sind keine Daten erforderlich, sondern nur die beteiligten Datenbanken mit den Tabellen die du verknüpfen willst.
Da reicht es, wenn sich alle in einem Verzeichnis befinden.


10 Jahre Access