Hi,
es ist mir schon sehr oft aufgefallen, dass manchmal irgendwelche Formulare in der Datenbank "hängen"... damit meine ich, dass diese sich nicht öffnen lassen. Wenn man z.B. eine Schaltfläche zum öffnen eines Formulares nutzt kann man auf die Schaltfläche klicken, und nix passiert. Das Formular öffnet sich nicht - wohingegen andere Formulare problemlos laufen.
Abhilfe schafft hier nur, das Formular im Entwurfsmodus zu öffnen, dann in die Layoutansicht zu wechseln und schlussendlich auf die normale Formularansicht. Dann funktioniert es wieder problemlos.
Der Fehler tritt bei verschiedenen Office Versionen auf (probiert bei Office 15 und Office 16). Leider können in Runtime Umgebungen die Formulare ja nicht im Entwurtsmodus dargestellt werden. Hier wird die "Rettung" des Formulars dann echt umständlich.
Woran liegt es, dass die Formulare manchmal "hängen" und gibt es einen anderen Weg, diese wieder zum Laufen zu bringen?
Lg
datekk
Hallo,
eine Runtime Umgebung erfordert eine durchgängige komplette Fehlerbehandlung in absolut jeder Prozedur und Funktion. In der Fehlerbehandlung kann man zusätzlich einen Hinweis unterbringen in welcher Prozedur/Funktion der Fehler aufgetreten ist. Ist das gewährleistet ?
Ansonsten steigt Access einfach kommentarlos aus oder die Anwendung hängt.
Hi Klaus,
danke für Deine Antwort, Sie trifft aber nicht die Fragestellung. Es ist nicht von einem Fehler als solchem die Rede sondern von willkürlich auftretendem "Hängen" von Formularen. Access steigt dabei auch nicht aus oder zeigt einen Fehler an. Das Fenster wird halt nur nicht geöffnet. Die Anwendung läuft ganz normal weiter.
Hallo,
doch, es trifft die Fragestellung. Hast Du überall eine Fehlerbehandlung ?
Hallo datekk,
DB sichern, und dieses lesen:
http://www.donkarl.com?FAQ1.27 (http://www.donkarl.com?FAQ1.27)
gruss ekkehard
Zitat von: datekk am Oktober 24, 2016, 11:26:18es ist mir schon sehr oft aufgefallen, dass manchmal irgendwelche Formulare in der Datenbank "hängen"... damit meine ich, dass diese sich nicht öffnen lassen. Wenn man z.B. eine Schaltfläche zum öffnen eines Formulares nutzt kann man auf die Schaltfläche klicken, und nix passiert. Das Formular öffnet sich nicht - wohingegen andere Formulare problemlos laufen.
Abhilfe schafft hier nur, das Formular im Entwurfsmodus zu öffnen, dann in die Layoutansicht zu wechseln und schlussendlich auf die normale Formularansicht.
Kann es sein, dass diese Formulare unsichtbar oder minimiert bereits geöffnet sind? Prüf mal die Forms-Collection, wenn das Problem das nächste mal auftritt.
Hallo,
es kann auch sein, dass die DB zerschossen ist. Dann hilft vielfach, eine neue leere DB zu erstellen und alle Objekte aus der alten DB zu importieren.
@Klaus: Ich habe überall eine Fehlerbehandlung.. manchmal aber auch nur on error resume next.... Ich werde in meiner Datenbank eine Log-Tabelle einführen und jeden Fehler dokumentieren. Gibt es neben der Err.Description oder Err.Number noch einen Befehl, der mir das Modul und die Prozedur des Fehlers benennt?
@ PhilS: Danke. Das kann eigentlich nicht sein, werde ich aber beim nächsten mal prüfen.
@Franz: habe ich schon gemacht.
Hallo,
da Du ja die Fehlermeldung für jede Prozedur/Funktion brauchst, ist an der Stelle ja deren Name bekannt. Du musst einfach an die MsgBox noch den Namen dranhängen (Event. mit einem Zeilenwechsel).
MsgBox Err.Description & vbCrLf & "In Prozedur/Funktion NameDerProzedur"
Hallo,
nur so ein paar Ideen...
Du schreibst, dass du Formulare über Buttons öffnest. Wie werden sie aber geschlossen? Könnte es sein, dass du im ürspünglichen Recordset ("Mutterformular") navigierst, bei gleichzeitig geöffneten Tochter-Formularen?
Sind die "Tochter-Formulare" alle modal? Verändern Tochter-Formulare Daten im Mutter-Formular?
Benutzt du zufällig ein "gotorecord" im current-event (siehe die ausführlichen Erklärungen im Thread "Shell bricht nach 111 Vorgängen ab")?
Keine Ahnung, wie man einen Stack- oder Heap-Overflow in Access aufspüren kann; ich vermute allerdings, dass das mit einfachem Logging nicht möglich ist, da der Abbruch ja erfolgt, bevor ein Logging stattfinden kann. Vielleicht mit einer globalen Logging-Klasse, die timergesteuert Status-Infos schreibt? Gibt es eine (API-)Funktion, um Stack und Heap zu überwachen?
Wie gesagt - nur Ideen.