![]() |
Datenbank: MySQL • Version: 5.0 • Zugriff über: Zeoslib
Exklusiver Zugriff auf Datenbank via MySQL
Hallo,
Ich stelle mir gerade die Frage wie ich unter MySQL und Delphi32 mittels Zeoslib-Komponenten den exklussiven Zugriff steuern kann. Beispiel: User greif auf DB zu, Daten werden in einem Dialog eingelesen. Er hat nun die Möglichkeit diese zu verändern und dann abzuspeichern, alternativ >>abbrechen<<. Ein andere User aus dem Netzwerk greift nun auf DB-Eintrag zu. Die Daten werden eingelesen. Genau in dem Moment greift der andere User auf den selben Eintrag zu. Welcher nun zuletzt speichert, dessen Daten gelten als geschrieben. Die anderen verliert die Datenbank doch (?). Oder hat MySQL intern eine "Sperre"? Timeline (parallel): User a) |--ZUGRIFF---------------------------------SCHREIBEN------| User b) |----------ZUGRIFF--------SCHREIBEN-----------------------| Nun überschreibt User a die Daten, die User b gerade erst geschrieben hat. Wie also kann ich feststellen ob User a akutell den einen Eintrag bearbeitet bzw. auf einen einzelnen Eintrag zugreift, um den zweiten "warten zu lassen"? MfG |
Re: Exklusiver Zugriff auf Datenbank via MySQL
Verwende eine transaktionsfähige Storage-Engine.
|
Re: Exklusiver Zugriff auf Datenbank via MySQL
Was würde passieren, wenn User A mit Editieren beginnt und dann in die Mittagspause geht, während User B verzweifelt (*) versucht, den Datensatz zu ändern und nicht darf ?!!
(*) User B muss den Auftragsstatus ändern und das Angebot abschicken oder der Millionenauftrag geht an die Konkurrenz. Deshalb fährt man mit der Strategie "wer zuletzt speichert hat gewonnen" besser. Man kann auch Transactions (aber nicht bei MySQL) verwenden; damit wird garantiert,dass Änderungen an der Datenbank (auch an mehreren Tabellen) vollständig ausgeführt oder komplett rückabgewickelt werden. |
Re: Exklusiver Zugriff auf Datenbank via MySQL
Zitat:
|
Re: Exklusiver Zugriff auf Datenbank via MySQL
Hat MySQL nicht inzwischen einen transaktionsfähigen Datenbanktyp?
|
Re: Exklusiver Zugriff auf Datenbank via MySQL
Ohne Transaktionen wäre doch sowas wie die RedBox hier im Forum recht praktisch.
Also vorm Speichern prüfen, ob zwischenzeitlich was geändert wurde und dann Rückfragen, oder der User (A) die Änderungen vom anderem User (B) überschreiben will. |
Re: Exklusiver Zugriff auf Datenbank via MySQL
Locking funktioniert unabhängig ob Transaktionen unterstützt werden oder nicht.
|
Re: Exklusiver Zugriff auf Datenbank via MySQL
Zitat:
|
Re: Exklusiver Zugriff auf Datenbank via MySQL
Nutze Transaktionen, denn dafür sind die da, anstatt eigenhändig auf Änderung von Datensätzen zu prüfen. Der transaktionsfähige Tabellentyp unter MySQL heisst übrigens InnoDb. Einfach mal danach in der Help nachlesen.
|
Re: Exklusiver Zugriff auf Datenbank via MySQL
Was sich bewährt hat:
In jeder Tabelle ein Feld einfügen: LastChanged. Das wird immer durch den aktuellen Timestamp beim Speichern gefüllt. Somit weiss Deine Anwendung genau, wann der Datensatz der aktuell in Bearbeitung ist das letzte mal geändert wurde. Du kannst nun beim Speichern den Datensatz nochmal selektieren (where LastChanged > MyCurrentLastChanged). Bekommst Du nichts zurück hat sich nichts geändert und Du kannst gefahrlos speichern ohne Änderungen zu überbügeln. Kommt jedoch ein Datensatz zurück kannst Du dem User sagen: "Hey, da hat sich was geändert. Willste weiter machen oder die neuen Daten erst nochmal angucken?". |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:00 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-2025 by Thomas Breitkreuz