[VB] Testen op null

Pagina: 1
Acties:

  • BestTested!
  • Registratie: Oktober 2003
  • Laatst online: 19:57
Ik lees gegevens uit een database die ik vervolgens op mijn scherm willen tonen. Normaal gesproken niet zo'n probleem.
Sommige van die velden in de database mogen null zijn, maar als ik vervolgens ga testen of ze null zijn krijg ik 'rare' uitkomsten.
Hieronder wat probeerselen:
code:
1
2
3
4
5
If IsNull(callinfo!pro)     Then MsgBox "IsNull"
If callinfo!pro = Null      Then MsgBox "= null"
If callinfo!pro Is Nothing  Then MsgBox "Is Nothing"
If callinfo!pro = ""        Then MsgBox "%leeg"
MsgBox callinfo!pro

Ik krijg nu de foutmelding "Invalid use of null" op de laatste regel, maar geen andere msgbox van te voren. En wanneer ik in debug-mode dan de waarde bekijk is deze inderdaad null

Zet ik nu breakpoints voor elke regel, dan is de waarde van (callinfo!pro) wel een geldige String tijdens de eerste regel, maar krijg ik toch een msgbox "IsNull". Vervolgens springt de waarden naar null en krijg ik weer een melding op de laatste regel "Invalid use of null"

Dus met breakpoints:
code:
1
2
3
4
5
If IsNull(callinfo!pro)     Then MsgBox "IsNull"      'Waarde is hier geldige String, maar toch msgbox
If callinfo!pro = Null      Then MsgBox "= null"      'Waarde is null, geen msgbox
If callinfo!pro Is Nothing  Then MsgBox "Is Nothing"  'Waarde is null, geen msgbox
If callinfo!pro = ""        Then MsgBox "%leeg"       'Waarde is null, geen msgbox
MsgBox callinfo!pro          'Error: Invalid use of null


Op welke manier moet ik nou testen of de waarde null is. Ik had al gekeken naar de verschillen tussen Nothing, Null en Empty maar ik kom er niet uit.

Het gaat hier om VB6.0, IsDBNull kan alleen in .net gebruikt worden.

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 22:20

RayNbow

Kirika <3

code:
1
If callinfo!pro = Null      Then MsgBox "= null"      'Waarde is null, geen msgbox

Werkt iig niet. Expressies met Null erin evalueert altijd naar Null, en dus naar False.

Analoog werken callinfo!pro Is Nothing en callinfo!pro = "" dus ook niet. De enige manier om dus te controleren of iets Null is, is met de IsNull() functie.

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


  • Haploid
  • Registratie: Maart 2002
  • Laatst online: 29-12-2021

Haploid

Doh!

Tja, Visual Basic doet wel 'ns rare dingen. In dit geval gok ik dat het ligt aan de constructie die je gebruikt om de waarde van het veld op te halen.
Eigenlijk is de volledige aanroep:
code:
1
x= callinfo.Fields("pro").Value

Maar omdat Fields de zgn default property is van een recordset, mag je dat woord weglaten, en omdat Value de default property van een Field is, mag die ook weg worden gelaten. Visual Basic kiest dan telkens of je het object bedoelt (bijv. de Field) of de default property ervan (dus z'n Value).
code:
1
x = callinfo("pro")

En dat mag je nog omvormen naar de constructie die jij gebruikt, dus:
code:
1
x = callinfo!pro

Het resultaat van callinfo!pro kan dus ofwel een Field object zijn, ofwel een Variant gevuld met de waarde uit de Value property van dat Field. Ik zou dit soort gevallen niet aan VB overlaten, maar gewoon een paar letters meer tikken om zeker te weten welk van de twee het wordt. Probeer het zo eens:
code:
1
2
3
4
5
If IsNull(callinfo("pro").Value) Then 
    MsgBox "IsNull"
Else
    MsgBox callinfo("pro").Value
End If

Hey, I came here to be drugged, electrocuted and probed, not insulted.


  • BestTested!
  • Registratie: Oktober 2003
  • Laatst online: 19:57
Bedankt Haploid, dat is inderdaad het struikelblok.
Ha, had mijn leraar het toch fout met betrekking tot luie programmeurs :P