Supportnet Computer
Planet of Tech

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

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

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

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

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()

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

Antwort 8 von Climber

Der Fehler bezieht sich auf die 5.Zeile:
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


Antwort 10 von Climber

Hallo Teddy,

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

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

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

Antwort 14 von Teddy7

Ändern in:
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

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

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

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


Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: