Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Probleme in Runtime

Begonnen von imac12809, Februar 22, 2012, 15:43:53

⏪ vorheriges - nächstes ⏩

imac12809

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

DF6GL

Hallo,


RS![Bestellnummer]= 111
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Jonny

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

Beaker s.a.

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
hth
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Josef P.

#4
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

Beaker s.a.

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 Next
am 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
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Josef P.

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 Function


Damit 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

imac12809

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.

imac12809

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

MzKlMu

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.
Gruß Klaus