Hallo, mal ne Frage.
Ich habe einen Einsatzplaner geschrieben, in dem man durch mehrere Kalenderwochen klicken kann. Damit die Unterformulare wissen, ob sie in der aktuellen Kalenderwoche sind, lasse ich das ermitteln und in einem Textfeld [Text203] ausgeben. Wenn es sich um eine Kalenderwoche in der Vergangenheit handelt, gibt das Text203 eine "1" aus.
Nach dieser 1 prüft jedes Unterformular, ob es editierbar sein darf mit folgendem Code:
Sub Form_Current()
If Me.Text203 = 1 Then
Me.AllowEdits = False
Else
Me.AllowEdits = True
End If
End Sub
Nun kommt manchmal und aus unerklärlichen Gründen, wahrscheinlich wenn aktualisiert wird, die Fehlermeldung 13 und das Formular stürzt mit Karacho ab.
Woran könnte das liegen?
Carl
Hallo Carl,
Ich könnte mit vorstellen, dass das mit einem Wert = NULL im Textfeld
zusammenhängt. Versuche dies
If Nz(Me.Text203, Ersatzwert) = Ersatzwert Then
Den passenden Ersatzwert (1 oder 0) musst du entscheiden.
gruss ekkehard
@ekkehard
Was bei einem Vergleich mit Null rauskommt, sollte dir schon klar sein.
Ansonsten einfach testen.
Also die Zeichenkette "Ersatzwert"? Damit es Buchstaben werden?
Danke übrigens für die vielen intelligenten Tipps hier immer, es ist wirklich richtig gut!!
Carl
Hallo,
ZitatAlso die Zeichenkette "Ersatzwert"? Damit es Buchstaben werden?
??
"Ersatzwert" steht für diejenige Zahl, die den weiteren Ablauf gewährleistet, falls das Textfeld leer ist.
Und wie schon angedeutet, musst Du ja wissen, was in solchem Fall die richtige Zahl sein muss.
Ob es aber mit dem gezeigten Code zielführend ist, bezweifle ich im Moment noch.
Hallo!
Der Vergleich mit Null würde im gezeigten Beispiel kein Problem sein, da dann der Else-Zweig läuft.
Bei einem Fehler "Typen unverträglich" würde ich an erster Stelle die Datentypen prüfen. ;)
1 .. das ist ein Integer
Me.Text203.Value ... Datentyp kann ich von hier aus nicht erkennen.
Bei
If "a" = 1 Then
kommt es beispielsweise zum Laufzeitfehler 13 (Typen unverträglich).
mfg
Josef
Hallo,
Ja, sorry, Schnellschuss >:( .
gruss ekkehard
@Josef,
ich kenne die Lösung auch nicht, aber der Standard-Wert eines Controls ist Variant.
Einen Variant kann man mit jedem Basis Typen vergleichen.
@Carl
Da es nur manchmal vorkommt würde ich ein Fehlerhandling empfehlen, dass den Fehler dann sicher zum Vorschein bringt.
Prinzipiell führt jeder Fehler der an eine Event Prozedur weitergereicht wird, zu einem Absturz.
Uff, das wird schwierig, okay ich versuchs. Carl
Hallo Carl,
Noch'n Schnellschuss ;)
Zitatob sie in der aktuellen Kalenderwoche sind, lasse ich das ermitteln und in einem Textfeld [Text203] ausgeben
Kann es sein, dass der Fehler dabei schon auftaucht, und nicht erst in der
gezeigten Prozedur?
Bist du deinen Code mal im Einzelschritt-Modus durch gegangen?
gruss ekkehard
Ich kann das selbst aus eigener Kraft kaum erkennen und hatte noch nie eine Fehlersuche.
Momentan habe ich noch das Problem, dass die Meldung "kann keine weiteren Formulare öffnen" auftaucht. Ich vermute, ich habe das Formular überladen und suche nach einer grundsätzlicheren Lösung. Vermutlich muss ich die Sache ohnehin abgespeckter angehen, so dass der Fehler 13 dann auch egal ist.
Serverseitig habe ich unbegrenzt Kapazität. Es ist wohl eine Frage der Einstellung in der Datenbank.
Wahrscheinlich habe ich einen Fehler gemacht, den Klaus mal angemerkt hat. Ich habe zu viele Domwert-Felder verwendet und damit die Kiste ausgebremst, so dass nun "der Wurm drin" ist. Ursache für diesen Fehler ist, dass ich für die Anwender eine Oberfläche schaffen wollte, die sich möglichst wenig von der bisher genutzten Oberfläche unterscheidet, um die implizite Akzeptanz zu erhöhen.
Der Fehler 13 kommt vielleicht auch, weil ich die oben genannte Funktion 6*5 fach im selben Formular ausführen lasse. Vielleicht hat Access auch einfach zu viel davon.
carl
Zitat von: Carl am September 14, 2018, 17:06:48
Ich kann das selbst aus eigener Kraft kaum erkennen und hatte noch nie eine Fehlersuche
Google nach "VBA Errorhandling" und "VBA Debug"
Hier ein Link: https://www.vba-tutorial.de/fehler
Mit dem Thema musst du dich intensiv beschäftigen.
Ohne diese Grundlagen ist kein produktives entwickeln möglich.
Domänenfunktionen sollte man innerhalb von Abfragen nicht einsetzen - außer es gibt wirklich keine Alternative (Bei Updates hat Access einige Schwächen)
Lerne die Grundlagen von SQL, dann brauchst du sie nicht.
Hallo,
ZitatWahrscheinlich habe ich einen Fehler gemacht, den Klaus mal angemerkt hat.
wenn das noch das gleiche Datenmodell ist zu dem ich damals meine Anmerkungen gemacht habe, wird SQL nicht viel nutzen. Das ganze Tabellenkonstrukt ist mehr als zweifelhaft. Und daher muss das Ganze mehr oder weniger aufwendig programmiert werden, mit den damit einhergehenden Problemen.
Ich hab die domwert-Funktionen raus gemacht und das Formular abgespeckt und es läuft jetzt.
Carl