Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Locking deaktivieren (https://www.delphipraxis.net/85966-locking-deaktivieren.html)

hirnstroem 7. Feb 2007 09:21

Datenbank: Access • Version: kA • Zugriff über: ADO

Locking deaktivieren
 
'loha Folks,

in einem Projekt sind ein Paar DataSets (TADODataSet), welche über eine Connection (TADOConnection) auf eine Access Datenbank zugreifen. Nun würde ich gerne das Locking deaktivieren, weiss aber nicht wie.

Die verschiedenen möglichen LockTypen wären ltUnspecified, ltReadOnly, ltPessimistic, ltOptimistic, ltBatchOptimistic, aber von diesen macht eigentlich keiner was ich will. ltUnspecified schien mir noch am vernünftigsten, da hier ja nicht auch das Locking geachtet wird. Allerdings kann ich mit ltUnspecified die Datensätze gar nicht mehr editieren, was mich daraus schliessen lässt, dass die Access Datenbank abriegelt und ich dort den LockType angeben muss.

Letztdenendes soll kein Locking stattfinden. Wenn mehrere Benutzer denselben Datensatz gleichzeitig bearbeiten, soll der zuletzt gespeicherte Datensatz massgebend sein...der letzte gewinnt.

Wie bekomme ich das hin?

Grüsse
hirnstroem

shmia 7. Feb 2007 09:48

Re: Locking deaktivieren
 
Zitat:

Zitat von hirnstroem
Wenn mehrere Benutzer denselben Datensatz gleichzeitig bearbeiten, soll der zuletzt gespeicherte Datensatz massgebend sein...der letzte gewinnt.

Dann ist ltOptimistic genau das Richtige. (das ist auch der Defaultwert der Komponenten)
Otimistic bedeutet die Änderungen im Dataset werden einfach zurückgeschieben in der Hoffnung, dass kein Anderer eine Veränderung vorgenommen hat.
Performanceverbessernd ist, wenn alle Abfragen, die nicht editiert werden auf ltReadOnly gesetzt werden.

hirnstroem 7. Feb 2007 10:22

Re: Locking deaktivieren
 
Heisst optimistisch nicht lediglich, dass beim Speichern eines Datensatzes überprüft wird, ob der ursprüngliche Datensatz noch dieselben Daten enthält? Wenn ja, kann gespeichert werden, wenn nein, kann nicht gespeichert werden.

Optimistisches Locking bewirkt bei mir jedenfalls nichts anderes.

hirnstroem 7. Feb 2007 11:13

Re: Locking deaktivieren
 
Nachfolgend ein kurzer Auszug der Access OH zum Thema Sperrungen:

Zitat:

Informationen zur Auswahl einer Strategie zum Sperren von Datensätzen in einer Access-Datenbank unter den Bedingungen einer Mehrbenutzerumgebung
Wenn Sie einen Datensatz bearbeiten, kann Microsoft Access andere Benutzer automatisch daran hindern, den Datensatz zu ändern, bevor Sie Ihre Bearbeitung abgeschlossen haben.

Wenn ein Benutzer exklusiven Zugriff auf einen Datensatz erhält, wird dies Sperrung genannt. Man unterscheidet beim Sperren drei Strategien:

Keine Sperrungen: Microsoft Access sperrt den Datensatz, den Sie gerade bearbeiten, nicht. Wenn Sie versuchen, Änderungen an einem Datensatz, den ein anderer Benutzer ebenfalls geändert hat, zu speichern, zeigt Microsoft Access eine Meldung mit den folgenden Optionen an: Überschreiben der Änderungen des anderen Benutzers, Kopieren Ihrer Version des Datensatzes in die Zwischenablage oder Verwerfen Ihrer Änderungen. Diese Strategie stellt zwar sicher, dass Datensätze immer bearbeitet werden können, es können jedoch Konflikte bei der Bearbeitung auftreten.


Bearbeitete Datensätze: Microsoft Access sperrt den Datensatz, den Sie gerade bearbeiten, so dass kein anderer Benutzer ihn ändern kann. Unter Umständen werden auch andere Datensätze gesperrt, die auf dem Datenträger in unmittelbarer Nähe gespeichert sind. Falls ein anderer Benutzer versucht, einen von Ihnen gesperrten Datensatz zu bearbeiten, zeigt Microsoft Access im Datenblatt des anderen Benutzers den Indikator "Gesperrter Datensatz" an. Diese Strategie stellt sicher, dass Sie begonnene Änderungen immer zu Ende führen können. Sie ist geeignet, wenn es nicht häufig zu Konflikten bei der Bearbeitung kommt.


Alle Datensätze: Microsoft Access sperrt alle Datensätze im Formular oder Datenblatt (und in den zugrunde liegenden Tabellen), die Sie bis zum Schließen des Formulars oder Datenblattes bearbeiten, so dass sie von niemand anderem bearbeitet oder gesperrt werden können. Diese Strategie ist sehr einschränkend. Sie sollten sie nur dann wählen, wenn Sie wissen, dass Sie jeweils der/die einzige sind, der/die die Datensätze bearbeiten muss.
Um Informationen zum Festlegen einer dieser Optionen zu erhalten, klicken Sie auf .

Anmerkung Wenn Sie Daten in einer verknüpften SQL-Datenbanktabelle unter Verwendung von ODBC bearbeiten, sperrt Microsoft Access die Datensätze nicht. Stattdessen steuern die Regeln der SQL-Datenbank die Sperrung. In diesem Fall verhält sich Microsoft Access so, als ob die Einstellung Keine Sperrungen gewählt wurde, unabhängig davon, welche Einstellung Sie für Ihre Datenbank gewählt haben.
Daraus schliesse ich, dass Access nicht in der Lage ist, Sperrungen komplett zu deaktivieren, denn wenn die Option "Keine Sperrungen" aktiviert ist, wird optimistisch gesperrt, der schnellste Gewinnt beim Speichern also.

Nun habe ich Access beigebracht, das Sperren ADO zu überlassen. ADO bietet ja aber nur die im ersten Beitrag erwähnten LockTypen, von welchen keiner mein Bedürfnis abzudecken scheint.

Kann es überhaupt so enirichtet werden, dass der letzte der speichert, egal was sich am Datensatz ändert, auch wirklich speichern kann?!

hirnstroem 21. Feb 2007 10:14

Re: Locking deaktivieren
 
*nochmal nachhak*

Ist jemandem bekannt, wie man in einem Projekt, in welchem mit ADO gearbeitet und auf eine Access Datenbank zugegriffen wird, das Sperren von Datensätzen vollständig deaktiviert?!

Grüsse
hirnstroem


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:35 Uhr.

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