AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Dataset auf Unmodified setzen?
Thema durchsuchen
Ansicht
Themen-Optionen

Dataset auf Unmodified setzen?

Ein Thema von nachti1505 · begonnen am 28. Okt 2008 · letzter Beitrag vom 29. Okt 2008
Antwort Antwort
Benutzerbild von nachti1505
nachti1505

Registriert seit: 7. Apr 2007
188 Beiträge
 
Delphi 7 Enterprise
 
#1

Dataset auf Unmodified setzen?

  Alt 28. Okt 2008, 16:43
Datenbank: FB • Version: 21 • Zugriff über: FIBPlus
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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Dataset auf Unmodified setzen?

  Alt 28. Okt 2008, 18:12
Rollback
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von nachti1505
nachti1505

Registriert seit: 7. Apr 2007
188 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Dataset auf Unmodified setzen?

  Alt 29. Okt 2008, 11:03
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Dataset auf Unmodified setzen?

  Alt 29. Okt 2008, 11:05
Entweder kein Insert machen oder davor eine SavePoint erzeugen, welchen du dann zurückfahren kannst.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von nachti1505
nachti1505

Registriert seit: 7. Apr 2007
188 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Dataset auf Unmodified setzen?

  Alt 29. Okt 2008, 11:11
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.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#6

Re: Dataset auf Unmodified setzen?

  Alt 29. Okt 2008, 12:44
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 !!
Gruß
Hansa
  Mit Zitat antworten Zitat
alex517

Registriert seit: 23. Nov 2004
Ort: Bernau b. Berlin
273 Beiträge
 
Delphi XE5 Enterprise
 
#7

Re: Dataset auf Unmodified setzen?

  Alt 29. Okt 2008, 13:37
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
Alexander
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

Re: Dataset auf Unmodified setzen?

  Alt 29. Okt 2008, 17:25
Zitat von nachti1505:
... trotzdem wird ihm mein Programm die Sicherheitsfrage "Ungespeicherte Daten... wirklich abbrechen?" stellen, da der Datensatz ja MODIFIED ist.
Prüfe einfach ein zusätzliches Feld, dass der Benutzer befüllen muss, damit der Datensatz vollständig ist.
Delphi-Quellcode:
if Dataset.Modified and not Dataset.FieldByName('WichtigesFeld').IsNull then
begin
   MessageBox('Ungespeicherte Daten...blabla...', ...)
end;
Andreas
  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 20:11 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