Ich arbeite an einem Programm, das einige Objekte in einer Access-Datenbank bearbeiten muss. Es wird auch ein Unterprogramm (Longstory) ausgeführt, das versucht, auf die zugrunde liegende JET-Datenbank zuzugreifen, während Access es weiterhin über ODBC geöffnet hat.Wie kann ich eine Access-Datenbank zwischen dem gemeinsamen und dem exklusiven Modus wechseln?
Das Problem ist, dass, sobald ich anfange, Formularobjekte mit VBA zu bearbeiten - zum Beispiel mit Application.LoadFromText - Access ändert die Datenbank in den exklusiven Modus. Exclusive-Modus ist in Ordnung, und ich weiß, warum es es braucht. Aber ich muss danach wieder in den "geteilten" Modus wechseln können, damit ich mein Unterprogramm ausführen kann.
Ich habe beobachtet, dass Access, wenn Sie die Benutzeroberfläche verwenden, um ein Formular im Entwurfsmodus zu öffnen, die Datenbank auf Exklusiv umschaltet. (Sie können dies bestätigen, indem Sie versuchen, es von einem anderen Computer aus zu öffnen.) Wenn Sie dann den Formular-Designer schließen, wird er jedoch sofort wieder in den freigegebenen Modus versetzt, was ich mir erhofft habe.
Gibt es eine Möglichkeit, es mit VBA/COM-Anrufen selbst hin und her zu schalten?
Ich weiß, ich kann Application.CloseCurrentDatabase() gefolgt von OpenCurrentDatabase(), aber das schließt alle Fenster und stört die Benutzeroberfläche, so ist es nicht ideal.
Ich fand eine Abhilfe: Öffnen Sie ein beliebiges Formular und schließen Sie es dann. Dies scheint Access zu überdenken, ob die Datenbank im exklusiven Modus bleiben muss oder nicht. Das ist jedoch ziemlich eklig. – apenwarr
Ihre Frage ist verwirrend, da Access mit ODBC keine Verbindung zu seinen eigenen Datendateien (Jet/ACE) herstellen kann. –
Richtig, mein Unterprogramm ist eigentlich in C++ geschrieben. Solange Access die MDB-Datei nicht geöffnet hat oder im freigegebenen Modus geöffnet ist, kann das C++ - Programm problemlos über ODBC manipuliert werden. (Und es ist etwa 10x schneller als mit DAO oder ADO, oder wir würden nur die DAO-Verbindung aus der offenen Access-Datenbank ausleihen.) – apenwarr