Posted at

AccessVBA DAOで選択クエリを発行したら「カレントレコードがありません」

自分用備忘録


現象

選択クエリを投げた時、「カレントレコードがありません」と表示されてしまった


原因

選択クエリが空振り(結果が0件)したにも関わらず、レコードセット内のデータを参照した



悪い例

たとえば以下のようなコードだと、選択クエリが空振りした場合

MsgBox表示の段階で「カレントレコードがありません」というデバッグメッセージが出てしまい実行が止まる

Private Sub 取得ボタン_Click()

Dim db As DAO.Database
Dim rs As DAO.Recordset

Dim sql As String

sql = "SELECT ID, 氏名, 電話番号 FROM 従業員マスタ WHERE ID=" & テキスト.Value
Set db = CurrentDb
Set rs = db.OpenRecordset(sql)

MsgBox "ようこそ" & rs!氏名 & " さん!"

Set rs = Nothing
Set db = Nothing
End Sub


改善例

「レコードセットの終端に到達しているか」を検査することによって回避する

Private Sub 取得ボタン_Click()

Dim db As DAO.Database
Dim rs As DAO.Recordset

Dim sql As String

sql = "SELECT ID, 氏名, 電話番号 FROM 従業員マスタ WHERE ID=" & テキスト.Value
Set db = CurrentDb
Set rs = db.OpenRecordset(sql)

If rs.EOF then
MsgBox "レコードがみつかりません"
Else
MsgBox "ようこそ" & rs!氏名 & " さん!"
End If

Set rs = Nothing
Set db = Nothing
End Sub