Hallo,
ich habe ein kleines Problem mit der Access Runtime 2007. Habe mein Programm unter Vollversion 2003 getestet und es funktioniert ohne Probleme. Jetzt aber in der Runtime kommt folgender Fehler:
"Sie haben als Einstellung der Ereigniseigenschaft den Ausdruck Beim Klicken eingegeben. Dier Ausdruck hat einen Fehler verursacht."
Ich steh irgendwie auf dem Schlauch und kann den Fehler leider nicht finden. Vielleicht könnt ihr mir ja helfen. Der Code enthält eigentlich nur ähnliche Anweisung wie hier:
Set DB = CurrentDb
SQL = "SELECT * FROM [T_Werkzeug]"
Set RS = DB.OpenRecordset(SQL)
RS.AddNew
RS.[Bestellnummer]= 111
RS.Update
DoCmd.Close
Hallo,
RS![Bestellnummer]= 111
Hallo
und Bestellnummer ist auch noch PK. Das funktioniert doch einmal und ab dem zweiten mal??? (Abbruch).
Im Ernst. Ich glaub nicht das du das wirklich so machst.
Warscheinlicher ist das noch ein Kompilierfehler vorliegt. Kompiliere mal dein VBA.
Gruß
Johann
Hallo imac,
ZitatIch steh irgendwie auf dem Schlauch und kann den Fehler leider nicht finden.
Suche zuerst in Prozeduren, die keine Fehlerbehandlung haben; - falls es solche überhaupt gibt.
Fehlende Fehlerbehandlung ist in der Runtime-Umgebung ansonsten äusserst frustrierend für
den Anwender, da Access die Anwedung gnadenlos abschiesst (NICHT ZERschiesst).
Ansonsten musst Du halt
vorne anfangen zu suchen; - AutoExec-Makro, Startformular.
Johanns Vorschlag, die DB neu zu kompilieren, könnte aber auch schon helfen.
Zur Not probierst Du mit einer Kopie Deiner DB mal folgende, hier beschriebene Vorgehensweise:
http://www.donkarl.com?FAQ1.23 (http://www.donkarl.com?FAQ1.23)
hth
gruss ekkehard
Hallo!
ZitatSuche zuerst in Prozeduren, die keine Fehlerbehandlung haben; - falls es solche überhaupt gibt.
Aber bitte nicht in jeder Prozedur eine Fehlerbehandlung einbauen, die den Fehler übergeht und die aufrufende Prozedur weitermachen lässt, als wäre nichts passiert.
Ich erwähne das nur, da ich so etwas leider viel zu oft sehe.
Ein Beispiel für den Murks, den ich meine:
'Symbolisch für weiter Prozedurergebnisse o. ä.
Const MindestBestand As Long = 100
Const MaxLagerbestand As Long = 1000
Const BestehenderBedarf As Long = 50
Const VorhandenerLagerBestand As Long = 900
' Diese Prozedur zum Testen aufrufen:
Public Sub TesteBestellMengeBerechnen()
Dim Bestellmenge As Long
Bestellmenge = BestellMengeBerechnen(123, 100)
' Bestellung auslösen:
' ...
' Als Test-Ersatz eine Msgbox anzeigen:
MsgBox "Anzahl der zu bestellenden Artikel: " & Bestellmenge
' Diese Msgbox darf niemals erscheinen, wenn in den untergeordneten Prozeduren ein Fehler auftrat,
' da dann möglicherweise falsche Werte verwendet werden.
End Sub
Public Function BestellMengeBerechnen(ByVal ArtikelId As Long, ByVal NeueBedarfsMenge As Long) As Long
Dim Lagerbestand As Long
Dim Bedarf As Long
Dim RestMenge As Long
On Error GoTo ErrHandler
Lagerbestand = 123
Lagerbestand = LagerbestandAuslesen(ArtikelId)
Bedarf = BestehenderBedarf + NeueBedarfsMenge
RestMenge = Lagerbestand - Bedarf
If RestMenge >= MindestBestand Then
BestellMengeBerechnen = 0
Else
BestellMengeBerechnen = MaxLagerbestand - RestMenge
End If
ExitHere:
Exit Function
ErrHandler:
MsgBox "Fehler: " & Err.Number & ": " & Err.Description, vbCritical, "Fehler: " & Err.Number & " in BestellMengeBerechnen"
Resume ExitHere
End Function
Private Function LagerbestandAuslesen(ByVal ArtikelId As Long) As Long
Dim lngAnzahl As Long
On Error GoTo ErrHandler
'Scenario: hier kommt es zum Fehler
' Fehler simulieren:
Err.Raise vbObjectError + 1, "LagerbestandAuslesen", "Das ist nur eine Dummy-Fehler"
LagerbestandAuslesen = VorhandenerLagerBestand
ExitHere:
Exit Function
ErrHandler:
MsgBox "Fehler: " & Err.Number & ": " & Err.Description, vbCritical, "Fehler: " & Err.Number & " in LagerbestandAuslesen"
Resume ExitHere
End Function
@ekkehard: ich weiß, dass du das so nicht gemeint hast, ich wollte aber unbedingt verhindern, dass das jemand so verstehen könnte. ;)
mfg
Josef
Hallo Josef,
Hast Du dich verlaufen? ;)
ZitatMsgBox "Fehler: " & Err.Number & ": " & Err.Description, vbCritical, "Fehler: " & Err.Number & " in BestellMengeBerechnen"
Resume ExitHere
Immer noch besser als ein noch fataleres
On Error Resume Nextam Anfang der Prozeduren, was man ja auch oft genug sieht :o
Zitatich weiß, dass du das so nicht gemeint hast, ich wollte aber unbedingt verhindern, dass das jemand so verstehen könnte.
Danke, dass Du als einer, der über eine ordentliche Fehlerbehandlung sicher nicht mehr nachdenken muß, meine diesbezügliche Nachlässigkeit so ausführlich kommentierst hast.
gruss ekkehard
Hallo!
Im Prinzip ist das ein "On error Resume eine Stufe weiter oben".
Manchmal ist weniger mehr. ;)
Beispiel:
'Symbolisch für weiter Prozedurergebnisse o. ä.
Const MindestBestand As Long = 100
Const MaxLagerbestand As Long = 1000
Const BestehenderBedarf As Long = 50
Const VorhandenerLagerBestand As Long = 900
' Diese Prozedur zum Testen aufrufen:
Public Sub TesteBestellMengeBerechnen()
On Error GoTo ErrHandler
Dim Bestellmenge As Long
Bestellmenge = BestellMengeBerechnen(123, 100)
' Bestellung auslösen:
' ...
' Als Test-Ersatz eine Msgbox anzeigen:
MsgBox "Anzahl der zu bestellenden Artikel: " & Bestellmenge
' Diese Msgbox darf niemals erscheinen, wenn in den untergeordneten Prozeduren ein Fehler auftrat,
' da dann möglicherweise falsche Werte verwendet werden.
ExitHere:
Exit Sub
ErrHandler:
MsgBox "Fehler: " & Err.Number & ": " & Err.Description, vbCritical, "Fehler: " & Err.Number & " in TesteBestellMengeBerechnen"
Resume ExitHere
End Sub
Public Function BestellMengeBerechnen(ByVal ArtikelId As Long, ByVal NeueBedarfsMenge As Long) As Long
Dim Lagerbestand As Long
Dim Bedarf As Long
Dim RestMenge As Long
Lagerbestand = 123
Lagerbestand = LagerbestandAuslesen(ArtikelId)
Bedarf = BestehenderBedarf + NeueBedarfsMenge
RestMenge = Lagerbestand - Bedarf
If RestMenge >= MindestBestand Then
BestellMengeBerechnen = 0
Else
BestellMengeBerechnen = MaxLagerbestand - RestMenge
End If
End Function
Private Function LagerbestandAuslesen(ByVal ArtikelId As Long) As Long
Dim lngAnzahl As Long
'Scenario: hier kommt es zum Fehler
' Fehler simulieren:
Err.Raise vbObjectError + 1, "FeldAusLesen", "Das ist nur eine Dummy-Fehler"
LagerbestandAuslesen = VorhandenerLagerBestand
End FunctionDamit verliert man allerdings die "Entstehunggeschichte" des Fehlers. Das ist aber immer noch besser, als falsche Bestellungen zu erzeugen. ;)
ZitatHast Du dich verlaufen?
Ich lese hier regelmäßig mit. ;)
mfg
Josef
Hallo,
vielen Dank für die reichlichen Antworten. Ich habe mein Programm hier nur stark gekürzt eingestellt. Habe beim tippen ausversehen anstatt ! ein . hin gemacht. Ich habe nur diesen Teil gepostet, da nur dieser den Fehler verursacht. Wollte nur einmal probieren in der Tabelle einen Wert zu schreiben. Aber er macht es nicht einmal...
Werde jetzt aber gleich mal schauen, ob ich da mit Fehlermeldungen den Fehler finden kann.
Fehler, lag an der Standartwert einstellung in der Tabelle :-\ Die Environ("Username") funktioniert wohl nicht.
VIELEN DANK für die Hilfe zum Umgang bei der Fehlersuche
Hallo,
Die Funktion Environ("Username") ist ab Access2007 zur direkten Verwendung gesperrt.
Mann kann die Funktion in eine eigene Funktion auslagern und diese dann verwenden.