Hallo,
ich benutze ein Formular mit Unterdatenblatt in einer Datenbank. Der Zugriff zu diesem Formular erfolgt über einen Button (Kennwortabfrage über InpuBox). Ich vermute durch unsauberes Beenden (Kreuz rechts oben) hat es das Formular zerschossen:
- es war nicht mehr möglich im Unterdatenblatt Daten einzutragen (Datenfelder wurden nicht mehr angezeigt)
(sh. Anhang Unterdatenblatt)
- man konnte das Formular nicht mehr öffnen über den Button. Meldung: OpenForm abgebrochen...
Ein Versuch über Datenbank komprimieren und reparieren blieb erfolglos.
Habe den Fehler der gesperrten Datenfelder dann unter den Eigenschaften des Formulares entdeckt
(sh. Anlage Formular_fehlerhaft).
Das Problem mit dem OpenForm Abbruch habe ich (sh. donkarl 1.27) sehr einfach durch Auskommentieren der VBA-Zeilen - Formular öffnen über den Button und schließlich durch Entfernen der Kommentare gelöst.
Meine Frage:
Wie kann man das "unsaubere" Beenden verhindern? Das Kreuz rechts oben verleitet halt zum schnellen Schließen. Gibt es da Möglichkeiten dies zu verhindern?
Gruß
Herbert
Hallo,
ich glaube nicht, dass das Formular durch das Schließen "zerschossen" wurde.
Es ist eher zu vermuten, dass irgendwo Code ausgeführt wird, der die gekennzeichneten Eigenschaften setzt und bei Schließen dieser Zustand gespeichert wird. Normalerweise wird in solchen Situationen von Access nachgefragt, ob (das Formular) gespeichert werden soll oder nicht.
Oder das Speichern der Form-Änderungen mit
Docmd.Close acform, Me.Name, acSaveyes
definitiv erlaubt ist.
Hallo Herbert,
ZitatWie kann man das "unsaubere" Beenden verhindern?
In der Ereignisprozedur "Form_BeforeUpdate" oder "Form_Close"
ZitatDas Kreuz rechts oben verleitet halt zum schnellen Schließen. Gibt es da Möglichkeiten dies zu verhindern?
Ja, ausblenden mit "Schließen Schaltfläche = Nein" (Eigenschaften des Formulars)
gruss ekkehard
Hallo vielen Dank für eure Hilfe!
Könnte das so aussehen:?
Private Sub Form_BeforeUpdate(Cancel As Integer)
If Me.Dirty Then
If MsgBox("Änderungen speichern?", vbYesNo, "Speichern?") = vbNo Then
Me.Undo
End If
End If
End Sub
Gruß
Herbert
Hallo,
damit hinterfragst Du lediglich, ob geänderte Daten in die Tabelle abgelegt (einige Me.Undo wären vorteilhaft) aber nicht, ob Formeigenschaften gespeichert werden sollen .
Hallo Franz,
im VBA Code der im Hintergrund des Formulares agiert werden tatsächlich Steuerelemente abgeschaltet
(AllowAdditions, AllowDeletions, AllowEdits auf false) um zu verhindern, dass nach der Eingabe eines Datensatzes fehlerhafte/unbeabsichtigte Eingaben erfolgen. Um daraufhin wieder Datensätze zu bearbeiten habe ich einen Button "Dateneingabe" angelegt der die Eigenschaften wieder auf true setzt.
Wobei ich den Button in der Endfassung ganz verschwinden lassen will und die Dateneingabe via Makro über einen Shortcut ausführen lassen wollte. Zur Erklärung: Die PC's befinden sich in einem öffentlichen Raum und der Mitarbeiter ist nicht immer am Arbeitsplatz!
Meine Frage: Wie kann ich das abfangen so, dass auch bei "unsauberem Beenden" nichts fehlerhaftes passiert?
Gruß
Herbert
Hallo,
vielleicht wäre das eine Lösung (sh. Anhang). Beim Entladen des Formulares kann man das unbeabsichtigte Schließen verhindern. Über eine CheckBox (Standardwert = false) die abgefragt wird und auf true stehen muss.
D.h. man muss zuerst die CheckBox aktivieren und kann dann erst aussteigen. In der MessageBox dann der Hinweis, dass nur mit "Schließen Button" beendet werden darf.
Theoretisch könnte man die CheckBox auch ausblenden und die Aktivierung im"Schließen Button" unterbringen.
Gruß
Herbert
Und was ist damit?
Zitatausblenden mit "Schließen Schaltfläche = Nein" (Eigenschaften des Formulars)
Wenn das Kreuz nicht sichtbar ist, kann auch keiner draufklicken und deine
Checkbox samt Code ist überflüssig.
Hallo,
anbei eine Beispieldb. Die DB kann nur über einen Button beendet werden. Es geht noch nicht mal das normale Beenden der DB.
Hallo Ekkehard,
das mit dem Kreuz geht so leider nicht! Das habe ich ausprobiert: Ich muss leider auf Access 2003 zurückgreifen (Server). Dort kann man mit der Eigenschaft des Formulares "Schließen Schaltfläche = Nein" nur das kleine Kreuz wegkriegen (sh. Anhang) - das große (rote) bleibt. Ist im neuen Access nicht mehr so!
Hallo Klaus,
das muss ich ausprobieren - klingt interessant!
Vielen Dank für Eure Hilfe!
Gruß
Herbert
Hat wohl die Anlage nicht gespeichert- daher hier noch mal!
Hallo,
mit dem großen Kreuz wird Access geschlossen. Das gibt es beides auch noch bei Access2016. Siehe Bild (A2016).
Bei meinem obigen Beispiel funktioniert auch das große Kreuz zum Beenden von Access nicht.
Hallo Klaus, ja du hast Recht. Ansicht hängt wohl vom Access ab. Ich habe Access 2013. Bei mir erscheint das Ganze mit grauem Hintergrund (sh. Anhang Kreuz_Schließenschaltfläche_Nein). Wenn ich Schließenschlatfläche = Nein aktiviere wird nur das untere Kreuz deaktiviert.
Gruß
Herbert
Hallo,
wenn Du die Eigenschaft "Mit Systemmenüfeld" ebenfalls auf Nein stellt ist alles weg (im Formular).
Hallo Klaus,
leider nein! Unverändert: Nur ein Kreuz ist deaktiviert!
Gruß
Herbert
Hallo, zumindest habe ich jetzt herausgefunden was sich im Formular "zerschießt":
Das Ganze passiert nicht nur beim "unsauberen Beenden" sondern auch wenn ich in die Entwurfsansicht gehe und Veränderungen vornehme. Die Eigenschaft: "Daten - Anfügen zulassen" wird dann im Hauptformular und Unterformular auf "Nein" gestellt. Was merkwürdig ist: Es gibt keine Meldung von Access z.B. "sollen die Änderungen im Formular gespeichert werden etc.". Ich denke, ich muss die Formulareigenschaften im Hintergrund "allow editions" etc. komplett entfernen.
Gruß
Herbert
Schau mal in die FAQ 1.12 (http://www.donkarl.com/FAQ/FAQ1Grundlagen.htm#1.12).
Hallo Lachtaube,
habe ich mit meiner Variante eleganter hingekriegt:
unsichtbare CheckBox mit Standardwert = False
Buttons zum regulären Beenden bzw. Formularwechsel mit VBA Code:
Me.CheckBox = True
Abfrage beim Entladen des Formulares:
If Me!ChkBox = False Then Cancel = True
Klappt einwandfrei! Aber (sh. weiter unten)
Das Problem bei Donkarl: Da legt sich gerne mal das unsichtbare Formular beim Start drüber!
Mein Problem und das von Donkarl bei der Geschichte:
Man kommt da nie wieder in die Entwurfsansicht - ist ja auch ein Verlassen des Formulares.
Kann man das irgendwie auch abfangen???
Gruß
Herbert
D.h. nur noch über den Navigationsbereich ist es möglich in die Entwurfsansicht zu kommen. Die ist bei mir ausgeblendet und wird nur über ein Passwort eingeblendet. Vielleicht gar keine so schlechte Option!
Gruß
Herbert
Hallo,
ZitatMan kommt da nie wieder in die Entwurfsansicht -
wieso nicht ?
Formular schließen und im Entwurf öffnen.
Hast Du Dir eigentlich mein Beispiel mal angesehen ?
Das bietet ja noch viel mehr Möglichkeiten.
Es werden z.B. Felder geprüft und es kann entschieden werden ob gespeichert werden soll oder nicht.
Hallo Klaus,
das ist eine interessante Variante die Überprüfung mit einer Funktion und einer Bol-Variablen. Bei meiner DB werden die Felder auch auf Eingaben überprüft, aber nicht so elegant über eine Funktion wie bei dir (umständliche Auflistung von sich wiederholenden If-Abfragen bei mir).
Ich werde dein Beispiel auf jeden Fall noch mal genau durchstudieren! Vielen Dank für deine Hilfe!
Grüße
Herbert