Supportnet / Forum / Datenbanken
Laufzeitfehler 94
Frage
Hallo,
befasse mich seit kurzem auch mit Access und es treten die ersten Probleme auf.
Im Rahmen der Erstellung einer Auftragsverwaltung bin ich am Eingeben von Artikeln mit Nr. und Preisen u.s.w.;
Dazu nutze ich ein vorgefertigtes Formular in dem auch auf Lagerbestände zurückgegriffen wird in Form einer globalen Funktion. Seit ich meine eigenen Artikel dort eingebe, zeigt mir das Formular beim Öffnen diesen Laufzeitfehler "ungültige Verwendung von NULL" an.
Wie kann ich diese Funktion umgehen bzw. ausschalten zumal die Lagerbestände für mich unrelevant sind.
Für zweckdienliche Hinweise meinen Dank im Voraus.
Wolfgang
Antwort 1 von Teddy7
Hallo Wolfgang !
Das hört sich so an als würde irgendwo mit einem Wert gerechnet der normalerweise numeric wäre, aber nicht gefüllt ist. NULL ist nicht 0 sondern nicht vorhanden.
Hast Du vielleicht neue Artikel angelegt und den Anfangsbestand nicht auf 0 gesetzt sondern nicht ausgefüllt ?
Lösung: Entweder Tabelle überarbeiten und NULL-Werte in 0-Werte ändern, oder die Funktion ergänzen um eine Abfrage
If IsNull(Bestandsfeld) then
Bestandsfeld = 0
end if
Gruß
Teddy
Das hört sich so an als würde irgendwo mit einem Wert gerechnet der normalerweise numeric wäre, aber nicht gefüllt ist. NULL ist nicht 0 sondern nicht vorhanden.
Hast Du vielleicht neue Artikel angelegt und den Anfangsbestand nicht auf 0 gesetzt sondern nicht ausgefüllt ?
Lösung: Entweder Tabelle überarbeiten und NULL-Werte in 0-Werte ändern, oder die Funktion ergänzen um eine Abfrage
If IsNull(Bestandsfeld) then
Bestandsfeld = 0
end if
Gruß
Teddy
Antwort 2 von Climber
Danke für Deine schnelle Reaktion
Es hat leider nicht geklappt.
Nach meinem Verständnis dient die globale Funktion nur zum Überwachen von weiteren Bestandteilen der Auftragsverwaltung wie Bestellwesen; Warenein-und -ausgang;usw.
Bestände werden bei der Eingabe der Artikel nicht berücksichtigt und finden sich erst wieder bei den Bestellungen.
Vieleicht hilft der subs code weiter:
Function Bestand(Artikelnr$)
Dim Ein&, Aus&
Bestand = 0
If IsNull(Artikelnr$) Or Trim$(Artikelnr$) = "" Then Exit Function
Ein = DSum("[Eingang]", "Lager/Auftrag", "[ArtikelNr]= " & Artikelnr$ & "")
Aus = DSum("[Ausgang]", "Lager/Auftrag", "[ArtikelNr]= " & Artikelnr$ & "")
Bestand = Ein - Aus
End Function
Es hat leider nicht geklappt.
Nach meinem Verständnis dient die globale Funktion nur zum Überwachen von weiteren Bestandteilen der Auftragsverwaltung wie Bestellwesen; Warenein-und -ausgang;usw.
Bestände werden bei der Eingabe der Artikel nicht berücksichtigt und finden sich erst wieder bei den Bestellungen.
Vieleicht hilft der subs code weiter:
Function Bestand(Artikelnr$)
Dim Ein&, Aus&
Bestand = 0
If IsNull(Artikelnr$) Or Trim$(Artikelnr$) = "" Then Exit Function
Ein = DSum("[Eingang]", "Lager/Auftrag", "[ArtikelNr]= " & Artikelnr$ & "")
Aus = DSum("[Ausgang]", "Lager/Auftrag", "[ArtikelNr]= " & Artikelnr$ & "")
Bestand = Ein - Aus
End Function
Antwort 3 von Teddy7
Welche Informationen werden denn auf Deinem Formular angezeigt ?
Wenn da z.B. ein Feld ist, in dem der Bestand der ArtikelNr angezeigt wird und dieser Bestand über die obige Function ermittelt wird, dann könnte der Fehler darin liegen, daß die Tabellenfelder [Eingang] und/oder [Ausgang] nicht gefüllt sind.
Die Funktion dsum ermittelt nämlich hier z.B. die Summe der Daten im Feld [Eingang] in der Tabelle oder Abfrage "Lager/Auftrag" für alle Sätze die im Feld [ArtikelNr] den Wert Artikelnr$ enthalten.
Gruß
Teddy
Wenn da z.B. ein Feld ist, in dem der Bestand der ArtikelNr angezeigt wird und dieser Bestand über die obige Function ermittelt wird, dann könnte der Fehler darin liegen, daß die Tabellenfelder [Eingang] und/oder [Ausgang] nicht gefüllt sind.
Die Funktion dsum ermittelt nämlich hier z.B. die Summe der Daten im Feld [Eingang] in der Tabelle oder Abfrage "Lager/Auftrag" für alle Sätze die im Feld [ArtikelNr] den Wert Artikelnr$ enthalten.
Gruß
Teddy
Antwort 4 von Teddy7
Wenn die Fehlermeldung kommt, hast Du dann einen Button auf dem testen oder debuggen steht ? Dann drück den doch mal. Es wird dann die Code-Zeile angezeigt, in der der Fehler auftritt.
Poste diese Zeile dann mal hier.
Gruß
Teddy
Poste diese Zeile dann mal hier.
Gruß
Teddy
Antwort 5 von Climber
Die Fehlermeldung erscheint beim öffnen des Formulars und nach dem debuggen erhalte ich folgendes Skript:
Function Bestand(Artikelnr$)
Dim Ein&, Aus&
Bestand = 0
If IsNull(Artikelnr$) Or Trim$(Artikelnr$) = "" Then Exit Function
Ein = DSum("[Eingang]", "Lager/Auftrag", "[ArtikelNr]= " & Artikelnr$ & "")
Aus = DSum("[Ausgang]", "Lager/Auftrag", "[ArtikelNr]= " & Artikelnr$ & "")
Bestand = Ein - Aus
End Function
Function Bestand2(Artikelnr$)
Dim Ein&, Aus&, W$
Bestand2 = 0
If IsNull(Artikelnr$) Or Trim$(Artikelnr$) = "" Then Exit Function
W$ = "[ArtikelNr]= " & Artikelnr$ & ""
Ein = DSum("[Eingang]", "Lager/Auftrag", W$)
W$ = W$ + " and [Lieferschein]= Yes and [AusgeliefertAm]= Null"
Aus = DSum("[Ausgang]", "Lager/Auftrag", W$)
Bestand2 = Ein - Aus
End Function
Function Bestand3(Artikelnr$)
Bestand3 = 0
If IsNull(Artikelnr$) Or Trim$(Artikelnr$) = "" Then Exit Function
Bestand3 = DLookup("[Bestand]", "Lager/Auftrag", "[ArtikelNr]= " & Artikelnr$ & "")
End Function
Function Fertig()
Function Bestand(Artikelnr$)
Dim Ein&, Aus&
Bestand = 0
If IsNull(Artikelnr$) Or Trim$(Artikelnr$) = "" Then Exit Function
Ein = DSum("[Eingang]", "Lager/Auftrag", "[ArtikelNr]= " & Artikelnr$ & "")
Aus = DSum("[Ausgang]", "Lager/Auftrag", "[ArtikelNr]= " & Artikelnr$ & "")
Bestand = Ein - Aus
End Function
Function Bestand2(Artikelnr$)
Dim Ein&, Aus&, W$
Bestand2 = 0
If IsNull(Artikelnr$) Or Trim$(Artikelnr$) = "" Then Exit Function
W$ = "[ArtikelNr]= " & Artikelnr$ & ""
Ein = DSum("[Eingang]", "Lager/Auftrag", W$)
W$ = W$ + " and [Lieferschein]= Yes and [AusgeliefertAm]= Null"
Aus = DSum("[Ausgang]", "Lager/Auftrag", W$)
Bestand2 = Ein - Aus
End Function
Function Bestand3(Artikelnr$)
Bestand3 = 0
If IsNull(Artikelnr$) Or Trim$(Artikelnr$) = "" Then Exit Function
Bestand3 = DLookup("[Bestand]", "Lager/Auftrag", "[ArtikelNr]= " & Artikelnr$ & "")
End Function
Function Fertig()
Antwort 6 von Teddy7
und auf welcher dieser Zeilen steht der Cursor nach dem Fehler ?
Antwort 7 von Marie
Also wenn das Formular beim Öffnen die Fehlermeldung bringt könnte es vielleicht sein, dass irgendwo in der Tabelle ein ungültiger Wert enthalten ist und eingelesen wird?
Mach mal eine TestDB und leere alle Tabellen und öffne das Formular nochmal
Hm, weiss nicht ob ich da richtig liege, aber ich hatte mal was ähnliches, was nicht im Code, sondern an falschen Eingaben gelegen hat.
Im übrigen würde ich die Funktion Nz verwenden, um Null oder eine leere Zeichenfolge (" ") zurückzugeben.
Gruß Marie
Mach mal eine TestDB und leere alle Tabellen und öffne das Formular nochmal
Hm, weiss nicht ob ich da richtig liege, aber ich hatte mal was ähnliches, was nicht im Code, sondern an falschen Eingaben gelegen hat.
Im übrigen würde ich die Funktion Nz verwenden, um Null oder eine leere Zeichenfolge (" ") zurückzugeben.
Gruß Marie
Antwort 8 von Climber
Der Fehler bezieht sich auf die 5.Zeile:
Ein = DSum("[Eingang]", "Lager/Auftrag", "[ArtikelNr]= " & Artikelnr$ & "")
Ein = DSum("[Eingang]", "Lager/Auftrag", "[ArtikelNr]= " & Artikelnr$ & "")
Antwort 9 von Teddy7
Hallo Wolfgang !
Dann gibt es ja nur zwei Felder, die die Feherursache sein können: [Eingang] oder [ArtikelNr] bzw. Artikelnr$.
Wenn der Fehler auftritt und Du debuggen gedrückt hast kannst Du mit dem Cursor auf diese Felder fahren (nicht klicken nur ´draufstellen). Dann wird der derzeitige Wert der Felder angezeigt.
Mögliche Fehlerursachen (soweit das mit Ferndiagnose und Kaffeesatzlesen möglich ist):
1) Das Feld Artikelnr$ ist nicht gefüllt.
---dieses Feld ist ein Arbeitsfeld oder ein Feld im Formular, in dem die ArtikelNr steht, die bearbeitet werden soll.
2) [ArtikelNr] nicht gefüllt.
------das ist ein Feld im Datensatz der Tabelle "Lager/Auftrag". Dann hat das Programm keinen Datensatz für die ArtikelNr im Feld Artikelnr$ gefunden.
Also in diesem Feld mal die Tabelle überprüfen, ob die ArtikelNr, die Du im Feld Artikelnr$ angezeigt bekommst, vorhanden ist.
3) [Eingang] ist nicht gefüllt.
------das Feld [Eingang] gehört zur Tabelle "Lager/Auftrag". Durch anzeigen der Tabelle kannst Du ziemlich schnell feststellen, ob in den von Dir angelegten Artikeln im Feld Eingang nichts steht. (Oder ob der Datensatz garnicht existiert).
Fazit:
Wenn der Datensatz zum Artikel existiert mußt Du entweder den Eingang von 0 erfassen oder die Zeile 5 (und6) nicht ausführen(siehe unten).
Wahrscheinlicher ist jedoch, daß dieser Datensatz in einer routine angelegt wird, die Du bei Deinen Artikeln nicht durchläufst, und deshalb der Datensatz nicht existiert.
Dann darf für Deine Artikel die Funktion DSum nicht ausgeführt werden. Dazu wäre es am einfachsten, wen Deine Artikel in einem Nummernkreis zu identifizieren wären - also z.B.:
if Artikelnr$ >= 100 and <= 200 then
Ein = 0
else
Ein = DSum(.....
end if.
Das gleiche gilt dann natürlich auch für die nächste Zeile Aus = .....
Gruß
Teddy
Dann gibt es ja nur zwei Felder, die die Feherursache sein können: [Eingang] oder [ArtikelNr] bzw. Artikelnr$.
Wenn der Fehler auftritt und Du debuggen gedrückt hast kannst Du mit dem Cursor auf diese Felder fahren (nicht klicken nur ´draufstellen). Dann wird der derzeitige Wert der Felder angezeigt.
Mögliche Fehlerursachen (soweit das mit Ferndiagnose und Kaffeesatzlesen möglich ist):
1) Das Feld Artikelnr$ ist nicht gefüllt.
---dieses Feld ist ein Arbeitsfeld oder ein Feld im Formular, in dem die ArtikelNr steht, die bearbeitet werden soll.
2) [ArtikelNr] nicht gefüllt.
------das ist ein Feld im Datensatz der Tabelle "Lager/Auftrag". Dann hat das Programm keinen Datensatz für die ArtikelNr im Feld Artikelnr$ gefunden.
Also in diesem Feld mal die Tabelle überprüfen, ob die ArtikelNr, die Du im Feld Artikelnr$ angezeigt bekommst, vorhanden ist.
3) [Eingang] ist nicht gefüllt.
------das Feld [Eingang] gehört zur Tabelle "Lager/Auftrag". Durch anzeigen der Tabelle kannst Du ziemlich schnell feststellen, ob in den von Dir angelegten Artikeln im Feld Eingang nichts steht. (Oder ob der Datensatz garnicht existiert).
Fazit:
Wenn der Datensatz zum Artikel existiert mußt Du entweder den Eingang von 0 erfassen oder die Zeile 5 (und6) nicht ausführen(siehe unten).
Wahrscheinlicher ist jedoch, daß dieser Datensatz in einer routine angelegt wird, die Du bei Deinen Artikeln nicht durchläufst, und deshalb der Datensatz nicht existiert.
Dann darf für Deine Artikel die Funktion DSum nicht ausgeführt werden. Dazu wäre es am einfachsten, wen Deine Artikel in einem Nummernkreis zu identifizieren wären - also z.B.:
if Artikelnr$ >= 100 and <= 200 then
Ein = 0
else
Ein = DSum(.....
end if.
Das gleiche gilt dann natürlich auch für die nächste Zeile Aus = .....
Gruß
Teddy
Antwort 10 von Climber
Hallo Teddy,
Danke für die Info, werde morgen das ganze ausprobieren und Nachricht geben;
sieht erfolgversprechend aus.
Danke für die Info, werde morgen das ganze ausprobieren und Nachricht geben;
sieht erfolgversprechend aus.
Antwort 11 von Marie
und? Fehler weg??
Gruß Marie
Gruß Marie
Antwort 12 von climber
Hallo Marie hallo Teddy,
Der Fehler wurde sicher nicht behoben aber ausgeschaltet mit dem letzten Hinweis vom Teddy.
Damit kann ich erstmal Leben,
Danke dafür
Gruß Wolfgang
Der Fehler wurde sicher nicht behoben aber ausgeschaltet mit dem letzten Hinweis vom Teddy.
Damit kann ich erstmal Leben,
Danke dafür
Gruß Wolfgang
Antwort 13 von climber
Hallo Teddy,
zu früh gefreut.
jetzt wird gemeckert über einen Syntaxfehler in folgender Zeile:(rot)
if Artikelnr$ >= 100 and <= 200 then
und bezieht sich auf die gelbe Zeile:
Function Bestand(Artikelnr$)
Gruß Wolfgang
zu früh gefreut.
jetzt wird gemeckert über einen Syntaxfehler in folgender Zeile:(rot)
if Artikelnr$ >= 100 and <= 200 then
und bezieht sich auf die gelbe Zeile:
Function Bestand(Artikelnr$)
Gruß Wolfgang
Antwort 14 von Teddy7
Ändern in:
if Artikelnr$ >= 100 and Artikelnr$ <= 200 then
Keine Panik - das kriegen wir schon hin.
Gruß
Teddy
if Artikelnr$ >= 100 and Artikelnr$ <= 200 then
Keine Panik - das kriegen wir schon hin.
Gruß
Teddy
Antwort 15 von climber
Hallo Tddy,
diesmal kommt die Meldung
Else ohne If
Gruß Wolfgang
diesmal kommt die Meldung
Else ohne If
Gruß Wolfgang
Antwort 16 von Teddy7
Hallo Wolfgang !
WO ? Bei dieser Abfrage ?
if Artikelnr$ >= 100 and Artikelnr$ <= 200 then
Ein = 0
else
Ein = DSum(.....
end if
Steht vielleicht hinter end if noch ein Punkt ? (hatte ich oben falsch gepostet).
Gruß
Teddy
WO ? Bei dieser Abfrage ?
if Artikelnr$ >= 100 and Artikelnr$ <= 200 then
Ein = 0
else
Ein = DSum(.....
end if
Steht vielleicht hinter end if noch ein Punkt ? (hatte ich oben falsch gepostet).
Gruß
Teddy
Antwort 17 von climber
Hallo Teddy,
Ja bei dieser Abfrage und Nein
es steht kein Punkt
PS: habe ebend dieses Formular geöffnet und es funktioniert unter Vorbehalt:
Wo normalerweise der Bestand angezeigt wird steht jetzt "#Name?"(ist aber nicht das Problem)
die Änderung wikt sich vielmehr auf ein Unterformular "Bestellung" aus mit der Meldung "Fehler beim kompilieren:Else ohne If"und bezieht sich wieder auf die Funktion Bestand (Artikelnr$) und das Wort Else ist farblich hervorgehoben
Gruß Wolfgang
Ja bei dieser Abfrage und Nein
es steht kein Punkt
PS: habe ebend dieses Formular geöffnet und es funktioniert unter Vorbehalt:
Wo normalerweise der Bestand angezeigt wird steht jetzt "#Name?"(ist aber nicht das Problem)
die Änderung wikt sich vielmehr auf ein Unterformular "Bestellung" aus mit der Meldung "Fehler beim kompilieren:Else ohne If"und bezieht sich wieder auf die Funktion Bestand (Artikelnr$) und das Wort Else ist farblich hervorgehoben
Gruß Wolfgang
Antwort 18 von Teddy7
Hallo Wolfgang !
Meine Kristallkugel zeigt nur Nebel.
Eine Möglichkeit wäre noch, daß die Ursache in der vorangehenden Zeile liegt.
Ist das noch
If IsNull(Artikelnr$) Or Trim$(Artikelnr$) = "" Then Exit Function
dann ersetze diese Zeile mal durch
If IsNull(Artikelnr$) Or Trim$(Artikelnr$) = "" Then
Exit Function
end if
Wenn´s dann immer noch nicht klappt poste mal die komplatte Bestand-Function mit Angabe der Fehlerzeile.
Gruß
Teddy
Meine Kristallkugel zeigt nur Nebel.
Eine Möglichkeit wäre noch, daß die Ursache in der vorangehenden Zeile liegt.
Ist das noch
If IsNull(Artikelnr$) Or Trim$(Artikelnr$) = "" Then Exit Function
dann ersetze diese Zeile mal durch
If IsNull(Artikelnr$) Or Trim$(Artikelnr$) = "" Then
Exit Function
end if
Wenn´s dann immer noch nicht klappt poste mal die komplatte Bestand-Function mit Angabe der Fehlerzeile.
Gruß
Teddy

