Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Tabellen nur bei Bedarf verknüpfen?

Begonnen von Doming, Juni 06, 2025, 08:50:29

⏪ vorheriges - nächstes ⏩

Doming

Moin,

wir hatten letztens das Problem, dass eine Tabelle nicht mehr geöffnet werden konnte. Deswegen bin auf die Idee gekommen, eine Tabelle in einem extra BackEnd aufzusetzen, in der sich jedes FrontEnd zyklisch anmeldet. Also einmal pro Zeiteinheit einen Zeitstempel hinterlassen. Auf diese Weise kann man dem FrontEnd dann mitteilen, dass es sich (zB wegen Wartung) zu beenden hat.
Leider war dann nach einem Tag diese Tabelle auch auf einmal schreibgeschützt und alle FrontEnds sind dann mit Fehler ausgestiegen. Also habe ich diese Prozedur wieder entfernt.

Jetzt war jetzt meine Idee, diese Tabelle nicht permanent zu verknüpfen, sondern nur vor jedem Ping eine Verbindung herzustellen und danach wieder zu kappen. Wenn die Verbindung dann nicht zustandekommt, kann man den Versuch im Code abfangen.

Ist das jetzt völliger Blödsinn weil zu zeit- oder prozessaufwendig oder wie seht Ihr das?

Gruß
 Doming

Hondo

Hallo,
prinzipiell würde das nichts ändern. Versuchst du eine zur Laufzeit eingebundene Tabelle zu bearbeiten die bereits jemand anderer am bearbeiten ist würde es wieder nicht klappen.
Und ganz generell ist das m.E. keine gute Idee.

Ich würde erstmal die Ursache für die gesperrten Tabellen ergründen.

Gruß Andi

Btw:
eventuell hilft dir dieser Link weiter:
Möglichkeiten der Freigabe einer Access Desktopdatenbank

Doming

Moin Andi,

danke für den Link. Ich bin aktuell nur am ,,rumspinnen", ob, wie und wie sinnvoll so eine Idee ist.
Teilweise sind die Datenbanken schon Jahre in Gebrauch (und sind nicht von mir ;) ) und die Frage ist natürlich, ob man die noch verändern sollte. Es ging ja eigentlich nur um den bis jetzt einmaligen Vorfall.

Knobbi38

Hallo Doming,

du mußt dir darüber im Klaren sein, das konkurrierende Zugriffe auf einen Tabelle zu Sperren führt, egal ob diese Tabelle nun zu einem separaten Backend gehört und ob sie permanent Verknüpft wird oder nicht.

Wenn es in deinem Workflow entsprechende kritische Stellen gibt, mußt du einfach mit Konflikten rechnen und diese programmiertechnisch behandeln. Das kann beispielsweise durch die Wahl bestimmter Locking-Methoden und die Behandlung von Datensatzsperren erfolgen.

Die Idee mit einem Zeitstempel in einer Tabelle würde ich gleich wieder werfen - was soll das für Vorteile bringen?


Gruß Knobbi38






Doming

Moin,

die Idee mit dem Zeitstempel kam auf, weil man dann sehen kann, wer aktuell bzw. innerhalb der letzten x Minuten mit der DB gearbeitet hat. So weiß man, wen man bei Bedarf ansprechen kann, wenn man exklusiven Zugriff benötigt.

Gruß
 Doming

Knobbi38

Was vielleicht Sinn ergibt ist, daß in Intervallen vom FE eine Tabelle im BE mit einem Hinweis für ein bevorstehendes Ereignis abgefragt wird und dann der FE zu diesem Zeitpunkt oder kurz vorher beendet wird. Der Hinweis kann dann vom Admin in den BE eingetragen und dann später wieder gelöscht werden.

So eine Abfrage muß auch nicht immer zeitgesteuert sein. Z.B. kann das einfach als Routine beim zurückgehen in das Hauptmenü eingebaut werden, welches in der Praxis innerhalb einer Stunde öfter aufgerufen wird. Anwender in einer Multiuserumgebung sollten sowieso gehalten werden, nach Beendigung eines Vorgangs wieder ins Hauptmenü zurückzukehren, um ein Locking bei Änderungen zu minimieren.

Gruß Knobbi38

Doming

Werden denn die Datensätze erst beim Entladen des bearbeitenden Formulars wieder freigegeben? Kann man das nicht per VBA vornehmen?
Ich habe ein Formular, auf dem etwa 100 Plätze auf dem Hof dargestellt werden. Jeder Platz ein eigener Datensatz, welcher dann per Klick auf den Platz mittels Popup aufgerufen und bearbeitet wird. Natürlich hat sich danach der Hofbestand geändert, aber das kann man doch per Requery aufräumen, ohne dass man gleich in eine andere Ansicht (Hauptmenü) wechselt.

Knobbi38

Hallo,

das war doch nur ein Beispiel dafür, daß es auch andere Möglichkeiten anstatt mit einem Timer gibt.

In deinem Fall ginge das z.B. nach dem Requery oder beim Öffnen/Schließen des Dialogs. Sicherlich gibt es noch mehrere Möglichkeiten und so ein Aufruf kann doch überall eingestreut werden, wo auch hin und wieder eine Interaktion erfolgt.

ZitatWerden denn die Datensätze erst beim Entladen des bearbeitenden Formulars wieder freigegeben? Kann man das nicht per VBA vornehmen?
Wann gelockt wird und wie, ist abhängig von deinen Einstellungen. Wenn keine besonderen Vorkehrungen getroffen werden, bleibt ein Formular im Edit-Modus, solange der Datensatz nicht zurückgeschrieben wird, z.B. beim Schließen oder wenn im Ribbon der DS gespeichert wird.

Kannst ja mal nach dem Begriffen "pessimistisches-" und "optimistisches Locking" suchen.

Zum Einstieg:
https://learn.microsoft.com/de-de/office/client-developer/access/desktop-database-reference/recordset-lockedits-property-dao
Interessant und wenig bekannt ist in diesem Zusammenhang auch die beschriebene Move-Methode mit dem Argument 0.

Gruß Knobbi38





Doming

Danke für die Ausführungen.
Etwas Probleme habe ich mit folgendem Ausdruck:
ZitatWenn eine Seite gesperrt ist, kann kein anderer Benutzer Datensätze auf der betreffenden Seite bearbeiten.
Was ist da mit ,,Seite" gemeint? Ich vermute doch, dass es sich um den Datensatz handelt, oder?

Gruß
 Doming

Knobbi38

Hallo Doming,

Zitat von: Doming am Juni 19, 2025, 12:56:08Was ist da mit ,,Seite" gemeint? Ich vermute doch, dass es sich um den Datensatz handelt, oder?
mitnichten. Access verwaltet den Speicher in Seiten (Pages) und u.U. wird eine ganze Seite für den schreibenden Zugriff gesperrt.

Für weitere Information suche mal im Internet mit den Begriffen:
"ms access record locking vs page locking level"

Gruß Knobbi38

Doming

Hallo,

ich habe diese Geschichte jetzt damit abgeschlossen, dass die diversen DBs beim Starten einen Datensatz mit einmaligem Zeitstempel, DBName und User in einer Tabelle generieren. Zu dem Datensatz gehören 2 Boolsche Felder, die dann zyklisch abgefragt werden.
Das eine, mit der man die Db auffordert, einen Zeitstempel in ein ansonsten leeres Feld zu schreiben (lebst Du noch?)
Das zweite, um das FrontEnd abzuschalten (Es wird ein Popup mit einem einminütigem Countdown gestartet, nach dem dann die DB geschlossen wird.)

Sie dürfen in diesem Board keine Dateianhänge sehen.

So habe ich nur das zyklische Abfragen der Tabelle, es werden im Normalfall keine Änderungen an den DS vorgenommen.

Danke für die erhaltenen Tipps

Gruß
Doming

Bitsqueezer

Hallo,

was die 100 Stellplätze angeht, vielleicht ist ja die Friedhofsverwaltung von meiner Downloadseite was für Dich. Das Prinzip kann man ebenso für Kinosäle wie für Parkplätze etc. verwenden.

Gruß

Christian