ある日のAccessによるプログラム開発 単体テストにて。
どうしても机上でわからないバグが発生。
===========================
Public Sub test()
Dim intNum As Integer
intNum = 999 / 10
Debug.Print intNum
End Sub
===========================
ステップ実行してみて驚愕の事実。。
下のプログラムを実行すると、当然 99のはずだと思った。
JavaやC言語ならば、 999 / 10 は 恐らく doubleなど包含するデータ型に変換されて計算され、最後に左辺に代入されるときに、然るべきデータ型(今回はinteger)にキャストされるはず。。
しかし、Accessが返した答えは なんと 「100」。
Accessのバグだぁ!!と思って調べてみると、例によって仕様らしい。
http://office.microsoft.com/ja-jp/access-help/HA001229018.aspx
超抜粋
【データ型変換関数】
CInt 整数型 (Integer) -32,768 ~ 32,767。小数点以下は四捨五入されます。
integer型へのキャスト処理は四捨五入するのが仕様だということらしい。
恐ろしい。
で、対処としては、これでいいらしい。
intNum = int(999 / 10)
気を付けようと、ものすごく思った。
2012年5月31日木曜日
2012年5月29日火曜日
VB.netで、現在の年月日時分秒(ミリ秒まで)を取得する方法
イメージとしては、こんな感じで取得したかった。
「2012/05/17 16:03:36.086」
少し調べればわかることですが、少し試行錯誤したので、メモメモ。
ログを出力するときとか、定型書式になりそうです。
Dim dtNow As DateTime = DateTime.Now
Dim strOutString As String = dtNow.ToString("yyyy/MM/dd HH:mm:ss") & "." & dtNow.Millisecond.ToString.PadLeft(3, "0"c)
「2012/05/17 16:03:36.086」
少し調べればわかることですが、少し試行錯誤したので、メモメモ。
ログを出力するときとか、定型書式になりそうです。
Dim dtNow As DateTime = DateTime.Now
Dim strOutString As String = dtNow.ToString("yyyy/MM/dd HH:mm:ss") & "." & dtNow.Millisecond.ToString.PadLeft(3, "0"c)
2012年5月28日月曜日
複数のODPをインストールした環境において、特定のバージョンのODPを使用したいときの設定
VB.netを使用して、Oracleにアクセスする場合、ODPを使用することが多いと思われます。
複数のODPをインストールした環境において、特定のバージョンのODPを使用したいときの設定について記載します。
ODP.NET
(Oracle Data Provider for .NET Microsoft .NET環境からOracleデータベースへネイティブに接続可能なミドルウェア)
結論から書くと、以下の2点を対処すれば解決します。
①パスの設定を目的のバージョンのODPに修正して、
②VB.netで参照するライブラリの参照設定を①と同じにする。
具体的には、
②は文字通りなので、割愛。
①については、少々手作業が発生するので説明。
パスの現在の設定を以下の方法で確認します。
Pathを設定する
http://blog.cnu.jp/2009/11/06/windows-7-path/
【確認結果の例】
C:\app\username\product\11.2.0\client_1\bin;C:\app\username\product\11.1.0\client_1\bin;C:\Program Files\Common Files\Microsoft Shared\Windows Live;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\W~(以下略)
上記の場合、以下の2つのバージョンのODPがインストールされていることになります。
「C:\app\username\product\11.2.0\client_1\bin;」
「C:\app\username\product\11.1.0\client_1\bin;」
そして、パスの設定は、前が優先なので、常に11.2.0を使用することになります。
(よくあるパターンとしては、VB.netでは11.1.0のライブラリを参照しているのに、実行時はエラーが出る!という事象)
もし、 11.1.0のODPを使用したいのであれば、
「C:\app\username\product\11.1.0\client_1\bin;」を前に持ってくるか、
「C:\app\username\product\11.2.0\client_1\bin;」を削除すれば解決です。
Windows7くらいになると、Pathの設定もわかりやすくGUI設定できるとよいのでしょうが、確かにそれは難しいのかもしれませんね。
複数のODPをインストールした環境において、特定のバージョンのODPを使用したいときの設定について記載します。
ODP.NET
(Oracle Data Provider for .NET Microsoft .NET環境からOracleデータベースへネイティブに接続可能なミドルウェア)
結論から書くと、以下の2点を対処すれば解決します。
①パスの設定を目的のバージョンのODPに修正して、
②VB.netで参照するライブラリの参照設定を①と同じにする。
具体的には、
②は文字通りなので、割愛。
①については、少々手作業が発生するので説明。
パスの現在の設定を以下の方法で確認します。
Pathを設定する
http://blog.cnu.jp/2009/11/06/windows-7-path/
【確認結果の例】
C:\app\username\product\11.2.0\client_1\bin;C:\app\username\product\11.1.0\client_1\bin;C:\Program Files\Common Files\Microsoft Shared\Windows Live;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\W~(以下略)
上記の場合、以下の2つのバージョンのODPがインストールされていることになります。
「C:\app\username\product\11.2.0\client_1\bin;」
「C:\app\username\product\11.1.0\client_1\bin;」
そして、パスの設定は、前が優先なので、常に11.2.0を使用することになります。
(よくあるパターンとしては、VB.netでは11.1.0のライブラリを参照しているのに、実行時はエラーが出る!という事象)
もし、 11.1.0のODPを使用したいのであれば、
「C:\app\username\product\11.1.0\client_1\bin;」を前に持ってくるか、
「C:\app\username\product\11.2.0\client_1\bin;」を削除すれば解決です。
Windows7くらいになると、Pathの設定もわかりやすくGUI設定できるとよいのでしょうが、確かにそれは難しいのかもしれませんね。
2012年5月13日日曜日
逮捕された友達のその後
突然、電話が来た。平日の昼間。仕事中で、私が電話に出られない可能性が高いことはわかっているはずなのに。
で、後でコールバックして話を聴いてみた。
次の仕事が決まりそうで、口頭では内定がもらえていたらしい。
けれど、最終の最終くらいで、逮捕のことを言われて、決まらなかったらしい。
よほど悔しかったらしい。
それはそうだろう。
今回の逮捕のことは、履歴書の賞罰に記載の義務はないため、書かなかったらしいけれど、
今の時代はインターネットがある。
名前で検索してチェックされた結果、判明したらしい。
インターネットって、便利な反面、やっぱり恐ろしいなと思った。
個人情報保護って最近騒がれるようになったけれど、これって、ひとえにインターネットがあるから保護が必要になったと言っても過言ではないだろうな。
知る権利・知らせる権利、 いろいろあると思うけれど、行過ぎた発展の代償は思わぬところで予想もしない形で受けることになるのかもしれないと思った。
で、後でコールバックして話を聴いてみた。
次の仕事が決まりそうで、口頭では内定がもらえていたらしい。
けれど、最終の最終くらいで、逮捕のことを言われて、決まらなかったらしい。
よほど悔しかったらしい。
それはそうだろう。
今回の逮捕のことは、履歴書の賞罰に記載の義務はないため、書かなかったらしいけれど、
今の時代はインターネットがある。
名前で検索してチェックされた結果、判明したらしい。
インターネットって、便利な反面、やっぱり恐ろしいなと思った。
個人情報保護って最近騒がれるようになったけれど、これって、ひとえにインターネットがあるから保護が必要になったと言っても過言ではないだろうな。
知る権利・知らせる権利、 いろいろあると思うけれど、行過ぎた発展の代償は思わぬところで予想もしない形で受けることになるのかもしれないと思った。
登録:
投稿 (Atom)