none
Access: ungültiger Verweis auf Form/Report (2455)

    Frage

  • Hallo,

    ich habe eine Access-Anwendung (accdb), in der User nach bestimmten Kriterien unterschiedliche Rechte haben;
    der Einfachheit halber sei hier von vollem und eingeschränktem Zugriff die Rede.
    Aufgrund eines weiteren Merkmals können Teile diese Rechte betroffen sein.
    Für ein Formular mit Unterformularen hat dies zur Folge, dass einzelne Felder aber auch das ganze (Unter)Formulare gesperrt wird; bei Controls mit Locked=True, die Formularen werden über AllowEdit, AllowAddition und AllowDelete manipuliert.
    Die Änderungen der Allow-Einstellungen erfolgen unter Form_Current.
    Wenn ich nun als User mit eingeschränkten Zugriff in meiner Anwendung jenes Formular aufgerufen und auch nur einen Datensatz bewegt habe, und somit auch über Form_Current einige Allow-Einstellungen auf False gesetzt habe,
    dann kommt beim Schließen der Anwendung die Fehlermeldung 2455: ungültiger Verweis auf ein Form/Report-Objekt.
    Übrigens schließt die Anwendung dann sofort, auch wenn ich auf 'debuggen' gehe;
    ich kann also diesen Fehler nicht einmal im Code lokalisieren.

    Als User mit vollen Zugriff habe ich dies Meldung nicht.
    Bei der Suche im Netz habe ich Hinweise auf einen Zusammenhang mit den Allow-Einstellungen gefunden aber leider ohne konkreten Lösungsansatz.

    Mir würde es völlig genügen, wenn ich diess Meldung einfach unterdrücken könnte. Ein deratiger Versuch über Form_Error war ergebnislos.

    Was tun?

    Grüße aus Köln am Rhein - Klaus Trapp

    Donnerstag, 18. September 2014 20:33

Antworten

  • Hallo, Klaus!

    Meistens kommt diese Art von Fehler (dein 2455 oder 2475 = "...erforderlich, dass das aktuelle Objekt ein Formular ist."), wenn man die Anwendung beendet und beim Close-Ereignis eines noch geöffneten Formulares Code aufgerufen wird, der ein Formular bräuchte. Das wurde ihm jedoch durch das Beenden bereits weggezogen. Ein typischer Kandidat ist z.B. Screen.ActiveForm.

    Wenn nur 1 Formular beim Beenden offen ist, dann suche dessen Schließen-Ereignis (evtl. auch Unload, LostFocus etc.) nach sowas ab, also direkt ein solcher Bezug oder der Aufruf einer Prozedur, die sowas macht. Wenn mehrere Formulare offen sind, dann schließe eines manuell vor dem Beenden, teste, ob der Fehler kommt. Beim nächsten Mal das nächste Formular usw.

    Evtl. auch testweise verdächtigen Code für deine Berechtigungsgeschichte großzügig auskommentieren.

    Wenn du die Quelle gefunden hast, dann entweder anders organisieren, Code umschreiben oder im Verursacher-Code Fehler 2455 explizit mit einem stillen Exit abfangen.


    cu
    Karl
    ******
    Access FAQ (de/it): http://www.donkarl.com
    Access Lobby: http://www.AccessDevelopers.org

    Freitag, 19. September 2014 17:15

Alle Antworten

  • Hallo, Klaus!

    Meistens kommt diese Art von Fehler (dein 2455 oder 2475 = "...erforderlich, dass das aktuelle Objekt ein Formular ist."), wenn man die Anwendung beendet und beim Close-Ereignis eines noch geöffneten Formulares Code aufgerufen wird, der ein Formular bräuchte. Das wurde ihm jedoch durch das Beenden bereits weggezogen. Ein typischer Kandidat ist z.B. Screen.ActiveForm.

    Wenn nur 1 Formular beim Beenden offen ist, dann suche dessen Schließen-Ereignis (evtl. auch Unload, LostFocus etc.) nach sowas ab, also direkt ein solcher Bezug oder der Aufruf einer Prozedur, die sowas macht. Wenn mehrere Formulare offen sind, dann schließe eines manuell vor dem Beenden, teste, ob der Fehler kommt. Beim nächsten Mal das nächste Formular usw.

    Evtl. auch testweise verdächtigen Code für deine Berechtigungsgeschichte großzügig auskommentieren.

    Wenn du die Quelle gefunden hast, dann entweder anders organisieren, Code umschreiben oder im Verursacher-Code Fehler 2455 explizit mit einem stillen Exit abfangen.


    cu
    Karl
    ******
    Access FAQ (de/it): http://www.donkarl.com
    Access Lobby: http://www.AccessDevelopers.org

    Freitag, 19. September 2014 17:15
  • Danke Karl,

    ich konnte den Code anders organisieren, AllowAdditions und AllowDeletions beim Load unterbringen und die Unterformulare ggf. mit Locked=True sperren.

    Von meinen 4 Unterformularen kam wohl nur eins in Frage; in den anderen passiert fast nichts. Dort wäre ich vermutlich mit Form_Error fündig geworden, hatte damit aber nur im Hauptformular getestet.

    Ich nehme mal als Haupthinweis mit, in solchen Fällen den Augenmerk auf die Unterformulare zu richten.


    Grüße aus Köln am Rhein - Klaus Trapp

    Samstag, 20. September 2014 07:50