collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 62
  • Punkt Versteckte: 1
  • Punkt Mitglieder: 2
  • Punkt Benutzer Online:

* Forenstatistik

  • stats Mitglieder insgesamt: 14038
  • stats Beiträge insgesamt: 67217
  • stats Themen insgesamt: 9066
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: Fehler 3420 in Zeile 60 (Das Objekt ist ungültig, oder nicht mehr festgelegt)  (Gelesen 1093 mal)

Offline trebuh

  • Access-Profi
  • **
  • Beiträge: 177
Hallole,

im Moment plagt mich ein Problem, und ich komme absolut nicht darauf, woran es liegen kann.

Hier mal der Code, wo der Fehler (in Zeile 60) auftritt. Mehr dazu weiter unten:
Zitat
Private Sub cmdschliessen_Click()

10       On Error GoTo cmdschliessen_Click_Error

          Dim lng_ID As Long
          Dim frm As Form
          Dim rec As Recordset
                 
20        lng_ID = Me!rech_nr
       
            Forms("frmRechUebersicht").Requery
       
30        Set frm = Forms("frmRechUebersicht")
40        Set rec = frm.RecordsetClone
50        With rec
60            .FindFirst "[rech_nr]=" & lng_ID
70            If Not .NoMatch Then
80                frm.Bookmark = rec.Bookmark
90        End If
100           End With

110       Set rec = Nothing
120       Set frm = Nothing


140       DoCmd.Close acForm, "frm_Rechnung"
150      On Error GoTo 0
160      Exit Sub

cmdschliessen_Click_Error:

170       MsgBox "Error " & Err.Number & " in Zeile " & Erl & " (" & Err.Description & ") in procedure cmdSchliessen_Click of VBA Dokument Form_frm_Rechnung"
End Sub

Ich habe ein Rechnungsübersichtformular (frmRechUebersicht), woraus ich die Detailrechungen (frm_Rechnung) öffnen kann.

Im Schließen-Button des "frm Rechnung" ist der obige Code.

Nun zum Phänomen:
Öffne ich das Rechnungsübersichtformular und im Anschluß das Rechnungsformular und schließe es wieder, ist alles in Ordnung.

Wenn ich jetzt aus dem Rechnungsübersichtsformular eine neue Rechnung anlege, lande ich schlußendlich (es sind ein paar Formulare dazwischen) im Rechnungsformular.
Wenn ich dann das Formular schließe, bekomme ich den Fehler 3420 (Das Rechnungsformular bleibt offen).

Das Übersichtsformular ist bereits durch das Forms (...). Requery aktualisiert.

Jetzt wird es interessant:
Schließe ich das Rechnungsübersichtsformular und öffne es wieder, kann ich ohne Probleme das Rechnungsformular schließen. Es kommt kein Fehler!

Was kann da die Ursache sein? Habe ich irgendwo in den Formularen, welche ich zur Rechnungserstellung brauche, irgendwas nicht sauber deklariert?
Kann es mit der Abfrage zusammenhängen, auf welche sich das Rechnungsübersichtsformular bezieht?
Blockiert diese womöglich den Zugriff, obwohl das Formular offen ist?

Der Fehler 3420 scheint meinen Recherchen nach schon so manchen zur Verzweiflung gebracht haben.

Grüßle

Hubert
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1862
Re: Fehler 3420 in Zeile 60 (Das Objekt ist ungültig, ...
« Antwort #1 am: Mai 21, 2018, 17:03:48 »
Markiert der Debugger die auslösende Zeile nicht?
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Offline trebuh

  • Access-Profi
  • **
  • Beiträge: 177
Hallo Breaker s.a.

Nein. Oder sollte ich den Code zur Fehlermeldung mal ausblenden, damit der Debugger auslöst?

Ein Versuch ist es ja wert;-) Mal sehen, ob es die gleiche Zeile ist.

Grüßle
Hubert
 

Offline trebuh

  • Access-Profi
  • **
  • Beiträge: 177
Hallole,

also der Debugger bleibt auch in Zeile 60 stehen.

habe jetzt in dem Code nach dem Forms(...). Requery
ein schließen und öffnen des Übersichtsformular eingebaut.

Jetzt bleibt der Fehler aus.
Vielleicht hat jemand eine Idee was da sein könnte?
Oder hat womöglich die Datenbank einen defekt?

Grüßle
Hubert
 

Offline Frank77

  • Access-Profi
  • **
  • Beiträge: 188
    • Die Zauberbaecker
Hallo!

Vieleicht wäre das so ne möglichkeit

Option Compare Database
Option Explicit
Private Const mod_formModule As String = "frm_Rechnung."
Private Function IstFormularGeoeffnet(ByVal strFormularname As String) As Boolean
    If SysCmd(acSysCmdGetObjectState, acForm, strFormularname) <> 0 Then
        If Forms(strFormularname).CurrentView <> 0 Then
            IstFormularGeoeffnet = True
        Else
            IstFormularGeoeffnet = False
        End If
    End If
End Function
Private Sub cmdschliessen_Click()
    Dim frm As Form
    Dim varBookmark As Variant
    If IstFormularGeoeffnet("frmRechUebersicht") Then
        Set frm = Forms!frmRechUebersicht.Form
        With frm
            If .FilterOn = True Then .FilterOn = False
            varBookmark = .Recordset.Bookmark
            .Requery
            .Recordset.FindFirst "[rech_nr]=" & Me!rech_nr
            If Not .NoMatch Then
                .SetFocus
            Else
                .Recordset.Bookmark = varBookmark
            End If
        End With
    End If
Exit_ErrHandler:
    If Not frm Is Nothing Then Set frm = Nothing
    Exit Sub
Err_ErrHandler:
    Select Case Err.Number
    Case 3420
        DoCmd.Close acForm, "frm_Rechnung"
    Case Else
        MsgBox Err.Number & Err.Description & " in cmdSchliessen_Click " & formModule
    End Select
    Resume Exit_ErrHandler
End Sub

Gruß Frank
« Letzte Änderung: Mai 22, 2018, 01:05:28 von Frank77 »
Selbstständig = Selbst und Ständig
 

Offline trebuh

  • Access-Profi
  • **
  • Beiträge: 177
Hallo Frank,

also ich habe Deinen Code bei dem Rechnungsformular eingebaut.

Wenn ich jetzt aus dem Rechnungsübersichtsformular eine bestehende Rechnung öffne und anschließend schließe, meldet der Debugger den Fehler:

Laufzeitfehler '2465':
Anwendungs- oder objektdefinierter Fehler.

Beim Debuggen wird die Zeile
            If Not .NoMatch Thengelb markiert.

Wenn ich eine neue Rechnung erstelle, kommt beim schließen des Formulars wieder der Fehler:

Laufzeitfehler'3420':
Das Objekt ist ungültig, oder es ist nicht mehr festgelegt.

Beim Debuggen wird die Zeile
            varBookmark = .Recordset.Bookmarkgelb markiert.

Ich habe mich jetzt einfach mal bei dem schließen code mit :

40      DoCmd.Close acForm, "frmRechUebersicht"
50      DoEvents
60     DoCmd.OpenForm "frmRechUebersicht"

beholfen.

Es würde mich aber schon interessieren, ob ich da irgendwo was falsch programmiert habe, oder was da sonst sein könnte.

Grüßle
Hubert
 

Online DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23413
Hallo,

es geht halt einfach nicht, ein Formular zu referenzieren und dieses Form dann zu schließen und wieder zu öffnen. Dadurch wird die vorherige Referenz zerstört...

(falls ich den Ablauf richtig interpretiere)

Offline trebuh

  • Access-Profi
  • **
  • Beiträge: 177
Hallo Franz,

auf welchen Code beziehst Du dich jetzt?

Meinst Du das bei mir eingefügte
40      DoCmd.Close acForm, "frmRechUebersicht"
50      DoEvents
60     DoCmd.OpenForm "frmRechUebersicht"

Oder bei dem was Frank77 vorgeschlagen hat.

Bei nachfolgendem Code bleibt mir der Fehler 3420 jetzt mal weg, wobei ich denke, dass das Formular schließen und wieder öffnen programmiertechnisch nicht schön ist  :D

Private Sub cmdschliessen_Click()

10       On Error GoTo cmdschliessen_Click_Error

          Dim lng_ID As Long
          Dim frm As Form
          Dim rec As Recordset
           
20        lng_ID = Me!rech_nr
       
30          Forms("frmRechUebersicht").Requery
           
       
40      DoCmd.Close acForm, "frmRechUebersicht"
50      DoEvents
60     DoCmd.OpenForm "frmRechUebersicht"
       
70        Set frm = Forms("frmRechUebersicht")
80        Set rec = frm.RecordsetClone
90        With rec
100           .FindFirst "[rech_nr]=" & lng_ID
110           If Not .NoMatch Then
120               frm.Bookmark = rec.Bookmark
130       End If
140           End With

150       Set rec = Nothing
160       Set frm = Nothing


170       DoCmd.Close acForm, "frm_Rechnung"
180      On Error GoTo 0
190      Exit Sub

cmdschliessen_Click_Error:

200       MsgBox "Error " & Err.Number & " in Zeile " & Erl & " (" & Err.Description & ") in procedure cmdSchliessen_Click of VBA Dokument Form_frm_Rechnung"
End Sub

Grüßle Hubert
 

Offline Frank77

  • Access-Profi
  • **
  • Beiträge: 188
    • Die Zauberbaecker
Hallo!

Ich denke du wirst da eine beispiels DB Hochladen müssen.

LG
Selbstständig = Selbst und Ständig
 

Offline trebuh

  • Access-Profi
  • **
  • Beiträge: 177
Hallo,

Das müsste ich hinkriegen. Wie groß darf den die Datei sein? Gezippt komme ich auf ca. 5,5 MB

Werde wohl eh die Datenbank auf das allernotwendigste verkleinern müssen.

Gruß
Hubert
 

Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1294
Minimalbeispiel - kurz erklärt:
=======================

Das Erstellen eines Minimalbeispiels ist eine Methode zur Fehlererkennung und -behebung, sowie zum Bestimmen der Ursache eines bestimmten Verhaltens.


Minimalbeispiele sollten möglichst klein und lauffähig sein, d.h. sie besitzen den Grundaufbau einer Access-Datenbank und sind ohne Ergänzen von Elementen bis auf das Fehlverhalten ausführbar.


Das Minimalbeispiel sollte vollständig und lauffähig sein, damit

*  der Fragende nicht aus Unkenntnis, Informationen, die für die Diagnosewichtig sind, weglassen kann,

*  der Antwortende das Beispiel einfach ausprobieren kann.


Das Minimalbeispiel sollte klein sein,

* damit der Antwortende sich nicht durch lange, unwichtige Codezeilen quälen muss,

* weil dadurch die möglichen Fehlerquellen eingegrenzt werden,

* weil man kurze Beispiele gut posten kann und den Server hier nicht zumüllt,

* damit der Fokus auf das Wesentliche gelenkt wird.


Also: vereinfachen, unnötige Teile entfernen, Grafiken entfernen, soviele anonyme Beispieldaten belassen, wie es die Problematik erfordert, Dienstprogramm Komprimieren und reparieren vor dem Archivieren ausführen.
« Letzte Änderung: Mai 22, 2018, 14:29:07 von Lachtaube »
Grüße von der (⌒▽⌒)
 

Offline trebuh

  • Access-Profi
  • **
  • Beiträge: 177
Hallo Lachtaube,

danke für Deinen ausführlichen Bericht. :D

nur noch kurze Frage dazu.

Sollen die Tabellen vom Backend dann wieder ins Frontend integriert sein, damit es nur eine Datei ist?

Grüßle
Hubert
 

Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1294
Ja, das erleichert den Umgang des Antwortenden mit der DB.
Grüße von der (⌒▽⌒)
 

Offline trebuh

  • Access-Profi
  • **
  • Beiträge: 177
Hallo,

habe jetzt das Problem, die Datei unter 1 MB (gezippt) zu bekommen.

Die Dateigröße liegt jetzt bei knapp unter 9 MB und mit WinZip komme ich auf maximal 1,45 MB.

Habe alles an Formularen rausgeworfen, ebeso in den übrigen Formularen alles was nicht gebraucht wird.
Ebenso die Datenbank komprimiert.

Tabellen und Abfragen löschen bringt nicht viel an Minimierung.
Grafiken habe ich keine in den Formularen. Liegt es an dem Design? Hintergrundfarbe Textfarbe etc?

Es sind ja nur noch 10 Formulare (einschließlich Unterformulare) übrig.

Was braucht denn da so viel Platz?

Gruß
Hubert
 

Offline Frank77

  • Access-Profi
  • **
  • Beiträge: 188
    • Die Zauberbaecker
Hallo!

kannst das Archiv teilen in 2 zip Dateien und separat Hohladern, das könnte ja dann einer der Admins nachher korrigieren

oder du lädst es hier hoch  https://www.zippyshare.com/
und Postest den link

Gruß Frank
« Letzte Änderung: Mai 23, 2018, 23:03:27 von Frank77 »
Selbstständig = Selbst und Ständig