AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Gleichzeitige Änderung des Datensatzes am anderen PC
Thema durchsuchen
Ansicht
Themen-Optionen

Gleichzeitige Änderung des Datensatzes am anderen PC

Ein Thema von sunnyandy · begonnen am 27. Jan 2008 · letzter Beitrag vom 28. Jan 2008
Antwort Antwort
sunnyandy

Registriert seit: 24. Feb 2006
49 Beiträge
 
#1

Gleichzeitige Änderung des Datensatzes am anderen PC

  Alt 27. Jan 2008, 16:41
Datenbank: Ms Sql Server • Version: 2000 • Zugriff über: Ado
Hallo!

Angenommen, ich lasse mir mit meinem Programm gerade einen Datensatz anzeigen aus der DB, und zum gleichen Zeitpunkt wird dieser Datensatz an einem anderen PC geändert. Dann stimmen die mir angezeigten Daten natürlich nicht mit dem Bestand überein.

Was macht man in so einer Situation, kann ich irgendwie davon erfahren, dass dieser Datensatz geändert wurde ?

Ich benutze die Ado-Komponenten für die Verbindung zum Ms Sql Server.

Dankeschön schonmal für eure tolle Hilfe!
Gruß, Andy
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Gleichzeitige Änderung des Datensatzes am anderen PC

  Alt 27. Jan 2008, 16:47
Es gibt mehrer Möglichkeiten sowas zu erkennen/verhindern/umgehen:

1, Implementier einen Server übern den alle Aktionen laufen (3Tier-Architektur)
2, Definier eine LastChange-Spalte die du vor dem Post prüfst bzw. in's update mit verwendest
3, Definier eine Sperrtabelle in der Anwendungen DB-Einträge welche zum ändern gesperrt werden sollen eingetragen werden
4, Fordere die Datensätze zum Update an (AFAIK mit der Syntax "SELECT ... FOR UPDATE")

Jede der Lösungsansätze hat vor und Nachteile
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
sunnyandy

Registriert seit: 24. Feb 2006
49 Beiträge
 
#3

Re: Gleichzeitige Änderung des Datensatzes am anderen PC

  Alt 27. Jan 2008, 17:01
Hallo,

danke! Den 4. Punkt finde ich sehr interessant. Das heißt, der Datensatz wird durch SELECT FOR UPDATE solange gesperrt, bis ich ein Commit mache? Das ist doch schonmal was.

Vielleicht kann ich so mein eigentliches Problem genauer beschreiben: Ich kann in meiner Anwendung z.B. eine Kundenliste mehrmals gleichzeitig öffnen. Wenn ich aus der einen Liste einen Kunden lösche, möchte ich natürlich, dass er aus den anderen Listen ebenfalls verschwindet.

Muss ich das Programm-Intern lösen und gibt es dafür was von der Datenbank?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Gleichzeitige Änderung des Datensatzes am anderen PC

  Alt 27. Jan 2008, 17:49
Zitat von sunnyandy:
Vielleicht kann ich so mein eigentliches Problem genauer beschreiben: Ich kann in meiner Anwendung z.B. eine Kundenliste mehrmals gleichzeitig öffnen. Wenn ich aus der einen Liste einen Kunden lösche, möchte ich natürlich, dass er aus den anderen Listen ebenfalls verschwindet.

Muss ich das Programm-Intern lösen und gibt es dafür was von der Datenbank?
Beim MS SQL-Server gibt es 'ne Event-Schnittstelle an der man sich ranhängen kann. Hab damit aber bisher nichts gemacht.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Gleichzeitige Änderung des Datensatzes am anderen PC

  Alt 27. Jan 2008, 20:07
Ich würde so etwas nicht über eine Sperre realisieren.

In einem gut strukturierten Betrieb wird es wohl sehr selten zwei Personen geben, die die gleichen Daten eines Datensatzes ändern. Bei Kundenstammdaten wird die Adresse z.B. sehr selten von zwei Personen gleichzeitig verändert, aber vielleicht ändert der eine die Adresse und der Andere die Bankverbindung.

Man sollte ein Reconcile in Erwägung ziehen.

Du lädst Dir einen logischen Datensatz, Das ist Version 1.
Der Anwender ändert ihn und will ihn speichern. Das ist Version 2.
Vor dem Speichern lädst Du den Datensatz nochmal. Das ist Version 1a.

Unterschiede zwischen V1 und V2 hat der Anwender vorgenommen. Nennen wir die gemachten Änderungen A1.
Unterschiede zwischen V1 und V1a haben ANDERE Anwender vorgenommen. Diese Änderungen nennen wir A2.

In den Fällen, in denen A1 und A2 disjunkt sind, kann man getrost die Änderungen in V2 abspeichern, denn die tangieren in keinem Fall die vorherigen Änderungen.

Nur wenn es Felder gibt, die sowohl in A1 als auch in A2 sind, haben wir eventuell einen Änderungskonflikt vorliegen. Aber auch nur dann, wenn die Änderungen and den einzelnen Feldern unterschiedlich sind.

Welche Änderung denn hier nun die richtig ist, können nur die Mitarbeiter selbst bestimmen. Hier sollte bei den die Änderung betreffenden Mitarbeitern ein Dialog erscheinen, der auf den Konflikt aufmerksam macht und sie auffordern, zu entscheiden, welche Version denn nun die Richtige ist.

Mit diesem Verfahren wirst Du bei interaktiven Änderungen (also Änderungen, die am Bildschirm von Menschen vorgenommen werden), i.A. nur sehr selten auf Konflikte treffen. Und wenn, dann sind dies zum Einen auch Probleme in der Unternehmensdisziplin, und zum Anderen schnell lösbar.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Gleichzeitige Änderung des Datensatzes am anderen PC

  Alt 28. Jan 2008, 08:00
Du könntest auch prüfen, welche Felder dieses Datensatzes geändert wurden. Und dann speicherst Du nur diese Felder.

Falls dann doch mehrere Felder von mehreren Usern gleichzeitig geändert wurden, muss Du auf Mechanismen meiner Vorredner zurück greifen.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  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 23:33 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