AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken C# DataAdapter.Update + RejectChanges: Verständnisproblem
Thema durchsuchen
Ansicht
Themen-Optionen

DataAdapter.Update + RejectChanges: Verständnisproblem

Ein Thema von Jürgen Thomas · begonnen am 17. Okt 2006 · letzter Beitrag vom 17. Okt 2006
Antwort Antwort
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
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#2

Re: DataAdapter.Update + RejectChanges: Verständnisproblem

  Alt 17. Okt 2006, 14:03
Du kannst dir die Deltas vom DataSet generieren lassen (Siehe DataSet/DataTable.GetChanges).
Diese kannst du dann als eine Art Savepoint hinterlegen bzw. bei jedem weiteren Savepoint per Dataset.Merge mit den Deltas dieses Abschnittes verschmelzen. Zum Schluss führst du Update über die Gesamtmegne der Deltas aus.

Klingt aber IMHO ziemlich bescheuert, ich kenne ich nicht mit DataSets aus.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Jürgen Thomas

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

Re: DataAdapter.Update + RejectChanges: Verständnisproblem

  Alt 17. Okt 2006, 14:54
Zitat von Elvis:
Du kannst dir die Deltas vom DataSet generieren lassen (Siehe DataSet/DataTable.GetChanges).
Diese kannst du dann als eine Art Savepoint hinterlegen bzw. bei jedem weiteren Savepoint per Dataset.Merge mit den Deltas dieses Abschnittes verschmelzen. Zum Schluss führst du Update über die Gesamtmegne der Deltas aus.

Klingt aber IMHO ziemlich bescheuert, ich kenne ich nicht mit DataSets aus. ;)
Danke, ich glaube, das ist das passende Vorgehen für mich. Ich vermute, genau für solche Situationen ist GetChanges() vorgesehen.

Aber wenn Du nicht mit DataSets arbeitest: machst Du alles mit DataReader, oder wie regelst Du die Anbindung an die Benutzeroberfläche?

Grüße 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
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#4

Re: DataAdapter.Update + RejectChanges: Verständnisproblem

  Alt 17. Okt 2006, 15:17
Zitat von Jürgen Thomas:
Aber wenn Du nicht mit DataSets arbeitest: machst Du alles mit DataReader,
Ich frage Daten mit Readern ab, richtig. Aber nicht direkt. Dafür benutze ich einen kleinen ORM.
Zitat:
oder wie regelst Du die Anbindung an die Benutzeroberfläche?
Databinding hat in .Net rein gar nix mit DataSets zu tun. Auch wenn die vorhandenen IDEs zu blöd sind um Objektbindungen besser zu unterstützen.
DataSets müssen ganz schön Achten laufen um ihren Inhalt an die UI weiterzureichen oder wenn du im Code darauf zu greifst.
Ich mache das lieber mit konkreten Klassen.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  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 04:30 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