Neuigkeiten:

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

Mobiles Hauptmenü

Fehler beim Formularschliessen durch Taste ESC

Begonnen von Bernie110, November 28, 2023, 15:59:51

⏪ vorheriges - nächstes ⏩

Bernie110

Hallo Zusammen,

ich erhalte einen Fehler beim Schliessen des Formulars.

Ausgangssituation :
Ich öffne das Formular wie folgt :
Private Sub BT_FORM_ÖFFNEN_Click()
 docmd.openform "FORM1",,,,,acDialog
 call Brechnung
End sub

Schliesse ich das FORM1 nun über einen Button der folgenden Code ausführt ist alles in Ordnung.
docmd.close acform, me.name"Call Berechnung" wird im Anschluss korrekt ausgeführt.

Schliesse ich aber das FORM1 über eine Tastenbelegung ESC wirft mir die Call Berechnung einen Fehler der nicht schlüssig ist. ( Geht ja zuvor auch )
Habs auch mit anderen Calls und auch mit anderem Code im Anschluss versucht.. Es kommt ein Fehler.
Daher vermute ich, dass es mit der Tastenbelegung zusammenhängt. K.A..

Im FORM1 sieht der Code mit der Tastenbelegung so aus :

If Keycode = 27 then
docmd.close acform, me.name
keycode = 0
end if

Bei FORM1 handelt es sich immer um ein ungebundenes Forumlar.



Jemand ne Idee an was es liegen könnte ?
Vorab herzlichen Dank für euere Antworten
Lg Bernie





Bernie110

Ok hat sich erledigt.
Es lag am CALL zur Prozedur.
Irgendwie seltsam.
Man ruft das Formular im acDialog Modus auf und trotzdem schiesst diese Prozedur quer..

PhilS

Zitat von: Bernie110 am November 29, 2023, 14:02:53Man ruft das Formular im acDialog Modus auf und trotzdem schiesst diese Prozedur quer..
Vermutlich hast du beim Verlassen mit ESC nicht die Daten eingegeben, die deine Brechnung (e verzweifelt gesucht) benötigt.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Bernie110

Hi Phil,
dann wäre das ja ziemlich plausible,
Aber so ist das leider nicht, da ja nichts passiert wenn ich über die Schaltfläche das Formular schliesse.
Es passierte ja nur beim ESC exit.

Bei der CallProzedur ging es lediglich darum aus einer Abfrage eine aktuelle Summe auszulesen.
Das habe ich über einen Recordset gemacht.
Jetzt mache ich das gleiche über eine Formalbasiertabfrage mit Dlookup und der Fehler kommt nicht mehr..

Vermutlich ist es besser, die Summe nicht in ein Feld einzulesen, sondern Sie eher mit einem UFO darzustellen.
Aber das will ich eigentlich nicht.
Keine Ahnung...
Lg Bernie


Josef P.

Hallo!

Auf welches Ereignis reagierst du, wenn du über Esc schließen willst?

Übrigens:
Du kannst bei einem Button auch einstellen, dass auf Esc reagiert wird.
Eigenschaft: Cancel

Gruß
Josef

PhilS

Zitat von: Bernie110 am November 30, 2023, 15:24:08Aber so ist das leider nicht, da ja nichts passiert wenn ich über die Schaltfläche das Formular schliesse.
Es passierte ja nur beim ESC exit.

Bei der CallProzedur ging es lediglich darum aus einer Abfrage eine aktuelle Summe auszulesen.
Summen aus Feldern, die evtl. leer sind, wenn du den Dialog mit ESC abgebrochen hast? - Dann wäre das sehr plausibel. 
Darüber hinaus macht es wenig Sinn hier weiter zu spekulieren, ohne deinen Code und den Ablauf zu kennen.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Bernie110

Zitat von: PhilS am Dezember 01, 2023, 17:34:07Summen aus Feldern, die evtl. leer sind, wenn du den Dialog mit ESC abgebrochen hast? - Dann wäre das sehr plausibel.
Hi Phil,
ich öffne ein Formular1 aus einem Formular0 mit acDialog. Wie kann dann eine Procedur im Formular0 unterbrochen werden, wenn ich das Forumlar1 mit Ecs schliesse ? Verstehe ich nicht. Unterbricht er da tatsächlich die im Anschluss folgende Procedur ab ?
Und wenn er es macht, warum bricht er die Procedur nicht ab, wenn ich docmd.close acform, me.name über einen Schalter betätige ?


Der Code war eigentlich ganz einfach.

aus Formular 0

Private Sub BT_FORM_ÖFFNEN_Click()
docmd.openform "FORM1",,,,,acDialog
call berechnung
End sub

Public Sub Berechnung ()

Dim dbA as Database
Dim rsA as Recordset
Set dbA = CurrentDB()

Set rsA = dbA.openRecordset("Select * From qyr_Sendung_summe_auslesen where SNDG_ID = me.sndg_ID, dbOpebndynaset, DBSeeChanges)

with rsA

Me.Summe_Kg = .fields("KG")

.close
end with
dbA.Close

end Sub
(so ungefähr war der Code)


Es gibt 2 Methoden das Formular1 zu schliessen.
Per button oder per ESC
Beide haben den selben Code.
Docmd.close acform, me.name

Der Fehler trat wie folgt auf :
Formular wird geöffnet und gleich wieder geschlossen. Eben via ESC
Dann kam debuggen und er markierte die Stelle : mit Set rsA .. .das er da nichts findet.

Habs aber mehrmals geprüft.. auch wenn Daten in der Abfrage qyr_Sendung_summe_auslesen bereits vorhanden waren, gabs den selben fehler.

Allerdings wenn ich das Form2 via Button geschlossen habe gabs keinen Fehler.

Mittlerweile habe ich den ganzen Code mit eine rDlookupVariante ersetzt.
Nicht schön, aber es kommt zu keinem Fehler mehr.

Lg Bernie 



PhilS

Zitat von: Bernie110 am Dezember 05, 2023, 14:02:16Der Fehler trat wie folgt auf :

Formular wird geöffnet und gleich wieder geschlossen. Eben via ESC
Dann kam debuggen und er markierte die Stelle : mit Set rsA .. .das er da nichts findet.
Ich vermute, der Fehler kam eher bei Me.Summe_Kg = .fields("KG") und lautete "Unzulässige Verwendung von Null".
ESC schließt ja nicht nur das Formular (das passiert sowieso nur, wenn man das so konfiguriert/programmiert), sondern in allererster Linie macht ESC die Eingabe in gebundenen Formularen rückgängig.

Ob deine Anfrage generell Daten enthält ist nur ein wichtiger Aspekt. Genauso wichtig ist u.U., ob das Feld KG in einem Recordset einen echten Wert oder NULL enthält.

Ich glaube es macht keinen Sinn hier weiter über eine rekonstruierte Vergangenheit zu diskutieren. Generell ist es möglich dass das Abbrechen einer Formulareingabe mit ESC dazu führen kann, dass nachfolgende Prozesse wegen fehlender Daten in Fehler laufen. Das genaue wieso/weshalb/warum und wie man es vermeiden kann, können wir gern an einem konkreten Beispiel diskutieren, wenn es aktuell relevant ist.


Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Bernie110

Hallo Phil, herzlichen Dank.
Ok so machen wir das !
Schönen Tag noch !
Lg Bernie