Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Speichern eines Datensatzes ausschließlich über Button zulassen

2,147 views
Skip to first unread message

Thomas Mauritz

unread,
Sep 15, 2009, 4:01:03 AM9/15/09
to
Hallo Kollegoinnen und Kollegen,

für einen Kunden habe ich in einer Access-2001-DB folgende Anforderung
erhalten:

Die Speicherung der Datensätze soll ausschließlich bei einem Klick auf einen
Speichern-Button geschehen.

Also weder beim Schließen des Fensters, noch bei einem Datensatzwechsel.

Aufbau:
Einige Formulare sind single, einige Formulare sinf Ufos. Diese Anforderung
gilt für beide Variationen.

Grund: Die User sind leider nicht daran gewöhnt mit Access zu arbeiten,
sondern arbeiten fast ausschließlich mit Excel.

Wie ist das zu realisieren?

Gruß
Thomas

Mark Doerbandt

unread,
Sep 15, 2009, 4:07:36 AM9/15/09
to
Hallo, Thomas,

Thomas Mauritz:

> f�r einen Kunden habe ich in einer Access-2001-DB folgende Anforderung
> erhalten:

2001?

> Die Speicherung der Datens�tze soll ausschlie�lich bei einem Klick auf einen
> Speichern-Button geschehen.

Du musst das Before-Update-Ereignis nutzen und erst mal grunds�tzlich
Cancel auf True setzen, ausser nat�rlich bei Deinem Button. Evtl
kannst Du auch bei Vorliegen von �nderungen explizit r�ckfragen, ob
diese gespeichert werden sollen (If Me.Dirty Then ...).

Dann kannst Du im OnClick zu dem Button speichern mit

Me.Dirty = False

- ggf. auch nach vorheriger R�ckfrage.

Gruss - Mark

--
Informationen fuer Neulinge in den Access-Newsgroups unter
http://www.doerbandt.de/Access/Newbie.htm

12. AEK - 10./11.10. 31.10/1.11.2009, N�rnberg
http://www.donkarl.com/AEK

Thomas Mauritz

unread,
Sep 15, 2009, 9:51:01 AM9/15/09
to
Hallo Mark,

danke für die Info.

Ich meinte natürlich Access 2002 (XP).

Meinst Du bei dem Formular-Ereignis "Before-Update" eingeben:

Private Sub Form_BeforeUpdate(Cancel As Integer)
Cancel = True
End Sup


und bei dem Button-Click-Ereignis:
Cancel = False
Do.Cmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70


Ist das so richtig?

Gruß
Thomas

Mark Doerbandt

unread,
Sep 15, 2009, 9:58:13 AM9/15/09
to
Hallo, Thomas,

Thomas Mauritz:

> Meinst Du bei dem Formular-Ereignis "Before-Update" eingeben:
>
> Private Sub Form_BeforeUpdate(Cancel As Integer)
> Cancel = True
> End Sup

ja

> und bei dem Button-Click-Ereignis:
> Cancel = False
> Do.Cmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70

nein, da hast Du ja kein Cancel.
Und ich w�rde eher Me.Dirty = False schreiben.

Ich habe es jetzt nicht probiert, aber es kann nat�rlich beim
Klick-Speichern auch wieder BeforeUpdate ausgel�st werden, dass dann
von der anderen Codezeile geCancelled w�rde daher dann ggf.

(ungetestet)
Private Saving As Boolean = False

Private Sub Form_BeforeUpdate(Cancel As Integer)

If Not Saving Then Cancel = True
End Sup

[in OnClick]
Saving = True
Me.Dirty = False
Saving = False

Ekkehard Böhme

unread,
Sep 15, 2009, 4:02:12 PM9/15/09
to
Hallo Mark,

Mark Doerbandt schrieb:


> Hallo, Thomas,
>
> Thomas Mauritz:
>
>> Meinst Du bei dem Formular-Ereignis "Before-Update" eingeben:
>>
>> Private Sub Form_BeforeUpdate(Cancel As Integer)
>> Cancel = True
>> End Sup
>
> ja
>
>> und bei dem Button-Click-Ereignis:
>> Cancel = False
>> Do.Cmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
>
> nein, da hast Du ja kein Cancel.
> Und ich w�rde eher Me.Dirty = False schreiben.
>
> Ich habe es jetzt nicht probiert, aber es kann nat�rlich beim
> Klick-Speichern auch wieder BeforeUpdate ausgel�st werden, dass dann
> von der anderen Codezeile geCancelled w�rde daher dann ggf.
>
> (ungetestet)
> Private Saving As Boolean = False
>
> Private Sub Form_BeforeUpdate(Cancel As Integer)
> If Not Saving Then Cancel = True
> End Sup

Kann man hier nicht einfach auf Screen.ActiveControl pr�fen?

>
> [in OnClick]
> Saving = True
> Me.Dirty = False
> Saving = False
>
> Gruss - Mark
>

gruss ekkehard

Thomas Mauritz

unread,
Sep 16, 2009, 3:10:07 AM9/16/09
to
Hallo Mark,

zwei Frage hätte ich noch:
1. Wenn ich im Formular (welches es UFo ist), wie beschrieben bei
'Form_BeforeUpdate': Cancel = True eintrage, dann kommt eine Meldung die
besagt, das im Moment nicht gespeichert werden kann (sonngemäß).
Kann man diese Meldung irgendwie unterdrücken?

2. Wo wird "Private Saving As Boolean = False" angegeben?

So wie ich das verstehe, sprichst Du die Saving-Prozedur im OnClick-Ereignis
des Buttons an oder? Das ist mir noch nicht klar.

Kannst Du mir das bitte noch einmal erklären?

Also das Ziel sollte sein, das das Speichern ausschliesslich ünber den
Button geht und der User keinerlei Meldungen o.ä. erhält.

Gruß
Thomas

Volker Neurath

unread,
Sep 16, 2009, 3:51:05 AM9/16/09
to
Thomas Mauritz wrote:

> 2. Wo wird "Private Saving As Boolean = False" angegeben?

Im Deklarationsbereich des betreffenden Formulares.
Wenn du also den VBA-Editor ge�ffnet hast, "ganz oben"

> So wie ich das verstehe, sprichst Du die Saving-Prozedur im OnClick-Ereignis
> des Buttons an oder? Das ist mir noch nicht klar.

Das ist keine Prozedur, das ist einfach nur eine boolesche Variable.

| Private Sub Form_BeforeUpdate(Cancel As Integer)
| If Not Saving Then Cancel = True

| End Sub

Immer dann, wenn die Variable "Saving" FALSE ist, erh�lt hier der
Parameter "Cancel" den Wert "True". Folge: Das FormularEreignis
"BeforeUpdate" bricht ab, die Daten werden NICHT gespeichert.
oder anders ausgedr�ckt: nur dann wenn "Saving" True enth�lt, w�rde der
Parameter NICHT gesetzt.

Klickst du auf den Button, dann wird in dessen "onClick" Ereignis
folgendes ausgel�st:

| [in OnClick]
| Saving = True
| Me.Dirty = False
| Saving = False

"Saving" wird auf True gesetzt.

Me.Dirty = FALSE

L�st das Form_BeforeUpdate aus; da "Saving" jetzt "True" ist, werden die
Daten deines Forms auch tats�chlich gespeichert.
Im anschluss daran wird "Saving" wieder auf "False" gesetzt"

Somit ist deine Anforderung erf�llt: Das Navigieren zu einem anderen
Datensatz l�st zwar auch _BeforeUpdate aus.
In diesem Fall ist "Saving" aber "FALSE", BeforeUpdate wird abgebrochen,
die Daten nicht gespeichert.
Dasselbe passiert beim einfachen Schliessen des forms.

Volker

PS: wenn ich was flasch oder ungenau erkl�rt habe bite ich die Exerten
um Korrektur ;-)


--
Wenn es vom Himmel Zitronen regnet -- lerne, Limonade zu machen.

Thomas Mauritz

unread,
Sep 16, 2009, 4:15:01 AM9/16/09
to
Hallo Volker,

danke für die Erklärung. Das habe ich verstanden.

Nur wenn ich das im Deklarationsbereich des UFos eingebe, erscheint eine
Meldung, das ein Anweisungsende erwartet wird.

Die Hilfe redet über fehlende Klammern.

Wenn ich eingebe: 'Private Savin As Booelan', dann ist kein Fehler. Gebe ich
aber "= False" dahinter ein, dann erscheint die Meldung: 'Erwartet:
Anweisungsende'

Hast Du da noch einen Tipp?

Übrigens, nicht schlecht der Spruch mit mit den Zitronen.

Da kenn ich auch einen:

Warum die Zitronen sauer wurden
Ich muß das wirklich mal betonen:
Ganz früher waren die Zitronen
(ich weiß nur nicht genau mehr, wann dies
gewesen ist) so süß wie Kandis.

Bis sie einst sprachen: "Wir Zitronen,
wir wollen groß sein wie Melonen!
Auch finden wir das Gelb abscheulich,
wir wollen rot sein oder bläulich!"

Gott hörte oben die Beschwerden
und sagte: "Daraus kann nichts werden!
Ihr müßt so bleiben! Ich bedauer!"
Da wurden die Zitronen sauer . . .

Heinz Erhardt

Gruß
Thomas

Volker Neurath

unread,
Sep 16, 2009, 4:48:58 AM9/16/09
to
Thomas Mauritz wrote:

> Hallo Volker,

> danke f�r die Erkl�rung. Das habe ich verstanden.

> Nur wenn ich das im Deklarationsbereich des UFos eingebe, erscheint eine
> Meldung, das ein Anweisungsende erwartet wird.

> Die Hilfe redet �ber fehlende Klammern.

> Wenn ich eingebe: 'Private Savin As Booelan', dann ist kein Fehler. Gebe ich
> aber "= False" dahinter ein, dann erscheint die Meldung: 'Erwartet:
> Anweisungsende'

In den Deklarationsbereich geh�rt auch nur

Private Saving As Booelan

damit wird die Variable "Saving" als boolesche Variable angelegt, die im
gesamten Formularmodul - und nur da - verf�gbar ist.

> �brigens, nicht schlecht der Spruch mit mit den Zitronen.

;-))

Ich steh auf Sinnspr�che.

Volker

Thomas Mauritz

unread,
Sep 16, 2009, 5:43:01 AM9/16/09
to
Hi Volker,

danke für den Hinweis.

Wenn ich aber im UFo eine Änderung egal in welchem Feld auch immer, auf den
Button "Speichern" klicke ercheint die Meldung: "Die von Ihnen eingegebene
Einstellung ist für diese Eigenschaft nicht zulässig".

Folgender Code steht bei dem Button:


Saving = True
Me.Dirty = False
Saving = False

(also genau das was wir wollten).

Was kann das jetzt sein?

Und hast Du noch eine Idee ob man die Meldung wenn ich das Form nach
Änderung schliessen möchte, unterdrücken kann (wie voerher beschrieben)?

Danke
Thomas

Volker Neurath

unread,
Sep 16, 2009, 6:40:11 AM9/16/09
to
Thomas Mauritz wrote:

> Hi Volker,

> danke f�r den Hinweis.

> Wenn ich aber im UFo eine �nderung egal in welchem Feld auch immer, auf den

> Button "Speichern" klicke ercheint die Meldung: "Die von Ihnen eingegebene

> Einstellung ist f�r diese Eigenschaft nicht zul�ssig".

Frage 1: wird der Code abgebrochen? Wenn ja:
Frage 2: welche Codezeile wird gelb markiert?

> Was kann das jetzt sein?

Gute Frage.

> Und hast Du noch eine Idee ob man die Meldung wenn ich das Form nach

> �nderung schliessen m�chte, unterdr�cken kann (wie voerher beschrieben)?

keine idee.

Thomas Mauritz

unread,
Sep 16, 2009, 8:40:02 AM9/16/09
to
Hi Volker,

nach einam Klick auf den Butto erscheint ein Laufzeitfehler '2101'.

Bei Klick auf 'Debuggen' ist die Zeile 'Me.Dirty = False' gelb unterlegt.

Gruß
Thomas

Irmgard Schwenteck

unread,
Sep 16, 2009, 8:56:08 AM9/16/09
to
Volker Neurath schrieb:
> Thomas Mauritz wrote:

>> Und hast Du noch eine Idee ob man die Meldung wenn ich das Form nach
>> �nderung schliessen m�chte, unterdr�cken kann (wie voerher beschrieben)?
>
> keine idee.

Ich finde, es geht of leichter mit einem ungebundenen Formular.
Erst wenn der Benutzer auf Speichern klickt, wird dann der Datensatz
eingef�gt, sonst passiert eben nix.

Dann gibts auch keine Probleme, weil man noch abfangen mu�, da� der
Bentzer am Mausrad gedreht hat, oder mit Bild Auf zur�ckgebl�ttert und
dabei gespeichert hat bzw. eine Fehlermeldung bekommen hat.

Die ganzen Kontrollen, ob numerisch oder Datum mu� man dann allerdings
selber machen, man hat aber auch den Vorteil, gleich alle sonstigen
�berpr�fungen der Eingaben vornehmen zu k�nnen.

Gru�
Irmgard

Mark Doerbandt

unread,
Sep 28, 2009, 5:59:04 AM9/28/09
to
Hallo, Ekkehard,

Ekkehard B�hme:

> Kann man hier nicht einfach auf Screen.ActiveControl pr�fen?

sicher, gute Idee!

Gruss - Mark

Mark Doerbandt

unread,
Sep 28, 2009, 6:09:56 AM9/28/09
to
Hallo, Irmgard,

Irmgard Schwenteck:

> Ich finde, es geht of leichter mit einem ungebundenen Formular.

ja, das schon. Aber grunds�tzlich hat man, wenn man mit ungebundenen
Formularen arbeitet, in meinen Augen eine Menge Mehrarbeit, weil man
auf die eigentlichen Features von Access verzichtet und diese dann
selber bauen muss.

Gruss - Mark

Mark Doerbandt

unread,
Sep 28, 2009, 6:15:18 AM9/28/09
to
Hallo, Thomas,

Thomas Mauritz:

> nach einam Klick auf den Butto erscheint ein Laufzeitfehler '2101'.

"Die Einstellung ist f�r diese Eigenschaft nicht g�ltig"?

> Bei Klick auf 'Debuggen' ist die Zeile 'Me.Dirty = False' gelb unterlegt.

bist Du hier inzwischen weiter gekommen?

Wenn die Meldung hier kommt, kann gerade nicht gespeichert werden.
Bist Du vielleicht mit dem Code in "BeforeUpdate" gelandet?

Gruss - Mark

0 new messages