Globale Formularvariable (Typ Form) verliert Bezug

  • Access

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von dwt73.

    Globale Formularvariable (Typ Form) verliert Bezug

    Moin,

    folgendes Problem:
    Ich benutze in einer DB mehrere Formulare, die alle auf dieselben Logtabellen zugreifen und diese anzeigen.
    Nun will ich die entsprechenden Subs aber so generisch wie möglich halten und nicht für jedes Formular den ganzen Schmus redundant führen.
    Also habe ich eine globale Variable vom Typ Form eingeführt, welche bei jedem Öffnen eines der Formulare gesetzt wird

    Visual Basic-Quellcode

    1. private sub form_open
    2. set g_FormRef = Me


    usw...

    Nun will ich z.B. beim Aktualisieren der Listenfelder diese Variable benutzen

    Visual Basic-Quellcode

    1. g_FormRef.LogTraceLst.Requery


    Das funktioniert auch, aber irgendwann bekomme ich dann den Laufzeitfehler 91 (Objektvariable nicht festgelegt), und im Überwachungsausdruck sehe ich auch, daß der Wert auf <außerhalb des Kontexts> steht. Dieser Bezug geht verloren, sobald alle von der Prozedur form_open getriggerten Aktivitäten abgeschlossen sind.

    Wie kann ich g_FormRef so setzen, daß es nachhaltig gesetzt bleibt (static?), bzw. wie kann ich das elegant lösen?

    Besten Dank schonmal...

    Gruß
    Timo
    Moin Inopiae,

    meine globalen Variablen werden in einem eigenen Modul gesammelt deklariert.
    Das Formular, auf das sich g_FormRef bezieht, beliebt die ganze Zeit geöffnet.

    g_FormRef wird beim Öffnen gesetzt wie zuvor beschrieben und beim Schließen des Formulars als letzte Aktion genullt (Set nothing). Aber das Problem tritt schon vor dem Schließen auf.

    Die Logik liegt teilweise in den Formular-Klassenobjekten, aber zum größten Teil in diversen Modulen. Auch dort funktioniert es erstmal, aber sobald die Prozedur form_open, in der g_FormRef gesetzt wird, beendet wird, verliert g_FormRef seinen Wert. Normalerweise behalten globale Variablen ihre Zuweisung darüber hinaus, aber das sind dann bei mir i.d.R. integer oder strings. Mit globalen Objekten habe ich da offensichtlich noch zu wenig Erfahrung.

    Situation ist nun hoffentlich etwas klarer geworden.

    Als workaround habe ich den Zuweisungsbefehl set g_FormRef = Me nun auch noch in andere Subs übernommen (weil ja zumindest alles über Buttons aus dem Formular getriggert wird), aber das ist nicht elegant und löst mein Problem nicht ursächlich, sondern nur symptomatisch und vermutlich auch nicht vollumfänglich.

    Gruß
    Timo