Einzelnen Beitrag anzeigen

Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#1

DataAdapter.Update + RejectChanges: Verständnisproblem

  Alt 17. Okt 2006, 13:56
Datenbank: Firebird • Version: 2.0 RC4 • Zugriff über: Firebird NET Provider 2.0 RC1 von #D 2.0 aus
Hallo,

hurra, ich komme voran: Ich kann jetzt Daten erfassen (mit automatischer Konvertierung und vielfacher Analyse aus HTML-Dateien), speichern, einlesen und ändern mit folgenden Konstruktionen (stark verkürzt dargestellt):
Code:
//  Typisiertes DataSet ds
dataFactory = sc.DbProviderFactories.GetFactory("FirebirdClient");
conn = dataFactory.CreateConnection();
da = dataFactory.CreateDataAdapter();
da.SelectCommand = dataFactory.CreateCommand();
da.SelectCommand.CommandText = "SELECT * FROM " + tbl.TableName;
cmdb = dataFactory.CreateCommandBuilder();
cmdb.DataAdapter = da;
da.Fill(ds, tbl.TableName);
da.InsertCommand = cmdb.GetInsertCommand();
Das funktioniert jetzt, wie gesagt:
  • 1. HTML-Datei analysieren
    2. Daten in die Haupttabelle tbl des Dataset eintragen
    3. zusätzliche Informationen prüfen, mit anderen Tabellen vergleichen und ggf. ändern
    4. Daten aus der Haupttabelle tbl in der Datenbank speichern über da.Update(tbl); Achtung: erst jetzt soll wirklich gespeichert werden!!!
Mein Problem ist nun: Die Schritte in 3. - prüfen, vergleichen, ändern - werden in einem eigenen Formular ausgeführt; Änderungen, die dabei vorgenommen werden, sollten mit AcceptChanges() bestätigt oder mit RejectChanges() zurückgenommen werden können. Aber dies wirkt sich anders aus als gewünscht:
  • Wenn ich AcceptChanges() aufrufe, ohne die Daten vorher in die Datenbank übertragen, werden alle Neuaufnahmen als erledigt betrachtet. Wenn ich also eine manuelle Änderung bestätige, werden alle Neuaufnahmen nicht mehr gespeichert.
  • Wenn ich RejectChanges() aufrufe, wird nicht nur eine manuelle Änderung verworfen, sondern auch jede vorherige Neuaufnahme.
Wie kann ich das von mir gewünschte Verhalten erreichen:
  • den Status nach Abschluss von Punkt 2 im Dataset festhalten
  • spätere Änderungen bestätigen oder verwerfen
  • die vollständige Tabelle vom Dataset in die Datenbank übertragen
Danke für Tipps! Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat