AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Vorgehensweise für gleichzeitiges bearbeiten von Datensätzen
Thema durchsuchen
Ansicht
Themen-Optionen

Vorgehensweise für gleichzeitiges bearbeiten von Datensätzen

Ein Thema von RWarnecke · begonnen am 17. Jul 2011 · letzter Beitrag vom 19. Jul 2011
Antwort Antwort
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#1

Vorgehensweise für gleichzeitiges bearbeiten von Datensätzen

  Alt 17. Jul 2011, 10:44
Datenbank: Firebird • Version: 2.1 • Zugriff über: UniDAC
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 ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#2

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

  Alt 17. Jul 2011, 10:48
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?
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

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

  Alt 17. Jul 2011, 10:54
Am Besten mit einem erneuten Lesen von der Änderung ( Select for Update ... [WITH LOCK] )
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#4

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

  Alt 17. Jul 2011, 10:58
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 ?
Rolf Warnecke
App4Mission

Geändert von RWarnecke (17. Jul 2011 um 11:01 Uhr)
  Mit Zitat antworten Zitat
FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#5

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

  Alt 19. Jul 2011, 11:40
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.
Das Bild hängt schief.
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#6

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

  Alt 19. Jul 2011, 13:01
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
  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 04:51 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