Nur bei Änderung speichern (Acc2K)

Hai, Profis,

ich hab mal wieder 'ne alberne Frage (und den Verdacht, daß ich mich in 'ner dusseligen Sackgasse festgefressen habe…)
Also: ein Formular mit lauter Daten und einer Schaltfläche namens Speichern, die (oh - Wunder!) geänderte Daten speichern soll. Nun kenn ich meine Pappeimer inzwischen und möchte daher dafür sorgen, daß die Schaltfläche nur dann speichert, wenn tatsächlich was geändert wurde (auch, wenn die Hirschen drauf-klicken, obwohl sie sich nur was angesehen haben). Nun gibt es ja die schöne Eigenschaft Dirty, also wollte ich die entsprechende Sub der Schaltfläche eben mit
If Me.Dirty Then
MsgBox „Schmutzig“
Else
MsgBox „Sauber“
End If
(abgetippt aus dem Hilfe-Beispiel) ausstatten (anstelle der MsgBox dann natürlich die Speicher-Anweisung, bzw. nix) - nur die blöde Kröte (also Access) antwortet mir „Sie haben einen Ausdruck eingegeben, der einen unzulässigen Verweis auf die Eigenschaft Dirty enthält“.
In der Hilfe hab ich nur einen Hinweis gefunden nach dem die Dirty-Eigenschaft nur bei gebundenen Formularen Anwendung findet - funktioniert aber trotzdem nicht :frowning:

Ich hab die Schaltfläche auch schon deaktiviert und unsichtbar gemacht und an die Eigenschaft BeiÄnderung der einzelnen Felder das aktiviert/sichbar der Schaltfläche gebunden - das Ergebnis ist aber unbefriedigend, weil a) sowieso schon mehrere Schaltflächen auftauchen/verschwinden (was das Ganze ziemlich unübersichtlich macht) und b) soviele einzelne Felder vorhanden sind, daß das Modul sich so ganz schön aufbläst…
Verrät mir jemand, wo ich den Denkfehler eingebaut habe, bzw. wie ich die Schaltfläche dazu kriege, nur bei geänderten Daten zu speichern?

rhytmisch-den-Kopf-an-die-Wand-schlagenden Gruß
Sibylle

Stelle die Eigenschaft der ‚speichern‘-Schaltfläche unter ‚Format‘ ‚Sichtbar‘ einfach auf ‚Nein‘.
Unter ‚Ereignis‘ der Schaltfläche gibt es den Punkt ‚Bei Änderung‘. Sollte sich in diesem Feld etwas ändern, setzt Du folgende Ereignisprozedur an dieser Stelle:

Me.(Schaltflächenname).visible=TRUE

Wenn darauf geklickt wurde (‚Beim Klicken‘) und der DS gespeichert ist, stellst Du gleichermaßen die Eigenschaft wieder auf FALSE.

Hai, Christopher,

genau das hatte ich schon gemacht, hat aber zwei Nachteile: a) der Code wird aufgebläht, weil ich viele Felder habe und jedes die Funktion an beiÄnderung gebunden bekommen müsste und b) sowieso schon verschiedenste Schaltflächen „auftauchen“
Äääähh - ich glaub, das habe ich schon geschrieben…

Ich würde das eben gerne „zentral“ lösen und die Dirty-Eigenschaft auch verwenden, um den User darauf hinzuweisen, daß er noch nicht gespeichert hat, wenn er nach einer Änderung das Formular verlassen will, ohne vorher zu speichern…

Gruß
Sibylle

Wenn du das Problem noch hast - schau mal hier: http://www.donkarl.com/FAQ/FAQ4Formulare.htm#4.32 (FAQ 4.32)

Gruß aus dem Norden
Reinhard Kraasch (http://www.kraasch.de - Access Tipps & Tricks)

Hai, Reinhard,

Wenn du das Problem noch hast - schau mal hier:
http://www.donkarl.com/FAQ/FAQ4Formulare.htm#4.32 (FAQ 4.32)

Ich hab das ausprobiert, was da steht - und hab das Problem immernoch…
Es scheint so zu sein, daß die ganze Dirty-Funktion nur geht, wenn das Formular direkt auf einer Tabelle/Abfrage basiert, nicht, wenn es mit Code aus einer mysql-Tabellen gefüllt wird und auch per Code die Änderungen übergeben werden…
Ich werd’ mir da wohl was anderes ausdenken müssen…

Danke
Gruß
Sibylle

Ja, klar - „Dirty“ gibt nur bei gebundenen Formularen Sinn…
Ansonsten musst du halt in den jeweiligen Before-/After-Update-Feldereignissen merken, dass eine Änderung stattgefunden hat - oder vor der Speicherung den Datensatz mit den alten Daten vergleichen (also irgendwo den alten Zustand mitführen).

Gruß aus dem Norden
Reinhard Kraasch (http://www.kraasch.de - Access Tipps & Tricks)

1 Like

Hai, Reinhard,

Ja, klar - „Dirty“ gibt nur bei gebundenen Formularen Sinn…

Gelesen hatte ich das auch - nur daß ich die Eigenschaft gebunden (Formular behält den Focus…) damit verbunden hatte…
*man reiche mir die Eselsmütze*

Ansonsten musst du halt in den jeweiligen
Before-/After-Update-Feldereignissen merken, dass eine
Änderung stattgefunden hat - oder vor der Speicherung den
Datensatz mit den alten Daten vergleichen (also irgendwo den
alten Zustand mitführen).

Ja *grummel*
Danke
Gruß
Sibylle