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.563 Beiträge
 
Delphi 7 Professional
 
#2

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

  Alt 10. Sep 2020, 13:36
Schlüsselverletzung: (Constraint oder eindeutiger Index)

Irgendwer vergibt für ID im Primary Field (id) einen Werte, der schon in der Tabelle vorhanden ist.

Es hätten mit diesem Wert mehrere Datensätze aktuallisiert werden müssen, es dürfte aber nur ein Datensatz aktuallisiert werden, deshalb wird kein Datensatz aktuallisiert, sondern diese Fehlermeldung ausgegeben.

Nach welcher Logik wird denn die ID vergeben?

Automatisch von der Datenbank per AutoInc, Sequenz, ... oder macht das jeder Client für sich aus?

Desweiteren:
Delphi-Quellcode:
  ZQuery.SQL.Clear;
  ZQuery.SQL.append('SELECT * FROM tabelle where `Dings` = "' + stringvariable + '" ');
  ZQuery.Open;

  if ZQuery.RecordCount > 0 then
    begin
      ZQuery.Edit;
      ZQuery.fieldbyname('Feld').Asinteger := 12345;
      ZQuery.Post;
    end;
Wenn RecordCount > 0 können im Ergebnis 1 bis n Datensätz enthalten sein.
Beim Post muss nun was aktuallisiert werden, aber für Zeos bzw. die Datenbank reichen die Informationen im Datensatz nicht aus, um eindeutig einen Datensatz in der Datenbank zu identifizieren, der von der Änderung betroffen sein soll. Es wären mit den Datensatzinfos demnach <> 1 Datensätze zu ändern, also entweder 0 oder n, wobei n größer 1 ist.

Das passiert gerne dann, wenn man auf einem Client 1 einen Datensatz ändert und ein Client 2 den gleichen Datensatz zwischenzeitlich geändert hat. Der zwischenzeitlich von Client 2 geänderte Datensatz enthält nicht mehr die gleichen Informationen, wie der von Client 1 gerade zu bearbeitende / speichernde Datensatz. Deshalb scheitern Zeos und / oder Datenbank beim Speichern der Änderungen. Resultat: Deine Fehlermeldung aus dem Threadtitel.

Das passiert gerne, wenn die Transaktionssteuerung nicht so ganz sauber funktioniert (oder fehlt).

Es passiert aber auch gerne, wenn man keine eigene Transaktionssteuerung implementiert hat und in der TZConnection AutoCommit auf true steht.
Wer zuerst speichert gewinnt, der oder die Anderen bekommen Deine Fehlermeldung aus dem Threadtitel.

Weitere Ursachen möglich? Will ich mal nicht ausschließen.
  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 01:16 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