Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Firebird: Wer "locked" meinen Record? (https://www.delphipraxis.net/103787-firebird-wer-locked-meinen-record.html)

mschaefer 21. Nov 2007 21:21

Datenbank: Firebird • Version: 2.0 • Zugriff über: egal

Firebird: Wer "locked" meinen Record?
 
Recordlocking

In einen Multiusersystem mit pessimistiescher Transaktionssteuerung würde ich gerne anzeigen lassen wer gerade an einem gesperrten Datensatz arbeitet. Das er gesperrt ist bekommt man gut durch ein 'dummyUptdate' heraus, aber wer da gerade noch mit zwei Fingersystem und Moorhuhn in Nebentätigkeit an einem Record bastelt fehlt mir noch.

Grüße // Martin



PS: als offenen Frage markiert.

mkinzler 21. Nov 2007 21:57

Re: Firebird: Wer "locked" meinen Record?
 
Müsste in einer Systemtabelle stehen.
Aber imho kann man in FireBird auf Locks verzichten

mschaefer 22. Nov 2007 09:15

Re: Firebird: Wer "locked" meinen Record?
 
Moin, moin,

Ja Erfahrungsgemäß dauert das Bearbeiten der Datensätze durch den User doch etwas länger, Deshalb geht es letztlich um eine Art Anwenderinfo, wer da gerade dran ist. Die Idee war dies nur Abzufragen, wenn man explizit einen bestimmten Datensatz bearbeiten will. Zu Systemtabellen gibt es einige Beispiele für Abfragen auf FB - Systemtabellen. Informationen über Locks sind dort nicht zu finden.

Da diese Record oder Arealocks auch nur kurze Zeit bestehen können wird dies hochwahrscheinlich nicht in die Systemtabellen gespeichert, sondern nur im Speicher gehalten. Da fehlen mir derzeit Infos zur Debug-API, wo ich sowas Vermuten würde.

Grüße // Martin

mschaefer 22. Nov 2007 12:53

Re: Firebird: Wer "locked" meinen Record?
 
Zwischenfazit:

Über das DBMS scheint es da keinen Weg zu geben.
Bleibt also nur die Variante über Userdaten in der
aktuellen Tabelle. Der Ablauf wäre dann ca. folgender:

1.- Im Grid auf Basis einer ReadOnlyQuery wird ein Datensatz angeklickt.
2.- Versuch: Eintragen der IP oder des Usernamens in ein User_ID Feld in der Tabelle und posten.
3a. Fehlschlag: Datensatz gesperrt, dann exception und Record lesen um aktuellen Nutzer anzuzeigen.
3b. Erfolg: User eintragen, posten und daruf Edit für Recordbearbeitung. Post bei Abschluss.
4.- Detailansicht-Eende und Grid-Aufruf.

Na soweit im Groben // Martin

mkinzler 22. Nov 2007 13:12

Re: Firebird: Wer "locked" meinen Record?
 
Du könntest auch mit benutzerdefinierten Kontextvariablen arbeiten

mschaefer 22. Nov 2007 14:02

Re: Firebird: Wer "locked" meinen Record?
 
Zitat:

Zitat von mkinzler
Du könntest auch mit benutzerdefinierten Kontextvariablen arbeiten

Mit was :?: :?: :?: SP :?: // Martin


PS: Wann schläfst Du eigenlich :wink:

mkinzler 22. Nov 2007 14:08

Re: Firebird: Wer "locked" meinen Record?
 
http://derentwickler.de/itr/online_a...nodeid,56.html
Zitat:

PS: Wann schläfst Du eigenlich Wink
Nachts :mrgreen:

mschaefer 22. Nov 2007 19:20

Re: Firebird: Wer "locked" meinen Record?
 
Moin, Spätmoin

Ein Konzept bringe ich aktuell damit nicht auf den Weg. Jedenfalls sehe derzeit keinen Vorteil gegenüber einer eigenen Locktabelle wo Tabelle Datensatz und User sowie LockInZeit abgelegt sind (da gab es mal einen Entwickelr-Artikel). Das ich bisher nicht herausbekomme wer welche Transaktion eingeleitet hat macht die Sache nicht besser.

Grüße // Martin


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz