Discussion:
Feldinhalt auf NULL prüfen
(zu alt für eine Antwort)
Reinhard Schall
2006-07-24 13:24:39 UTC
Permalink
Hallo!

Warum gibt die MsgBox am Ende des Codeschnipsels true zurück?

Dim bolEnabled as Boolean
If Forms![frm_Angebote].Form![frm_UAngebote].[txtGerätebezeichnung].value = Null then
bolEnabled = false
else
bolEnabled=true
end if

msgbox bolEnabled

zu bolEnabled = true, wenn der Wert des in der Abfrage angesprochenen Feldes Null ist?

Im Direktfenster führt der Befehl:
msgbox Forms![frmA_Angebote].Form![frm3FürForm3_A_Grundgerät]![GG_Bezeichnung_Deu].value
zur Fehlermeldung: "Unzulässige Verwendung von Null!"

Was mache ich falsch? Hat jemand eine Idee?

Viele Grüße
Reinhard
Henry Habermacher [MVP Access]
2006-07-24 13:19:56 UTC
Permalink
Hallo Reinhard
Post by Reinhard Schall
Forms![frm_Angebote].Form![frm_UAngebote].[txtGerätebezeichnung].value
= Null then bolEnabled = false else
bolEnabled=true
end if
msgbox bolEnabled
zu bolEnabled = true, wenn der Wert des in der Abfrage angesprochenen Feldes Null ist?
Weil Du einen Feldinhalt nicht auf = NULL prüfen kannst. Das ist immer
falsch.

Verwende statt dessen

If Isnull(Forms![frm_Angebote].Form![frm_UAngebote].[txtGerätebezeichnung])
Then

oder

If Nz(Forms![frm_Angebote].Form![frm_UAngebote].[txtGerätebezeichnung], "")
= "" Then

HTH
Henry
--
Keine E-Mails auf Postings in NGs senden!
Don't send e-mails to postings in newsgroups!
KB: http://support.microsoft.com/default.aspx
FAQ: http://www.donkarl.com (neu mit Suchfunktion!)
OH: Online Hilfe von Microsoft Access (Taste F1)
Downloads: http://www.dbdev.org
Stefan Dase
2006-07-24 13:21:31 UTC
Permalink
Hallo Reinhard,
Post by Reinhard Schall
Forms![frm_Angebote].Form![frm_UAngebote].[txtGerätebezeichnung].value =
Null then (...)
Auf Null-Werte kannst du nicht mit Gleichheit prüfen, da diese nicht
definiert sind. Der Vergleich gibt immer Null als Ergebnis zurück, und
daher wird in einer If-Then-Else-Konstruktion immer der Else-Zweig
durchlaufen.

Du kannst die IsNull-Methode verwenden:

If IsNull(Forms![frm...usw...) Then

HTH,
Stefan
Reinhard Schall
2006-07-24 13:44:18 UTC
Permalink
Post by Reinhard Schall
Hallo!
Warum gibt die MsgBox am Ende des Codeschnipsels true zurück?
Dim bolEnabled as Boolean
If Forms![frm_Angebote].Form![frm_UAngebote].[txtGerätebezeichnung].value = Null then
bolEnabled = false
else
bolEnabled=true
end if
msgbox bolEnabled
zu bolEnabled = true, wenn der Wert des in der Abfrage angesprochenen Feldes Null ist?
msgbox Forms![frmA_Angebote].Form![frm3FürForm3_A_Grundgerät]![GG_Bezeichnung_Deu].value
zur Fehlermeldung: "Unzulässige Verwendung von Null!"
Was mache ich falsch? Hat jemand eine Idee?
Viele Grüße
Reinhard
Vielen Dank an Henry und Stefan,

ich werde es gleich auf If Isnull(..) umprogrammieren.

Viele Grüße
Reinhard
Wolfgang Kais
2006-07-25 10:09:28 UTC
Permalink
Hallo Reinhard.
Post by Reinhard Schall
Warum gibt die MsgBox am Ende des Codeschnipsels true zurück?
Dim bolEnabled as Boolean
If Forms![frm_Angebote].Form![frm_UAngebote].[txtGerätebezeichnung].value = Null then
bolEnabled = false
else
bolEnabled=true
end if
msgbox bolEnabled
zu bolEnabled = true, wenn der Wert des in der Abfrage angesprochenen Feldes Null ist?
msgbox
Forms![frmA_Angebote].Form![frm3FürForm3_A_Grundgerät]![GG_Bezeichnung_Deu].value
zur Fehlermeldung: "Unzulässige Verwendung von Null!"
Was mache ich falsch? Hat jemand eine Idee?
Vielen Dank an Henry und Stefan, ich werde es gleich auf If Isnull(..)
umprogrammieren.
Nur zur Info:
Wenn in VBA irgendein (Rechen- oder Vergleichs- ) Operator (außer "&")
- in Deinem Falle "=" - verwendet wird und einer der Operanden NULL ist,
ist das Ergebnis NULL.
Wenn NULL als Wahrheitswert interpretiert wird, ergibt es "Falsch".
--
Gruß,
Wolfgang
Henry Habermacher [MVP Access]
2006-07-25 12:58:21 UTC
Permalink
Hallo Wolfgan
Post by Wolfgang Kais
Wenn in VBA irgendein (Rechen- oder Vergleichs- ) Operator (außer
"&") - in Deinem Falle "=" - verwendet wird und einer der Operanden
NULL ist, ist das Ergebnis NULL.
Wenn NULL als Wahrheitswert interpretiert wird, ergibt es "Falsch".
Das ist falsch. Die Interpretation von Null als Wahrheitswert ergibt nicht
Falsch, sondern Null. Jeder Vergleich mit Null (sowohl vor oder nach dem =)
endet in einem Null-Ergebnis, also einfach nicht definiert.

Für's Direktfenster:
? Null = Null
Null
? Null = True
Null
? True = Null
Null
? Not(Null = True)
Null

Und wenn Deine Aussage stimmen würde, wäre:
? CBool(Null)
erlaubt. Ist es aber nicht, weil Null nicht als Wahrheitswert interpretiert
werden kann. Das gibt den klassischen Laufzeit-Fehler 94: "Invalid use of
Null".

Und dort schreibt dan die OH ganz klar: (c) Microsoft A2003: "Null is a
Variant subtype used to indicate that a data item contains no valid data."

Dass das If .. Then .. Else Konstrukt in den Else Zweig geht, ist vorallem
darin begründet, dass der If-Zweig nur durchlaufen wird, wenn der Vergleich
True gibt, nicht weil der Not (Vergleich) False ist. Der Else Zweig würde
auch durchlaufen, wenn Du auf Not(Variable = Null) prüfen würdest, weil
dieses Ergebnis ebenfalls Null (nicht definiert) ist und daher der True
Zweig nicht durchlaufen wird, sondern der Else Zweig:

? Not(Null = True)
Null

Folgendes Beispiel macht's anschaulicher. Würde nämlich Deine Aussage
stimmen, dann müsste der ElseIf Zweig, nicht der Else Zweig durchlaufen
werden:

Public Function testIfThenNullElse(vergleiche As Variant)
If vergleiche = True Then
testIfThenNullElse = "True"
ElseIf vergleiche = False Then
testIfThenNullElse = "False"
Else
testIfThenNullElse = "Weder True Noch False"
End If
End Function

Null wird weder in den True, noch in den False Zweig verzweigen, sondern in
den Else Zweig.

Beispiele:
?testIfThenNullElse(True)
True

?testIfThenNullElse(False)
False

?testIfThenNullElse(Null)
Weder True Noch False

?testIfThenNullElse(Not Null)
Weder True Noch False


Hoffe, das ist nun damit geklärt.

Gruss
Henry
--
Keine E-Mails auf Postings in NGs senden!
Don't send e-mails to postings in newsgroups!
KB: http://support.microsoft.com/default.aspx
FAQ: http://www.donkarl.com (neu mit Suchfunktion!)
OH: Online Hilfe von Microsoft Access (Taste F1)
Downloads: http://www.dbdev.org
Wolfgang Kais
2006-07-25 23:16:21 UTC
Permalink
Hallo Henry.

"Henry Habermacher [MVP Access]" schrieb:
[schipp]
Post by Henry Habermacher [MVP Access]
Hoffe, das ist nun damit geklärt.
Gruss
Henry
Was soll man dazu noch sagen...
Mein letzter Satz war tatsächlich nicht True.
--
Gruß zurück.
Wolfgang
Klaus Oberdalhoff
2006-07-24 16:23:52 UTC
Permalink
Hi,
Post by Reinhard Schall
Was mache ich falsch? Hat jemand eine Idee?
ich persönlich habe mir angewöhnt, einen Feldinhalt wie folgt auf leer zu
prüfen:

If len(trim(Nz(Me!DeinFeldname))) = 0 Then
' Das Feld ist leer
Else
' Das Feld ist garantiert NICHT leer
End If
--
mfg

Klaus Oberdalhoff ***@gmx.de

Ich beantworte keine NG-Fragen und -Nachfragen per Mail!
Newbie-Info: http://www.doerbandt.de/Access/Newbie.htm
KnowHow-mdb und andere Beispiele: http://www.freeaccess.de
Sofern Access 200x bitte beachten:
http://www.freeaccess.de/MS-Access-Artikel.asp?ID=99

Ich unterstütze PASS Deutschland e.V. (http://www.sqlpass.de)
Loading...