Sanokaahan mitä minä teen väärin. Tarkemmin sanottuna kyseessä on Access 2003 VBA koodi, joka on seuraavan lainen:
If (Me.Room_ID.Value <> Null) Then blaa blaa...
Eli, tarkoitus olisi tehdä tiettyjä juttujan kun kyseisessä kentässä on joku arvo. Nyt kuitenkin käy niin, ettei ohjelma ikinä mene tuonne Iffin sisään. Jos laitan breakpointin tuohon riviin ja raahaan kursorin sen päälle, kertoo se minulle että "Me.Room_ID.Value = 2". Aivan niinkun pitäisikin, mutta siltikään verailu ei toimi. Iffistä polkaistaan ohi niin että heilahtaa...
Null ei ilmeisesti toimi tuossa yhteydessä.
Mikä kentän arvo on silloin, kun siinä ei ole mitään? Käytä tätä arvoa vertailussa.
Moikka Marazo!
Testaa toi rakennelma vaikka siten, että annat jollein muutujalle arvon ennen tota IF...lausetta ja lisäät sen ehtoon. Eli siis:
Dim Myvalue As Variant MyValue = 1 If Me.Room_ID.Value <> Null or MyValue = 1 Then Beep blaa blaa...
Jos ei piippaa niin pistä virtaa päälle ja nappula kaakkoon
Jos ei vieläkään toimi niin objekti, jonka tapahtuma-aliohjelmaan koodisi liittyy, ei saa missään vaiheessa Focusta!
...viittaus objektiin... Room_ID.SetFocus...ja testaa
Private Sub Room_ID_GotFocus() Dim Myvalue As Variant MyValue = 1 If ID.Value <> Null or MyValue = 1 Then Beep 'blaa blaa... End if End Sub
PS. Tutki tää...
Laaksonen tuossa edellä jo totesi pääasian. Mikä objekti tuo Room_ID on, eli voiko se edes saada Null-arvoa? Ainakin VB:n puolella ainoastaan Variant-muuttujat voivat saada Null-arvon.
Heippa BadSource!
Muuttujat on takistettu... ja kuvittelisin, että Room_ID,llä viitataan sarkkeen "aktiiviseeen" kenttään...
Null voidaan Access'ssa sallia asetuksin kenttän "arvoksi"...
Huomasin, että muuttujat korjattu. =)
[ot]Voiko Access 2003:ssa viitata taulukkoon/sen sisältöön Me-muodolla?
Minulle tuo Access 2003 on liian hieno, sillä itse työskentelen Access 97 parissa, että käyttämäni kannat olisivat paremmin yhteensopivia siirrettäessä koneesta toiseen... Vanhat kannat saa konvertoitua uusiin, mutta uusia ei saa millään irveellä vanhempiin versioihin yhteensopiviksi.[/ot]
Heippa BadSource!
Ei suoraan, mutta aktiivisen Formin(Me.) kautta jos
taulu on formille raahattu joko "käsin" tai "koneella", jolloin KENTTÄ näkyy formilla objektina, jolla on 2003:ssa hieman enemmän event-mahdollisuuksia, kuin 97-versiossa...
ja takaisin alkuperäiseen kysymykseen Null-arvoa ei voi käyttää vertailuun!!!
Null-arvojen kanssa pelleiltäessä oikea vertailumuoto on tuo Marazo:nkin käyttämä Null-vertailu suluissa on jotain.
If (Me.Room_ID.Value <> Null) = True Then
Vertailu suoraan, ilman sulkuja, ei onnistu, mikä on VB:n ominaisuuksia...
Heippa BadSource!
Testasitko Access'ssa ton edellisen???
No ei se mitään,multakin jäi osin testaamatta, mutta jutska on joteskin näin...
Access'ssa:
IsNull Funktio
Tämä esimekki käyttää IsNull funktiota tutkimaan
sisältääkö muuttuja arvon Null.
Dim MyVar, MyCheck
MyCheck = IsNull(MyVar) ' Palauttaa arvon EPÄTOSI. False
MyVar = ""
MyCheck = IsNull(MyVar) ' Palauttaa arvon EPÄTOSI. False
MyVar = Null
MyCheck = IsNull(MyVar) ' Palauttaa arvon TOSI. True
Eli siis:
If IsNull(Me.Room_ID.Value) = False Then Beep
kieroa vai mitä...ja nappulat kaakkoon...
Puhun näköjään reikiä päähäni, sillä Null toimii juuri noin kuin Nea kirjoittaakin. Null on aina Null, eikä sitä voi normaaleilla vertailuoperaattoreilla vertailla.
Aina pitäisi ensin testata koodia, ennen kuin kirjoittaa sitä pelkän muistin varassa...
Aihe on jo aika vanha, joten et voi enää vastata siihen.