AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken "MySql:CDS: Die Änderungen müssen vor der Aktualisierung
Thema durchsuchen
Ansicht
Themen-Optionen

"MySql:CDS: Die Änderungen müssen vor der Aktualisierung

Ein Thema von hirsch · begonnen am 17. Jul 2008 · letzter Beitrag vom 27. Feb 2009
Antwort Antwort
hirsch

Registriert seit: 29. Jan 2008
Ort: Tuttlingen
88 Beiträge
 
Delphi 2007 Professional
 
#1

"MySql:CDS: Die Änderungen müssen vor der Aktualisierun

  Alt 17. Jul 2008, 08:58
Datenbank: MySql • Version: 5 • Zugriff über: DBX
Liebe Spezialisten,
"CDS: Die Änderungen müssen vor der Aktualisierung der Daten übernommen werden."
Diese Fehlermeldung kommt sporadisch beim Ändern von Datensätzen.
Also, es sieht so aus, dass bei ca 100 Datensätzen eine inhaltliche Änderung in einer Schleife funktioniert. Ich kontrolliere das dann auch gleich in der Tabelle. Wenn aber der o.G. Fehler ein einziges mal erscheint, dann kann der Datensatz nicht mehr geändert werden, d.h. wenn ich dann mein kleines Proggi zu mache und wieder öffne, kommt der gleiche Fehler wieder, bei der gleichen Datensatz-ID.
Irgendwie scheint da was am Datensatz zu sein. Ich habe aber keine Ahnung wie ich genau diesen einen Datensatz so hin ändere, dass er mit der DBX wieder geändert werden kann.
Achja das gleiche tritt natürlich bei Löschungen auch auf.
100 mal gehtz, (damit meine ich oft, die Anzahl ist für mich unvorhersehbar) und wenn der Fehler einmal auftritt, kann ich genau diesen Satz nicht mehr löschen, andere jedoch schon. Verstehe ich nicht.
Der Code sieht so aus:
Delphi-Quellcode:
Procedure Tsich.DS_LM_loeschen(satz : Longword);
begin
  SQL_Str:='Select * from Pack where ID='+IntToStr(satz);
  Data.DataModule1.CDSLMPs.Active:=False;
  Data.DataModule1.SDSLMPs.Active:=False;
  Data.DataModule1.SDSLMPs.CommandText:=sql_str;
  Data.DataModule1.SDSLMPs.Active:=True;
  Data.DataModule1.CDSLMPs.Active:=True;
  if Data.DataModule1.CDSLMPs.RecordCount=1 then
  begin
    Data.DataModule1.CDSLMPs.Edit;
    Data.DataModule1.CDSLMPs.Delete;
    Data.DataModule1.CDSLMPs.ApplyUpdates(-1); //<-kommt manchmal hier
  end
  else showmessage ('bei '+intToStr(satz)+'stimmt was nicht! Nur '+intToStr(Data.DataModule1.CDSLMPs.RecordCount)+' Datensätze');
end;
Also ich hab keinen Plan, dsInsert, dsEdit hab ich auch schon abgefragt, und die würden soweit schon passen (was ja auch ganz oft funktioniert).
Vielen Dank für Ihre Hilfe.
Wolfgang Hirsch
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

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

Re: "MySql:CDS: Die Änderungen müssen vor der Aktualisi

  Alt 17. Jul 2008, 09:15
Normalerweise sollte das '.Edit' vor dem '.Delete' überflüssig bzw. falsch sein.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
hirsch

Registriert seit: 29. Jan 2008
Ort: Tuttlingen
88 Beiträge
 
Delphi 2007 Professional
 
#3

Re: "MySql:CDS: Die Änderungen müssen vor der Aktualisi

  Alt 17. Jul 2008, 09:56
Hm, den .edit hab ich raus gescmissen.
Das Verhalten ist immer noch das gleiche.
Wolfgang Hirsch
  Mit Zitat antworten Zitat
hirsch

Registriert seit: 29. Jan 2008
Ort: Tuttlingen
88 Beiträge
 
Delphi 2007 Professional
 
#4

Re: "MySql:CDS: Die Änderungen müssen vor der Aktualisi

  Alt 18. Jul 2008, 16:34
eine Andere Möglichkeit wäre aber auch per SQL-Befehl den Datensatz zu löschen.
geht das so?
Bei meinem Versuch klappt das nicht, weiss aber nicht warum:
Delphi-Quellcode:
query:='Delete from Packingstructure where ID='+intToStr(satz);
Data.DataModule1.CDSLMPs.Active:=False;
Data.DataModule1.SDSLMPs.Active:=False;
Data.DataModule1.SDSLMPs.CommandText:=query;
Data.DataModule1.SDSLMPs.Active:=True;
Data.DataModule1.CDSLMPs.Active:=True;
Vielleicht gibt es ja einen anderen Wort, wo ich meinen SQL-Befehl von der MySQL-Datenbank direkt ausführen kann.
Hat jemand eine Idee?
Wolfgang Hirsch
  Mit Zitat antworten Zitat
hirsch

Registriert seit: 29. Jan 2008
Ort: Tuttlingen
88 Beiträge
 
Delphi 2007 Professional
 
#5

Re: "MySql:CDS: Die Änderungen müssen vor der Aktualisi

  Alt 23. Jul 2008, 13:24
Also ich bin noch nicht weiter gekommen.
Habs versucht mit einer Stored Procedure und den Parametern. Bin gegen die Wand gelaufen.
Nun bin ich wieder so weit wie vorher.
Delphi-Quellcode:
Procedure TLMobilesicherung.DS_LM_loeschen(satz : Longword);
begin
  SQL_Str:='Select * from Pack ID='+IntToStr(satz);
  Data.DataModule1.SDSLMPs.Refresh;
  Data.DataModule1.CDSLMPs.Refresh;
  Data.DataModule1.CDSLMPs.Active:=False;
  Data.DataModule1.SDSLMPs.Active:=False;
  Data.DataModule1.SDSLMPs.CommandText:=sql_str;
  Data.DataModule1.SDSLMPs.Active:=True;
  Data.DataModule1.CDSLMPs.Active:=True;
  if Data.DataModule1.CDSLMPs.RecordCount=1 then
  begin
    Data.DataModule1.CDSLMPS.Active:=False;
    Data.DataModule1.SDSLMPS.Active:=False;
    Data.DataModule1.SDSLMPS.CommandText:=SQL_Str;
    Data.DataModule1.SDSLMPS.Active:=True;
    Data.DataModule1.CDSLMPS.Active:=True;
    Data.DataModule1.CDSLMPS.Delete;
    Data.DataModule1.CDSLMPS.ApplyUpdates(-1); //<-hier kommt immer 'Datensatz nicht gefunden oder von anderem Benutzer geändert
  end
  else showmessage ('bei '+intToStr(satz)+'stimmt was nicht! Nur '+intToStr(Data.DataModule1.CDSLMPs.RecordCount)+' Datensätze');

end;
hab dann in die
Delphi-Quellcode:
procedure TDataModule1.CDSLMPSAfterScroll(DataSet: TDataSet);
begin
  if Data.DataModule1.CDSLMPS.UpdateStatus=usModified then
     Data.DataModule1.CDSLMPS.RefreshRecord;

end;

procedure TDataModule1.CDSLMPSBeforeScroll(DataSet: TDataSet);
begin
     showmessage(Data.DataModule1.CDSLMPS.fieldbyname('ID').asstring);
end;
geschrieben um zu sehen ob es den Datensatz wirklich nicht gibt oder ob er geändert wurde.
Er wurde soweit ich sehe nicht geändert.
Kann mir jemand helfen?
Wolfgang Hirsch
  Mit Zitat antworten Zitat
hirsch

Registriert seit: 29. Jan 2008
Ort: Tuttlingen
88 Beiträge
 
Delphi 2007 Professional
 
#6

Re: "MySql:CDS: Die Änderungen müssen vor der Aktualisi

  Alt 24. Jul 2008, 15:48
Ich denke es gibt zwei Möglichkeiten, weil ich noch nix bekommen hab.

Erste: Das Thema ist garkein Thema, keiner gibt sich damit ab, mir ne Lösung zu geben, weil es zu einfach ist.
Zweite: Es weiß nieman eine Lösung.

Ohje....
Wolfgang Hirsch
  Mit Zitat antworten Zitat
hirsch

Registriert seit: 29. Jan 2008
Ort: Tuttlingen
88 Beiträge
 
Delphi 2007 Professional
 
#7

Re: "MySql:CDS: Die Änderungen müssen vor der Aktualisi

  Alt 27. Feb 2009, 09:00
Liebes Forum,
ich habe im Delphi-Treff die Lösung nun gefunden.
Ich dachte ich sollte es hier mal kund tun.
Im Datamodul habe ich ja den Konstrukt Datenbank -> TSQL -> Provider -> TClientdataset -> TDataSource.

Nun wenn man im Provider in den Eigenschaften die UpdateMethode
von der Standarteinstellung upWhereAll (Alle Spalten (Felder) werden in die Suche nach dem Datensatz einbezogen)
auf upWhereKeyOnly umstellt (Es werden nur Schlüsselfelder in die Suche nach dem Datensatz einbezogen),

sucht man nur nach dem Index-Feld, welches in meinem Falle ja die Spalte ID ist.
So wird die richtige Zeile beim ApllyUpdates(-1) gefunden.

Ich hoffe, dass vielleicht jemand anderes auch das Problem hatte.
Wolfgang Hirsch
  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 11:20 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