Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Vorgehensweise für gleichzeitiges bearbeiten von Datensätzen (https://www.delphipraxis.net/161713-vorgehensweise-fuer-gleichzeitiges-bearbeiten-von-datensaetzen.html)

RWarnecke 17. Jul 2011 10:44

Datenbank: Firebird • Version: 2.1 • Zugriff über: UniDAC

Vorgehensweise für gleichzeitiges bearbeiten von Datensätzen
 
Hallo zusammen,

ich schreibe gerade an einer Datenbank-Anwendung, die nachher von mehreren Personen genutzt werden soll. Die Datensätze werden in Klassen und Objectlisten eingelesen. Eine Änderung erkennt diese Klasse oder die Objectliste und schreibt dann die Änderung in die Tabelle der Datenbank. So mal der grobe Ablauf, wenn nur eine Person auf die Datensätze zugreift.

Jetzt stellt sich mir die Frage, wie kann ich vorgehen, wenn jetzt zum Beispiel 2 Leute auf einen Datensatz zugeifen ? Der eine ändert zum Beispiel die E-Mail Adresse und der andere trägt noch eine zusätzliche Telefonnummer ein. Wenn beide Anwender auf speichern klicken, dann soll natürlich in dem Datensatz die zusätzliche Telfonnummer stehen und die geänderte E-Mail Adresse.

Wie macht Ihr das in euren Programmen ?

Sharky 17. Jul 2011 10:48

AW: Vorgehensweise für gleichzeitiges bearbeiten von Datensätzen
 
Schwierig das ist.

Ich persönliche "sperre" einen Datensatz sobald ein Anwender in ändert; so das andere nur noch lesen können.

Das Problem ist ja: Was machst Du wenn zwei Benutzer gleichzeitig die E-Mail Adresse ändern? Welche eingabe ist jetzt richtig?

mkinzler 17. Jul 2011 10:54

AW: Vorgehensweise für gleichzeitiges bearbeiten von Datensätzen
 
Am Besten mit einem erneuten Lesen von der Änderung (
SQL-Code:
Select for Update ... [WITH LOCK]
)

RWarnecke 17. Jul 2011 10:58

AW: Vorgehensweise für gleichzeitiges bearbeiten von Datensätzen
 
Hallo Sharky,

danke erstmal für Deine Antwort. Genau vor dem Thema stehe ich.

Wie sperre ich einen Datensatz, welche Vorgehensweise ist da die Beste ?
Oder gibt es noch eine ganz andere Variante ?
Welche Variante ist am Fehleranfälligsten, die ich auf gar keinen Fall nehmen sollte ?

Das sind alles Fragen über Fragen und hoffe das ich von euch Informationen bekommen kann, wie ich das am besten aufbaue. Im Moment kann ich noch alles in eine bestimmte Richtung lenken, da das Programm noch im Aufbau ist.

Edit: [Kein Roter Kasten]
Hallo Markus,

ein Select vor den Update und dann nochmal die Werte vergleichen. Verstehe ich Deine Aussage so richtig ? Würde ich da nicht einen unnötigen Overhead erzeugen ?

FredlFesl 19. Jul 2011 11:40

AW: Vorgehensweise für gleichzeitiges bearbeiten von Datensätzen
 
Zitat:

Zitat von RWarnecke (Beitrag 1112172)
ein Select vor den Update und dann nochmal die Werte vergleichen. Verstehe ich Deine Aussage so richtig ? Würde ich da nicht einen unnötigen Overhead erzeugen ?

Glaub, er meint das so. Und der Overhead ist erstens nicht unnötig und zweitens minimal.

hanspeter 19. Jul 2011 13:01

AW: Vorgehensweise für gleichzeitiges bearbeiten von Datensätzen
 
Ich schreibe nur die Daten zurück, welche sich tatsächlich geändert haben.
Also email und Telefon sollten zulässig sein.
Ein deadlook tritt nur ein, wenn beide gleichzeitig z.B. die Telefonnr. ändern.
Ich habe mir eine Funktion gebaut, die liest einen Datensatz und bringt die Daten in die Editmaske.
Ich benenne die Componenten mit den Feldnamen aus der Datenbank.
(z.B. edt_Telefon , edt_email , abx_Geschlecht).
Das Tool extrahiert die Feldnamen und füllt die Maske.
Beim Zurückschreiben werden nur die Felder berücksichtigt, die sich geändert haben.

Nur für das Rückschreiben (im Millisekundenbereich) kann der Satz gelockt werden.

Gruß Peter


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:25 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