Registriert seit: 26.09.2015
Version(en): 2013
Guten Tag Ich habe im Excel eine lauffähige DAO RecordSet- (SELECT)-Anweisung um Daten aus einer im Access verknüpften Tabelle auslesen zu können. Bis jetzt habe ich das ohne weitere Attribute. Ich habe lange an den Attributen herumstudiert, doch ich kann leider nicht ausmachen, was ich da genauer definierten könnte. Ich möchte erreichen, dass mehrere Anwender gleichzeitig von Excel aus in einer Access-DB Tabelle Werte auslesen können und zwar NUR LESERECHTE. Falls möglich soll es einer anderen Applikation doch möglich sein, Daten mit Lese-/Schreibrecht gleichzeitig hinzuzufügen, falls das Möglich ist. Was braucht es dazu bei den quasi "lesenden" Anwender an VBA-Code-Definition, dass das möglich wird? Gruss und Danke Stefan1
Registriert seit: 22.09.2024
Version(en): 2010
04.11.2024, 16:59
(Dieser Beitrag wurde zuletzt bearbeitet: 04.11.2024, 17:01 von knobbi38.)
Hallo Stefan, der Zugriff auf eine Access-Datenbank ist automatisch immer multiuser fähig, dafür braucht man nichts weiter, als Schreib-/Leseberechtigungen an der Datei und in dem Ordner. Wenn du ein Recordset nur Leseberechtigt öffnen möchtest, kannst du das durch die Option Readonly erreichen. Wenn du die Datenbank nur lese berechtigt öffnen möchtest, setzt du bei DBEngine.Opendatabase() den Parameter Readonly auf true. Doku: https://learn.microsoft.com/de-de/office...-reference
Registriert seit: 04.04.2017
Version(en): Excel365
SO setzt bzw löscht man den "Schreibrecht"-Status jeder Datei (die NICHT geöffnet sein darf):
Public Sub SchutzSetzen(nam) ' nam=DateiName mit kompl. Pfad SetAttr nam, vbReadOnly End Sub Public Sub SchutzWeg(nam) 'nam=DateiName mit kompl. Pfad SetAttr nam, vbNormal End Sub
Registriert seit: 26.09.2015
Version(en): 2013
Guten Tag Knobbi38 Vielen Dank für den Hinweis. OK, mit readonly (nur Leserechte). Bedeutet das trotzdem, dass die Access-Datenbank im Exklusiv-Zugriff ist? Oder kann man sogar den Exklusiv-Zugriff (Reservierung) auch noch irgendwie ausschalten, so dass gleichzeitig ein Dritter mit Exklusiv-Zugriff trotzdem mit Lese-/Schreibrechte Daten verändern kann? Gruss Stefan1
Registriert seit: 04.04.2017
Version(en): Excel365
" so dass gleichzeitig ein Dritter mit Exklusiv-Zugriff trotzdem mit Lese-/Schreibrechte Daten verändern kann? " Was du mit " Exklusiv-Zugriff "wahrscheinlich meinst (dass nur ein bestimmter User drauf zugreifen kann), kann nur der Admin festlegen, aber das ändert nichts an der Tatsache, dass die Datei dabei NICHT von jemand Anderem geöffnet sein darf. Auf Deutsch: Du kannst Nix an der Datei ändern, wenn irgend Jemand sie bereits geöffnet hat, weil du dann automatisch nur Leserecht hast.
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen, für lesenden Zugriff auf eine Oracle-DB hab ich z.B. so was. Sieht in Access ähnlich aus. Set objDynaset = New ADODB.Recordset objDynaset.Open sql_string, Me.Dbase, adOpenForwardOnly, adLockReadOnly Zum Schreiben hab ich z.B. diese Parameter dOpenKeyset, adLockOptimistic
Ist zwar jetzt nicht die Frage, aber mal als Zusatzinfo: Bei einer "richtigen" Datenbank kann man das auch über Benutzerrollen steuern ... Im Prinzip bekommt man so seine user aus Oracle ausgelesen Set objDynaset = New ADODB.Recordset objDynaset.Open "Select user from dual", Me.Dbase, adOpenForwardOnly, adLockReadOnly und so z.B. Rechte objDynaset.Open "Select count(*) as anz from user_role_privs " + _ " where granted_role = '__MYDB_WRITE'", _ Me.Dbase, adOpenForwardOnly, adLockReadOnly siehe zu mysql z.B. https://youtu.be/ki3xWl10Ryc
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 22.09.2024
Version(en): 2010
05.11.2024, 14:14
(Dieser Beitrag wurde zuletzt bearbeitet: 05.11.2024, 14:15 von knobbi38.)
Hallo Stefan,
du kannst beim Öffnen der Datenbank festlegen, ob diese im exklusiven Modus geöffnet wird oder nicht. Exklusiv bedeutet in diesem Zusammenhang, daß kein anderer Zugriff auf die DB hat.
Ich weiß jetzt nicht, worauf du hinaus möchtest und was dein gedankliches Problem mit Access-Datenbanken ist, da du ja nicht mit Access auf diese Datenbank zugreifst, sondern "nur" mit deiner DBEngine. Mit Einführung des accdb Dateiformates gibt es keine "Rechteverwaltung" auf unterster Ebene mehr. Zugriffsrechte werden nur noch in deiner Anwendung festgelegt; mit externen Anwendungen kann man jederzeit, wenn nicht exklusiv geöffnet und Zugriffsrechte auf Dateisystemebene erteilt sind, alles mit der Datenbank-Datei machen, es sei denn, es wird für die Datenbank ein Passwort festgelegt.
Echte Sicherheit, wie sie eventuell vorschwebt, gibt es nur mit einem SQL-Server, z.B. dem kostenlosen MS SQL-Server Express-Edition (Hinweis: es gibt auch noch andere kostenlose SQL-Server).
Registriert seit: 26.09.2015
Version(en): 2013
Guten Tag knobbi38 Vielen Dank für Deine Rückmeldung. Es greifen mehrere Anwender gleichzeitig auf die Access-Datenbank zu und brauchen dort nur Daten. Das geschieht heute mit DAO (.OpenRecordSet, SELECT).
Es gibt dazu folgende Eigenschaften einzustellen:
dbOpenTable dbOpenDynaset dbOpenSnapshot dbOpenForwardOnly
.LockEdits = True (Sperre erst nach Update)
Dynaset (Default) Snapshot (nur Lesen)
Die Anwender brauchen nur Lesezugriff. Es geht also um die opimale SELECT-Abfrage für den gewünschten Effekten, nämlich Werte auslesen nach Kriterien). Es muss in diese Access-Datenbank von den Anwender nichts mutiert oder neu hinzugefügt werden. Wenn jedoch eine andere Anwendung dabei separat ungestört neue Daten zufügen kann, umso besser. Was sind die Probleme, wenn die Eigenschaften eingestellt werden. Man sieht wenig Bespiele und belässt es oft beim Defaultwert. Ich frage mich was der Vorteil oder Nachteil sein soll. Es ist schon etwas verwirrend mit diesen Befehlen.
Registriert seit: 18.10.2020
Version(en): 365
05.11.2024, 16:41
(Dieser Beitrag wurde zuletzt bearbeitet: 05.11.2024, 16:42 von Warkings.)
Es ist mir nicht ganz klar, worauf Du hinauswillst, aber vielleicht hilft KI (in der Hoffnung, dass sie nicht halluziniert 😂) Hier ist eine zusammenfassende Erläuterung der drei DAO-Recordset-Öffnungsmodi: dbOpenForwardOnly, dbOpenSnapshot und dbOpenDynaset, einschließlich ihrer Vor- und Nachteile: 1. dbOpenForwardOnlyBeschreibung: - Erlaubt die Vorwärtsnavigation durch die Datensätze. Sie können nur die Methode MoveNext verwenden, um zum nächsten Datensatz zu gelangen.
Vorteile: - Leistungsoptimierung: Geringer Speicherbedarf und schnellere Leistung, da das Recordset keine zurückhaltenden Daten speichert.
- Einfache Implementierung: Ideal für einfache Abfragen, bei denen nur eine Vorwärtsnavigation erforderlich ist.
Nachteile: - Eingeschränkte Navigation: Sie können nicht zu vorherigen Datensätzen zurückkehren, was die Flexibilität einschränkt.
- Kein Schreibzugriff: Es handelt sich um einen schreibgeschützten Modus, der keine Datenbearbeitung ermöglicht.
2. dbOpenSnapshotBeschreibung: - Erstellt eine schreibgeschützte Momentaufnahme der Daten zum Zeitpunkt des Öffnens des Recordsets. Sie können vorwärts navigieren, aber nicht rückwärts.
Vorteile: - Stabilität der Daten: Bietet eine konsistente Ansicht der Daten, die sich nicht ändert, während das Recordset geöffnet ist.
- Leistungsoptimierung: Gut geeignet für Berichterstattung oder Analyse, bei der die Daten nicht verändert werden müssen.
Nachteile: - Eingeschränkte Navigation: Wie bei dbOpenForwardOnly können Sie nicht rückwärts durch die Datensätze navigieren.
- Kein Schreibzugriff: Es handelt sich um einen schreibgeschützten Modus, der keine Änderungen an den Daten ermöglicht.
3. dbOpenDynasetBeschreibung: - Bietet eine dynamische Ansicht auf die Daten, die sowohl Vorwärts- als auch Rückwärtsnavigation ermöglicht. Änderungen an den zugrunde liegenden Daten werden sofort im Recordset reflektiert.
Vorteile: - Vollständige Navigation: Ermöglicht das Blättern in beiden Richtungen (vorwärts und rückwärts) sowie die Verwendung von Methoden wie MoveFirst, MoveLast, MovePrevious und MoveNext.
- Schreibzugriff: Ermöglicht das Lesen, Bearbeiten, Hinzufügen und Löschen von Datensätzen, wodurch es ideal für interaktive Anwendungen ist.
- Dynamische Datenansicht: Änderungen an den Daten werden sofort reflektiert, was eine aktuelle Sicht auf die Daten garantiert.
Nachteile: - Leistungsaufwand: Kann mehr Speicher und Ressourcen beanspruchen als die anderen Modi, da eine dynamische Verbindung zur Datenquelle besteht.
- Komplexität: Kann komplizierter sein, wenn Sie die Datenintegrität und Synchronisation mit anderen Benutzern berücksichtigen müssen.
Fazit:- dbOpenForwardOnly ist ideal für einfache, lesende Anwendungen, bei denen nur Vorwärtsnavigation benötigt wird.
- dbOpenSnapshot eignet sich hervorragend für Berichterstattung und Analysen, bei denen Daten stabil bleiben müssen, aber keine Änderungen erforderlich sind.
- dbOpenDynaset ist die vielseitigste Option für Anwendungen, die sowohl das Lesen als auch das Schreiben von Daten mit vollständiger Navigationsfreiheit erfordern.
Die Wahl des Modus hängt von den spezifischen Anforderungen Ihrer Anwendung ab, einschließlich der benötigten Navigationsmöglichkeiten, der Notwendigkeit von Schreibzugriffen und der gewünschten Datenstabilität.
Registriert seit: 26.09.2015
Version(en): 2013
Guten Abend Warkings Vielen Dank für die tolle Auflistung, welches mein Verständnis für Access-Zugriffe erweitert. Ich werde mich mit dem dbOpenForwardOnlyweiter befassen und verstehe auch, dass dbForwardOnly nicht zu verwenden ist gemäss https://documentation.help/DAO360/damtho...ordset.htmIch kann mir vorstellen, dass genauer spezifizierte SELECT (DAO)-Anweisungen nicht nur schneller, sondern allgemeiner auch stabiler sind. Auf jeden Fall traue ich den angetroffenen verkürzten SQL-Befehle im VBA von Excel nicht so ganz. Diese mögen zwar auch funktionieren, können aber auch langsamer sein. Der Defaultwert ohne dbOpenForwardOnly scheint bei OpenRecordset das langsamere dbOpenDynaset zu sein. Weil in meinem Fall jedoch nur Daten ausgelesen werden sollen, erhoffe ich mir mit dem genaueren SQL-Select und dbOpenForwardOnly schnellere Zugriffe zu haben und letztendlich auch stabiler das OpenRecordset und Access wieder beenden zu können, was mit RS.Close, DB.Close und Set RS = Nothing, Set DB = Nothing im DAO maximal mögliche ist.
|