Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Doming am Juni 06, 2025, 08:50:29

Titel: Tabellen nur bei Bedarf verknüpfen?
Beitrag von: Doming am Juni 06, 2025, 08:50:29
Moin,

wir hatten letztens das Problem (https://www.access-o-mania.de/forum/index.php?topic=28059.0), 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
Titel: Re: Tabellen nur bei Bedarf verknüpfen?
Beitrag von: Hondo am Juni 06, 2025, 08:56:42
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 (https://support.microsoft.com/de-de/topic/m%C3%B6glichkeiten-der-freigabe-einer-access-desktopdatenbank-03822632-da43-4d8f-ba2a-68da245a0446)
Titel: Re: Tabellen nur bei Bedarf verknüpfen?
Beitrag von: Doming am Juni 06, 2025, 09:12:32
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.
Titel: Re: Tabellen nur bei Bedarf verknüpfen?
Beitrag von: Knobbi38 am Juni 06, 2025, 10:59:56
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





Titel: Re: Tabellen nur bei Bedarf verknüpfen?
Beitrag von: Doming am Juni 10, 2025, 09:09:05
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
Titel: Re: Tabellen nur bei Bedarf verknüpfen?
Beitrag von: Knobbi38 am Juni 10, 2025, 10:34:14
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
Titel: Re: Tabellen nur bei Bedarf verknüpfen?
Beitrag von: Doming am Juni 10, 2025, 11:51:17
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.
Titel: Re: Tabellen nur bei Bedarf verknüpfen?
Beitrag von: Knobbi38 am Juni 10, 2025, 12:40:37
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 (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




Titel: Re: Tabellen nur bei Bedarf verknüpfen?
Beitrag von: Doming am Juni 19, 2025, 12:56:08
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
Titel: Re: Tabellen nur bei Bedarf verknüpfen?
Beitrag von: Knobbi38 am Juni 19, 2025, 14:54:13
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
Titel: Re: Tabellen nur bei Bedarf verknüpfen?
Beitrag von: Doming am Juli 16, 2025, 08:20:55
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.)

Zwischenablage01.png

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
Titel: Re: Tabellen nur bei Bedarf verknüpfen?
Beitrag von: Bitsqueezer am Juli 16, 2025, 14:59:51
Hallo,

was die 100 Stellplätze angeht, vielleicht ist ja die Friedhofsverwaltung von meiner Downloadseite (https://www.ccedv.de/) was für Dich. Das Prinzip kann man ebenso für Kinosäle wie für Parkplätze etc. verwenden.

Gruß

Christian