アプリ版:「スタンプのみでお礼する」機能のリリースについて

課題でVBからデータベースの操作についてのプログラムを作成しているのですが、どうしてもエラーが出るのでお願いします。

フォームロード時に下の処理をしているのですが、

Dim sql As String
Dim cm As OleDb.OleDbCommand
Dim rd As OleDb.OleDbDataReader
sql = "select max(番号) as 数 from アドレス帳"
Try
cm = New OleDb.OleDbCommand(sql, cn)
rd = cm.ExecuteReader
Catch ex As Exception
MessageBox.Show(ex.Message, "Access Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
rd.Close()
Exit Sub
End Try
If rd.Read Then
frmMenu.num = rd.Item("数")
frmMenu.num += 1
End If
frmMenu.num += 1
txtnum.Text = frmMenu.nu

この部分なんですが、

If rd.Read Then
frmMenu.num = rd.Item("数")
frmMenu.num += 1
End If
frmMenu.num += 1
txtnum.Text = frmMenu.nu

・frmMenu.num はInteger型の変数です。初期値に0が入っています。

この部分では、データが読めた場合はデータベースの方から
数を引っ張ってきて、+1をして、読めない(データがない)
場合には+1だけをしたいのですが、データがある時は正常に
動くのですが、データがない時に動かそうとすると、

型 'DBNull' から型 'Integer' への変換は無効です

のエラーがでて困っています。
これは、読めたか読めなかったか判定出来ていないということなのでしょうか?

A 回答 (2件)

rd.Item("数")が Nullだからでしょうね



If rd.Read andalso Not IsDBNull(rd.Item("数")) Then
でどうでしょうか。
    • good
    • 0
この回答へのお礼

できました。

ありがとうございます。

お礼日時:2008/06/21 09:42

NULLの場合を考慮して下記SQLでは?



SELECT
CASE WHEN MAX(番号) IS NULL THEN 1 ELSE MAX(番号) + 1 END AS 数
FROM
アドレス帳
    • good
    • 0
この回答へのお礼

SQLはあんまり詳しくやっていないのですが、
こうするやり方もあるんですね

ありがとうございます

お礼日時:2008/06/21 09:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!