larryfilou Geschrieben 6. Februar 2006 Teilen Geschrieben 6. Februar 2006 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
piomode1 Geschrieben 6. Februar 2006 Teilen Geschrieben 6. Februar 2006 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
larryfilou Geschrieben 6. Februar 2006 Autor Teilen Geschrieben 6. Februar 2006 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.. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
piomode1 Geschrieben 6. Februar 2006 Teilen Geschrieben 6. Februar 2006 LesezeichenLoriot: 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
larryfilou Geschrieben 6. Februar 2006 Autor Teilen Geschrieben 6. Februar 2006 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: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
piomode1 Geschrieben 6. Februar 2006 Teilen Geschrieben 6. Februar 2006 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
larryfilou Geschrieben 6. Februar 2006 Autor Teilen Geschrieben 6. Februar 2006 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
larryfilou Geschrieben 17. Februar 2006 Autor Teilen Geschrieben 17. Februar 2006 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
larryfilou Geschrieben 20. Februar 2006 Autor Teilen Geschrieben 20. Februar 2006 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
piomode1 Geschrieben 24. Februar 2006 Teilen Geschrieben 24. Februar 2006 Hi, larryfilou! Hmmm.. Die "DAO 3.6"-DLL scheinst Du ja schon als Verweis eingebunden zu haben!? Ansonsten weiß ich im Moment auch nicht weiter. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.