Zum Inhalt springen

Access instabil nach Exit Sub


larryfilou

Empfohlene Beiträge

Wenn ich auf der Schaltfläche Cancel wähle, stürzt Access ab, hab ih was falsch gemacht??


Dim text, style, title, response

Dim rsCounter As Long


text = "The partnumber entered ist not available." + Chr(13) + "* Retry to type in a correct partnumber" + Chr(13) + "* Cancel to return to Main Menu"

style = vbRetryCancel + vbCritical

title = "Partnumber not valid"


'Check if Data were retrieved

rsCounter = rs.RecordCount

If rsCounter<= 0 Then

    response = MsgBox(text, style, title)

    If response = vbRetry Then

        rs.Close

        rsCheck.Close

        rsReserve.Close

        GoTo again

    Else

        DoCmd.OpenForm ("Start Menu")

        rs.Close

        rsCheck.Close

        rsReserve.Close

        Exit Sub

    End If

End If

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi, larryfilou!

' Sind die drei Recordsets (RecS) deklariert worden?


'Dim text, style, title, response

' Der Absturz wird mit Sicherheit nicht

' durch die nicht vorhandenen Typenangabe hervorgerufen.

Dim text As String, style as Long, title As String, response As Long

Dim rsCounter As Long


text = "The partnumber entered ist not available." + Chr(13) + "* Retry to type in a correct partnumber" + Chr(13) + "* Cancel to return to Main Menu"

style = vbRetryCancel + vbCritical

title = "Partnumber not valid"


'Check if Data were retrieved

rsCounter = rs.RecordCount

If rsCounter<= 0 Then

    response = MsgBox(text, style, title)


    'Die drei RecS werden doch auf jeden Fall geschlossen.

    ' Was spricht gegen das Auflösen an dieser Stelle?

    rs.Close

    rsCheck.Close

    rsReserve.Close


    If response = vbRetry Then

        'rs.Close

        'rsCheck.Close

        'rsReserve.Close

        GoTo again

    Else

        DoCmd.OpenForm ("Start Menu")

        'rs.Close

        'rsCheck.Close

        'rsReserve.Close

        Exit Sub

    End If

End If

Für mich ist der Code ansonsten zu sehr gekürzt.

Kommt nach dem letzten "End If" noch etwas? (Sicherlich, denn sonst wäre das "Exit Sub" völlig überflüssig.)

Werden die RecS überhaupt geSETtet? (Für das Auflösen ist das (kurioserweise) nicht nötig.)

Ist es wirklich die "Exit Sub"-Zeile, die den Absturz auslöst?

(Hast Du das schon mit Haltepunkten ausprobiert? (Oder verhält sich das Programm dann wieder anders? Alles schon erlebt...)))

Hast Du an irgendeiner anderen Stelle die Fehlermeldungen mit "DoCmd.SetWarnings = False" deaktiviert und nicht wieder auf "True" gesetzt?

Das sind die Dinge, die mir aus der Ferne spontan einfallen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Dims und Sets sind alle da, ich hab sie nur rausgenommen, damit man nicht zwanzig Seiten Code lesen muss, aber Du hast wahrscheinlich recht: Also, hier der restliche Code (Es eght danach noch weiter, aber das danach kann wohl kaum mehr wichtig sein....)


again:


DoCmd.Echo False, "Visual Basic code is executing."

DoCmd.Close acForm, "Start Menu", acSaveYes

DoCmd.OpenQuery ("Destockagequery")


Dim db As DAO.Database

Dim rs As DAO.Recordset

Dim rsCheck As DAO.Recordset

Dim rsReserve As DAO.Recordset

Dim stDocName As String

Dim Username As String

Dim Needed As Double

Dim UserID As Byte

Dim Amount As Double

Dim Summed As Double

Dim MinimumAmount As Double

Dim text, style, title, response

Dim rsCounter As Long


Set db = CurrentDb

Set rs = db.OpenRecordset("Destockageresult")

Set rsCheck = db.OpenRecordset("SELECT Sum(Destockageresult.Stocked) AS Summed FROM Destockageresult;")

Set rsReserve = db.OpenRecordset("Items")

text = "The partnumber entered ist not available." + Chr(13) + "* Retry to type in a correct partnumber" + Chr(13) + "* Cancel to return to Main Menu"

style = vbRetryCancel + vbCritical

title = "Partnumber not valid"


'Check if Data were retrieved

rsCounter = rs.RecordCount

If rs.RecordCount <= 0 Then

    response = MsgBox(text, style, title)

    If response = vbRetry Then

        rs.Close

        rsCheck.Close

        rsReserve.Close

        GoTo again

    Else

        DoCmd.OpenForm ("Start Menu")

        rs.Close

        rsCheck.Close

        rsReserve.Close

        Exit Sub

    End If

End If


'Check ID

Call User(Username, UserID)

Retry:

'Check Amount needed

Call Menge(Needed)


DoCmd.Echo True


'Check if requested amount bigger than stored

If Needed > rsCheck!Summed Then

    If MsgBox("Amount needed bigger than Amount stored, Amount still available = " & rsCheck!Summed & " !", 33, Error) = vbOK Then

    GoTo Retry

    Else

    DoCmd.OpenForm ("Start Menu")

    Exit Sub

    End If

End If

Ich habs in der Tat nciht mit Lesezeichen versucht, das mach ich gleich noch, aber es passiert, nachdem das Fenster "Start Menu" geöffnet wird.

Ich kann dann in dem frisch geöffneten Fenster nichts mehr klicken.. :(

Link zu diesem Kommentar
Auf anderen Seiten teilen

Lesezeichen
Loriot: Halt, halt, halt, halt... ;)

Verwechsel nicht die Lesezeichen (, die Dir beim Entwickeln helfen schnell durch den Code zu "springen") mit den Haltepunkten (, die Dir beim Debugging die Ausführung des Codes unterbrechen, so daß Du z.B. Variablenwerte überprüfen kannst). Du findest sie (die Haltepunkte) im Menü "Debuggen". Du kannst sie aber auch (einfacher) mit einem Linksklick in die graue Spalte links neben dem Code setzen und löschen.

(F5, um den Ablauf fortzusetzen, F8 für schrittweise Ausführung. Die gelb hinterlegte Zeile ist noch nicht ausgeführt, und einige Zeilen lassen sich nicht mit einem Haltepunkt markieren (z.B. reine Deklarations- und Kommentarzeilen).)

Der Absturz...

...passiert, nachdem das Fenster "Start Menu" geöffnet wird.

Ich kann dann in dem frisch geöffneten Fenster nichts mehr klicken.. :(

Dann liegt es doch eher an dem "Start Menu"-Formular?

Hast Du schon einmal die "Open"-Zeile auskommentiert? Stürzt die DB auch dann ab? Was passiert wenn Du das Formular direkt öffnest?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Richtiger Sinn, falscher Begriff, ich hatte schon die Haltepunkte im Sinne...

Habs ausprobiert:

Setze ich das Exit Sub auf Kommentar, ist alles in Butter (ausser, dass das Programm die folgenden Fragen abklappert), setze ich jedoch das DoCmd auf Kommentar, stürzt mir das Programm ab... :((

Aber wie könnte ich denn sonst das ganze beenden? :confused:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ist das "Main Menu"-Formular noch geöffnet? (Dürfte allersings nicht schädlich sein...)

Hast Du die DB in eine Enlosschleife gekickt? (Gibt es ein "Open"-Ereignis für das "MM"-Frm?)

Lasse die DB noch einmal laufen, und wenn das Formular "hängt" drücke

[strg]+[Pause].

Wenn Du Glück hast, erscheint ein Fenster: "Die Ausführung des Codes wurde unterbrochen" (o.ä.). D.h. Access tut noch etwas und Du kannst mit der Schaltfläche [Debuggen] herausfinden, was so lange aufhält.

Propier mal. :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ist das "Main Menu"-Formular noch geöffnet? (Dürfte allersings nicht schädlich sein...)

Nope, denn:

DoCmd.Echo False, "Visual Basic code is executing."

DoCmd.Close acForm, "Start Menu", acSaveYes

DoCmd.OpenQuery ("Destockagequery")

Hast Du die DB in eine Enlosschleife gekickt? (Gibt es ein "Open"-Ereignis für das "MM"-Frm?)...)

Nö, die wäre dort ja sichtbar, denn weiter gehts in dem moment ja eh net. Das mit dem "Open Ereignis für MM Form versteh ich gerade net, hab kein MM Frm...

Könnte es sein, dass das Ergebnis des Query, die ich in Zeile 2 öffne, ein Problem ist? Sollte ich die entstandene Tabelle und die Query evtl irgendwie abschliessen... ?!

Lasse die DB noch einmal laufen, und wenn das Formular "hängt" drücke

[strg]+[Pause].

Wenn Du Glück hast, erscheint ein Fenster: "Die Ausführung des Codes wurde unterbrochen" (o.ä.). D.h. Access tut noch etwas und Du kannst mit der Schaltfläche [Debuggen] herausfinden, was so lange aufhält.

Jo, des test ich mal... :) - Ne, hat nichts gebracht... :(

Thanx :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...

Nicht nur beim klicken des Cancels an DIESER Stelle gibt es Probleme:

Ich hab in der im Quellcode erwähnten Query eine Parameterabfrage.

Diese bringt ja ein Eingabefenster hervor, bei dem ich die Wahl habe, einen Betrag einzugeben oder nicht, und zu bestätigen oder nicht.

Wenn ich bei diesem Eingabefenster auf Cancel klick, stürzt Access auch ab...

Ist das NORMAL?

Kann ich das Eingabefenster dahingehend beeinflussen, dass es nur OK zulässt?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das Problem mit der instabilen Reaktion an DEM Punkt war mein Fehler: Ich habe nicht klar definiert, was im Falle eines Fehlers passieren soll, und die Schleifen nicht korrekt beendet.

Das hab ich inzwischen behoben. Viel schlimmer ist der gleiche Fehler bei der Abfrage, die dort eingebunden ist...

Denn ich kann weder die EingabeBox beeinflussen, noch dem System sagen, was im Falle eines Fehlers passsieren soll, oder etwa doch?

In der Hilfefunktion habe ich das Beispiel gefunden, dass die Parameter variabel gestaltet werden, indem die SQL Funktion ins VBA geflochten wird, und per Sub die Werte abgefragt werden.

Als ich aber das letzte Mal versucht habe, das SQL ins VBA zu setzen, hat der QueryDef Befehl nicht funktioniert. Muss ich da evtl eine Bibliothek bei den References aktivieren?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...