今更ながら、VBの落とし穴

未だにVB5やVB6での開発をやっているんですが
その中で最近気がついた事をちょっと書いてみます。


・IsDateの罠
日付チェックに便利なのでIsDate関数をよく使います。
でも、テスターさんから「変な日付が入る」と苦情が入りました。
「そんなバカな」と試してみると確かに入る。
原因はなんてことは無い、IsDateの仕様。


通常は「2008/03/10」とか入力しますが、テスターさんは
「0031/01/99」と入力したんです。
「0031/01/99」はIsDate的にはOKとなります。
それはなぜかといいますと、IsDateでは「31/01/99」と判断され、
アメリカとかで年を最後に持ってくる記述法で行くとOKだからです。
Format("0031/01/99", "yyyy/mm/dd")は「1999/01/31」となることからもわかりま
す。


ということで、IsDateでは危険だったので最初からチェック関数を作りましたとさ。



・Valの謎
誰かが作ったとあるPGを見ていたら、If条件でこんなのがありました。


If Val(Hoge) = Format(Hoge2, "000") Then


「数値と文字だから比較になんないんじゃね?」なんて思ってたけど
HogeとHoge2に同じ値が来るとTrueになります。
なんかなーなんて思ったけど、Valの説明には
「指定した文字列に含まれる数値を適切なデータ型に変換して返します」
とあるので、Formatした文字列にあうように変換され
一致となるということなんでしょうね。


なんか、いまいち納得できないけどPGが変に動くわけじゃないし
俺の作ったPGじゃないからいいや。