![]() |
Datenbank: FB • Version: 21 • Zugriff über: FIBPlus
Dataset auf Unmodified setzen?
Hallo,
ich habe ein Formular in welchem der Nutzer Eingaben machen kann. Legt der Nutzer einen neuen Datensatz an, so belegt das Programm einige Datenfelder defaultmäßig mit Werten (bspw. wird STAAT auf DE gesetzt). Wenn der Nutzer nun direkt nach dem Anlegen-Click auf Abbrechen drückt hat ER ja de facto noch nichts am Datensatz geändert, trotzdem wird ihm mein Programm die Sicherheitsfrage "Ungespeicherte Daten... wirklich abbrechen?" stellen, da der Datensatz ja MODIFIED ist. Gibt es eine Möglichkeit nach Belegen der Defaultfelder den Status wieder auf Unmodified zu setzen? |
Re: Dataset auf Unmodified setzen?
Rollback
|
Re: Dataset auf Unmodified setzen?
Rollback setzt ja alle Änderungen zurück... eigentlich möchte ich das folgende Verhalten nachbilden:
1) Nutzer klickt auf Einfügen (Dataset.Insert --> Modified ist false) 2) Programm fügt Defaultdaten ein (Modified ist true, wegen Einfügen der Daten) 3a) Nutzer fügt Daten ein und bricht ab --> Sicherheitsfrage 3b) Nutzer fügt keine Daten ein und bricht ab --> leider auch Sicherheitsfrage wegen (2) Es wäre also wünschenswert, dass der Zustand modified nach Einfügen der Defaultdaten auf false gesetzt wird, so dass dem Nutzer im Zustand 3b die Sicherheitsfrage NICHT gestellt wird. |
Re: Dataset auf Unmodified setzen?
Entweder kein Insert machen oder davor eine SavePoint erzeugen, welchen du dann zurückfahren kannst.
|
Re: Dataset auf Unmodified setzen?
Glaube, du bist schon einen Schritt zu weit...
Wenn der Nutzer auf abbrechen klickt, wird folgende Unterscheidung getroffen: if Nutzer_Has_Made_Changes then SicherheitsfrageStellen(Wirklich abbrechen?) else AbbrechenOhneSicherheitsfrage; Durch das Einfügen der Defaultwerte seitens des Programm wird dem Dataset aber immer suggeriert, der Nutzer hätte Änderungen gemacht. Ein alternative Weg um mein Problem zu lösen wäre, alle Komponenten mit OnClick / OnKeyPress-Events auszustatten und dann ein Flag zu setzen, dass Änderungen stattgefunden haben. Ist mir aber zu umständlich, daher der Weg über Dataset.Modified, welche im oben genannten Beispiel eben nicht ganz funktioniert. |
Re: Dataset auf Unmodified setzen?
Mache das "modified" doch selber. Das muss sowieso bei nicht DB-Edits etc. auch gemacht werden. Also Form-globale Variable deklarieren, z.B. AltFeldWert. Dieses im OnEnter merken und im OnExit den dann aktuellen Feldwert mit AltFeldWert Vergleichen. Ist er gleich, dann ist nichts modified ansonsten eben doch. Bei längeren Eingaben, wie bereits gesagt : immer SavePoints setzen. Werden auf einen Schlag 500 Eingaben gemacht, dann ist jeder Benutzer froh, wenn er nur Teile der Eingaben verwerfen muss und nicht alles !!
|
Re: Dataset auf Unmodified setzen?
Hallo nachti1505,
wenn du mit FIBDataSet1.Insert einen Datensatz hinzufügst, so existiert dieser Datensatz erstmal nur im lokalen Puffer und wird nicht an Datenbankserver weitergereicht. Erst mit einen FIBDataSet1.Post wird, vorausgesetzt FIBDataSet1.CancelUpdates=false, die FIBDataSet1.UpdateTransaction gestartet, FIBDataSet1.InsertSQL ausgeführt und damit das ganze an den Datenbankserver weitergereicht. Wenn du aber statt dem Post ein FIBDataSet1.Cancel ausführst, wird der neue Datensatz im lokaten Puffer verworfen und der Datenbankserver bekommt davon überhaupt nichts mit. FIBDataSet ist übrigens vom TDataSet abgeleitet und verhält sich dementsprechend. alex |
Re: Dataset auf Unmodified setzen?
Zitat:
Delphi-Quellcode:
if Dataset.Modified and not Dataset.FieldByName('WichtigesFeld').IsNull then
begin MessageBox('Ungespeicherte Daten...blabla...', ...) end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:31 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