AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Meldung "0 record(s) updated. Only one record should have been updated"
Thema durchsuchen
Ansicht
Themen-Optionen

Meldung "0 record(s) updated. Only one record should have been updated"

Ein Thema von erich.wanker · begonnen am 10. Sep 2020 · letzter Beitrag vom 10. Sep 2020
 
Delphi.Narium

Registriert seit: 27. Nov 2017
2.558 Beiträge
 
Delphi 7 Professional
 
#4

AW: Meldung "0 record(s) updated. Only one record should have been updated"

  Alt 10. Sep 2020, 14:29
Wenn AutoCommit auf True steht, gehe ich mal davon aus, dass Du kein eigenes Transationshandling im Programm hast.

Wenn also zwei Clients (mehr oder weniger) zeitgleich eine Transaktion starten, dann sehen sie quasi den gleichen Datenbestand. Wenn nun ein Client seine Transaktion per AutoCommit beendet, hat er einen neuen Datenbestand. Der Client, der seine Transaktion noch nicht beendet hat, hat weiterhin seinen alten Datenbestand. Will er nun seine Transaktion schließen, weiß er nicht, was der andere Client bereits geeändert hat und speichert daher seine Daten. Die Datenbank weiß jedoch, dass sein Datenbestand von dem des anderen Clients abweicht. Für sie kann dadurch ein Konflikt entstehen.

Wenn Client 1 den Datensatz mit ID = 1 ändert und dort als Namen z. B. Müller eingibt, während Client 2 gleichzeitig den Datensatz mit ID 1 ändert und dort als Namen z. B. Meier eingibt: Wessen Daten sollen in der Datenbank stehen? Die von Client 1, weil er den Datensätz zuerst zum Ändern aufgerufen hat oder die Daten von Client 2, weil er zuerst gespeichert hat?
Oder sollen die Daten von Client 2 kommentarlos überschrieben werden, obwohl Client 1 nicht weiß, was Client 2 geändert hat?

Wollen mehrere Clients einen Datensatz ändern und die Transaktionen überschneiden sich, so wird es immer zu einem Fehler kommen. (U. a. dafür sind Transaktionen da.)
Code:
Client 1 - Start der Transaktion
Client 1 - lesen des Datensatzes
Client 2 - Start der Transaktion
Client 2 - lesen des Datensatzes
Client 1 - ändern des Datensatzes
Client 2 - ändern des Datensatzes
Client 2 - speichern des Datensatzes
Client 1 - speichern des Datensatzes
Client 2 - Commit
Client 1 - Commit
Was soll jetzt in der Datenbank stehen?
Die Änderung von Client 2, weil er zuerst das Commit gemacht hat?
Die Änderung von Client 1, weil er zuletzt das Commit gemacht hat?

Und nun das Ganze nochmal mit 25.811 Clients?

Wer soll da wann unter welchen Voraussetzungen gewinnen?

Fehlermeldung abfangen und darauf hinweisen, dass der Datensatz zwischenzeitlich anderweitig geändert wurde.
Anzeige der Änderungen anbieten, um dann mit den geänderten Daten weiterzuarbeiten oder Änderungen verwerfen (Rollback).
  Mit Zitat antworten Zitat
 


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 18:12 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