Mikä ois paras tapa tarkistaa VB 6:ssa, että onko syötettyä päivämäärää olemassa?
Eli jos syötetään teksti kenttään esim. 30.2.2008, niin sellaista päivää ei edes ole olemassa. Niin tuon syötteen vois tarkistaa, että syötetty päivämäärä todellakin on olemassa, ennen päivämäärän käyttöä.
-JuGe
Kaikki vuodethan sekä kuukaudet 1-12 ovat luonnollisesti olemassa. Päivien kanssa kannattanee menetellä siten, että tallentaa taulukkoon kuukausien päivien määrät ja vertailee annettua kuukautta vastaavaa määrää annetun päivän kanssa. Helmikuulle joudutaan sitten vielä erikseen tekemään tarkistus karkauspäivien suhteen. Hommahan menee siis siten, että neljällä jaolliset vuodet ovat karkausvuosia, paitsi että sadalla jaolliset eivät ole, elleivät ne ole jaollisia myös 400:lla. Lisäksi vuosi 4000 ei ole karkausvuosi.
Eikö tuohon ole olemassa mitään helpompaa ratkaisua?
VB:n funktiot kuten DateAdd("d", 30, Paiva) osaa lisätä paiva muuttujaan 30 päivää siten, että se ei anna virheellisiä päivämääriä. Eli ne päivät täytyy olla taulukotu tuonne syövereihin valmiiksi. Miten noita taulukoita voisi hyödyntää?
-JuGe
Kato onko näistä apua: https://www.ohjelmointiputka.net/oppaat/opas.
Tuoltahan tuommoinen IsDate()-funktio näkyykin löytyvän.
Tuo isDate()-funktio on juuri sitä mitä etsin. Yritin ettiä vastaavaa mdsn-librarysta, mutta tuli vastaan vaan DateDiff ja tuo DateAdd funkkarit. Yritin myös etsiä täältä putkasta jellpiä, mutta tuo oikeiden hakusanojen käyttö on liian tekniikka laji... :)
Kiitoksia kovasti molemmille avusta. Tästä on taas hyvä jatkaa.
-JuGe
Kannattaa käyttää hyväksi VB:n Date-muuttujatyyppiä, se voi sisältää ainoastaan olemassaolevan päivämäärän. Muodoltaan se on sama kuin Double, se vain on asetettu toimimaan erikoisemmalla tavalla: desimaaliosat kuvaavat osaa päivästä, esim. 0,5 = kello 12:00. Tai 0,25 = 6:00, 0,75 = 18:00 - päivä sitten vastaa siis täyttä ykköstä.
Tältä pohjalta:
Dim dtmDay As Date ' siirry seuraavaan päivään dtmDay = Now + 1
Ja myös:
' huomenna kello 12 dtmDay = Int(Now) + 1.5
Voit varmistaa Debug.Printillä tai MsgBoxilla :) Voit myös kopioida Daten arvon suoraan Doubleen, niin näet mikä arvo Datessa "oikeasti" on.
Aihe on jo aika vanha, joten et voi enää vastata siihen.