AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Exklusiver Zugriff auf Datenbank via MySQL
Thema durchsuchen
Ansicht
Themen-Optionen

Exklusiver Zugriff auf Datenbank via MySQL

Ein Thema von TypusMensch · begonnen am 30. Mai 2007 · letzter Beitrag vom 31. Mai 2007
Antwort Antwort
TypusMensch

Registriert seit: 29. Aug 2003
Ort: Goth-A
182 Beiträge
 
Delphi 7 Enterprise
 
#1

Exklusiver Zugriff auf Datenbank via MySQL

  Alt 30. Mai 2007, 18:35
Datenbank: MySQL • Version: 5.0 • Zugriff über: Zeoslib
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Exklusiver Zugriff auf Datenbank via MySQL

  Alt 30. Mai 2007, 18:46
Verwende eine transaktionsfähige Storage-Engine.
Markus Kinzler
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: Exklusiver Zugriff auf Datenbank via MySQL

  Alt 30. Mai 2007, 18:55
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.
Andreas
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Exklusiver Zugriff auf Datenbank via MySQL

  Alt 30. Mai 2007, 18:57
Zitat:
Man kann auch Transactions (aber nicht bei MySQL) verwenden;
Kommt darauf an, ob die verwendete Storage-Engine das unterstützt.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Exklusiver Zugriff auf Datenbank via MySQL

  Alt 30. Mai 2007, 18:58
Hat MySQL nicht inzwischen einen transaktionsfähigen Datenbanktyp?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

Re: Exklusiver Zugriff auf Datenbank via MySQL

  Alt 30. Mai 2007, 19:21
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.
$2B or not $2B
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Exklusiver Zugriff auf Datenbank via MySQL

  Alt 30. Mai 2007, 19:22
Locking funktioniert unabhängig ob Transaktionen unterstützt werden oder nicht.
Markus Kinzler
  Mit Zitat antworten Zitat
TypusMensch

Registriert seit: 29. Aug 2003
Ort: Goth-A
182 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Exklusiver Zugriff auf Datenbank via MySQL

  Alt 30. Mai 2007, 22:45
Zitat von himitsu:
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.
Das macht Sinn. Auf die Idee bin i noch gar nicht gekommen.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Exklusiver Zugriff auf Datenbank via MySQL

  Alt 31. Mai 2007, 07:16
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.
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.641 Beiträge
 
#10

Re: Exklusiver Zugriff auf Datenbank via MySQL

  Alt 31. Mai 2007, 08:13
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?".
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:11 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