Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Speichern bei Fokusverlust verhindern

Begonnen von zoulhh, Februar 03, 2017, 12:06:20

⏪ vorheriges - nächstes ⏩

zoulhh

Moin,

ich habe ein Formular mit Unterformular. Wenn ich ins Unterformular wechsel, wird der Inhalt vom Hauptformular automatisch gespeichert.

Wie kann ich das verhindern?

Vielen Dank.

LGM

MzKlMu

Hallo,
das kannst Du gar nicht verhindern. Sobald Du aus dem Hafo rausgehst wird gespeichert. Du kannst nur das Verlassen des Hafos verhindern.
Aber es ist nicht möglich einen begonnene DS mal zwischenzeitlich ohne Speichern zu verlassen.

Erkläre das Vorhaben mal genauer.
Gruß Klaus

zoulhh

Zitat von: MzKlMu am Februar 03, 2017, 12:21:59
Hallo,
das kannst Du gar nicht verhindern. Sobald Du aus dem Hafo rausgehst wird gespeichert. Du kannst nur das Verlassen des Hafos verhindern.
Aber es ist nicht möglich einen begonnene DS mal zwischenzeitlich ohne Speichern zu verlassen.

Erkläre das Vorhaben mal genauer.

Komischerweise verliert der den Fokus gar nicht oder reagiert nicht darauf. Denn: Wenn ich im Hauptformular "Ereignis: Bei Fokusverlust" einstelle, und da eine msgbox aufrufe, passiert gar nichts.

Ok, hier das Problem im Detail:

Ich habe ein Formular mit Pflichtfeldern. Ob diese ausgefüllt sind, prüfe ich mittels VBA. Sind sie nicht ausgefüllt, kann man nicht speichern. (Ich habe einen eigenen Speichern-Button und alles access-interne abgeschaltet).

In einem Unterformular, stehen als Datenblatt alle bisherigen Datensätze. Klickt man einen an, wird er ins Hauptformular übernommen.

Nun das Szenario: Der Benutzer gibt im Hauptformular ein paar Daten ein (füllt aber nicht alle Pflichtfelder aus). Nun entscheidet er sich, in das Unterformular auf einen Datensatz zu klicken. Dieser wird logischerweise ins Hauptformular übernommen. Der (unvollständige) Datensatz im Hauptformular aber, wird ohne Prüfung gespeichert. Und genau das ist mein Problem.

Ich hoffe, ich habe es vernünftig erklärt. Danke für Deine Antwort.

LGM

MzKlMu

Hallo,
in welchem Ereignis das Hafos prüfst Du die Pflichtfelder und wie ?
Gruß Klaus

PhilS

Zitat von: zoulhh am Februar 03, 2017, 13:05:44Der (unvollständige) Datensatz im Hauptformular aber, wird ohne Prüfung gespeichert. Und genau das ist mein Problem.
Dann musst du das BeforeUpdate-Ereignis (Vor Aktualisierung) des Hauptformulars behandeln und darin deine Datenvalidierung ausführen. Wenn die Eingabe nicht gültig ist, setzt du das Cancel-Argument auf True.

Das automatische Speichern komplett zu verhindern, ist nur möglich wenn man mit ungebunden Formularen arbeitet (schwierig in einem HF/UF-Konstrukt) oder wenn man die Formulare an Temporärtabellen bindet und per Code die Daten dann von der Temp-Tabelle in die echte Datentabelle kopiert. - Alles recht aufwendig...
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

zoulhh

Zitat von: PhilS am Februar 03, 2017, 13:33:25
Zitat von: zoulhh am Februar 03, 2017, 13:05:44Der (unvollständige) Datensatz im Hauptformular aber, wird ohne Prüfung gespeichert. Und genau das ist mein Problem.
Dann musst du das BeforeUpdate-Ereignis (Vor Aktualisierung) des Hauptformulars behandeln und darin deine Datenvalidierung ausführen. Wenn die Eingabe nicht gültig ist, setzt du das Cancel-Argument auf True.


Ich glaube, das rettet mich. Ich prüf das mal und melde mich ggf. oder löse diesen Thread.

Vielen Dank!

LGM

zoulhh


Habe nun einiges probiert und festgestellt, dass mein Problem wohl darin liegt, dass zwischen dem Hauptformular und dem Unterformular eine Beziehung besteht (und das Hauptformular deswegen gespeichert wird wenn das Unterformular fokussiert wird), die ich aber gar nicht brauche.

Daher meine Frage: Gibt es die Möglichkeit in einem Formular ein Datenblatt anzuzeigen, ohne dass dies ein Unterformular ist?

Ich weiß, ich könnte es in einem Dialogfenster anzeigen lassen, aber das möchte ich nicht.

LGM

DF6GL

Hallo,

die "Beziehung" kann gelöst/aufgehoben werden, wenn die Feldnamen in den Eigenschaften "Verknüpfen von/nach" des UFO-Steuerelementes entfernt werden.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

zoulhh


Hi Franz,

ja, aber das hilft nichts. Das Hauptformular speichert immer noch sobald ich ins Unterformular klicke. Und wenn ich im Hauptformular before_update cancel = true setze bekomme ich einen Laufzeitfehler, wenn ich dem Unterformular das hier

Me!subSearchList.LinkChildFields = ""

mit auf dem Weg geben will. Der Laufzeitfehler kommt nur, wenn das Hauptformular dirty, also geändert wurde und ich das Speichern durch Cancel = True verhindern will.

Ich werde noch wahnsinnig.

LGM


MzKlMu

#9
Hallo,
zeige bitte mal den vollständigen Code zur Prüfung der Pflichtfelder.

Und was willst Du denn mit dieser Zeile erreichen ?
Me!subSearchList.LinkChildFields = ""

Ich glaube auch, wenn LinkChildFields gesetzt wird, muss auch LinkMasterFields gesetzt werden.
Aber das hat mit der Speichern Geschichte nichts zu tun.
Gruß Klaus

zoulhh

#10
Der Code zum Prüfen der Pflichtfeldern ist nicht relevant. Er wird bei diesem automatischen Speichern nicht ausgeführt. LinkMasterFields ist gesetzt.

Es geht nur darum:

Es wird ein Unterformular (Datenblatt) mittels Buttonklick angezeigt:


Private Sub Ctl101KDBERICHT_BT_Click()
Me!subSearchList.Visible = True
Me!subSearchList.SourceObject = "sfrm101_KD"
Me!subSearchList.LinkChildFields = ""
Me!subSearchList.LinkMasterFields = ""
End Sub


Und just in dem Moment wird der Inhalt des Hauptformulars gespeichert. Und das will ich nicht. Sobald ich aber Cancel = true in before_update setze, gibt

Me!subSearchList.LinkChildFields = ""

einen Laufzeitfehler aus. Und das ist, was ich nicht verstehe.

Danke für Deine Antwort.

LGM

MzKlMu

Hallo,
ZitatDer Code zum Prüfen der Pflichtfeldern ist nicht relevant.
wenn Du das sagts.

Du schreibst doch aber, Du willst das Speichern des Hafo unterbinden wenn in das Ufo geklickt wird. Dann ist der entscheidende Punkt die Prüfung der Pflichtfelder.
Gruß Klaus

zoulhh

#12
Sorry, nein. Sind sie nicht. Habe es oben auch ausführlich erklärt. Die Geschichte mit Cancel = True und dem Laufzeitfehler.

LGM

MzKlMu

Hallo,
ZitatDie Geschichte mit Cancel = True und dem Laufzeitfehler
aber Cancel = True ist doch Bestandteil der Prüfung.
Aber egal, Du brauchst die Hilfe.

PS:
Bitte unterlasse das zitieren kompletter Beiträge in direkter Antwort. Es verlängert nur die Themen. Ich habe die Zitate wieder gelöscht.
Gruß Klaus

PhilS

Zitat von: zoulhh am Februar 03, 2017, 16:52:31Der Code zum Prüfen der Pflichtfeldern ist nicht relevant. Er wird bei diesem automatischen Speichern nicht ausgeführt.
Er sollte es aber sein und wenn er nicht ausgeführt wird, ist das Teil des Problems.

Die Idee ist ja, vor dem Speichern die Prüfung auszuführen und nur dann zu Speichern, wenn die Eingabe OK ist. Daher muss die Prüfung im BeforeUpdate-Ereignis ausgeführt werden. - Sonst kannst du dort ja nicht entscheiden, ob gespeichert werden darf oder nicht.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor