海星
2006-07-31 12:25:01 UTC
カレントレコード削除ボタンを作ろうとしたら、新規レコード状態での動作がうまく
働かず、末尾のレコードが勝手に削除されます。
Recordsetオブジェクトのさまざまなプロパティを調べたところ、以下のサンプルの
ようなコードで新規レコードエラーに対処できました。
参考になればと思い、アップします。
Private Sub cmdレコード削除_Click()
Dim bytYN As Byte
Dim vrtRN As Variant
' テーブル末尾超えエラーをプロシージャ内で処理するための宣言
On Error GoTo レコード削除_Err
' このリフレッシュで、現在表示中のレコード位置にデータベース内でも確定する。
' もしリフレッシュしていなければ、画面上は別のレコードでも、先に表示していた
' レコードを削除することになる。
Me.Refresh
' 実験時に動作を試したプロバティ 5種類 結局 Bookmarkを取りに行ったとき、
' レコードが存在しないと認識するようである。
' MsgBox "レコード番号 レコード数 EOF 編集モード クエリー番号" & vbCrLf _
' & " " & Me.Recordset.AbsolutePosition & " " _
' & Me.Recordset.RecordCount & " " & Me.Recordset.EOF _
' & " " & Me.Recordset.EditMode & " " & Me.Bookmark
' Bookmarkプロパティを感知させるためのコード。このコードがなければ、
'[エラー番号3021番(カレントレコードがありません)]が発生しない。また、変数 vrtRN
' は特に使い道はない。
vrtRN = Me.Bookmark
bytYN = MsgBox _
("このデータ1件を削除してよろしいですか?",vbYesNo,"レコード削除")
If bytYN = vbYes Then
' このDeleteメソッドで、新規レコードが感知済みの場合にエラーが発生する。
Me.Recordset.Delete
End If
レコード削除_Exit:
Exit Sub
レコード削除_Err:
' MsgBox Err.Number & " " & Error(Err.Number)
' [エラー番号3021番(カレントレコードがありません)]のエラーが発生したかを
' 受けるためのエラー例外処理範囲
If Err.Number = 3021 Then
MsgBox "データの最後を越えています。 " & vbCrLf & _
"データの削除はできません。 " & vbCrLf & Error(Err.Number)
Resume レコード削除_Exit
Else
MsgBox Err.Number & " " & Error(Err.Number)
Resume レコード削除_Exit
End If
End Sub
働かず、末尾のレコードが勝手に削除されます。
Recordsetオブジェクトのさまざまなプロパティを調べたところ、以下のサンプルの
ようなコードで新規レコードエラーに対処できました。
参考になればと思い、アップします。
Private Sub cmdレコード削除_Click()
Dim bytYN As Byte
Dim vrtRN As Variant
' テーブル末尾超えエラーをプロシージャ内で処理するための宣言
On Error GoTo レコード削除_Err
' このリフレッシュで、現在表示中のレコード位置にデータベース内でも確定する。
' もしリフレッシュしていなければ、画面上は別のレコードでも、先に表示していた
' レコードを削除することになる。
Me.Refresh
' 実験時に動作を試したプロバティ 5種類 結局 Bookmarkを取りに行ったとき、
' レコードが存在しないと認識するようである。
' MsgBox "レコード番号 レコード数 EOF 編集モード クエリー番号" & vbCrLf _
' & " " & Me.Recordset.AbsolutePosition & " " _
' & Me.Recordset.RecordCount & " " & Me.Recordset.EOF _
' & " " & Me.Recordset.EditMode & " " & Me.Bookmark
' Bookmarkプロパティを感知させるためのコード。このコードがなければ、
'[エラー番号3021番(カレントレコードがありません)]が発生しない。また、変数 vrtRN
' は特に使い道はない。
vrtRN = Me.Bookmark
bytYN = MsgBox _
("このデータ1件を削除してよろしいですか?",vbYesNo,"レコード削除")
If bytYN = vbYes Then
' このDeleteメソッドで、新規レコードが感知済みの場合にエラーが発生する。
Me.Recordset.Delete
End If
レコード削除_Exit:
Exit Sub
レコード削除_Err:
' MsgBox Err.Number & " " & Error(Err.Number)
' [エラー番号3021番(カレントレコードがありません)]のエラーが発生したかを
' 受けるためのエラー例外処理範囲
If Err.Number = 3021 Then
MsgBox "データの最後を越えています。 " & vbCrLf & _
"データの削除はできません。 " & vbCrLf & Error(Err.Number)
Resume レコード削除_Exit
Else
MsgBox Err.Number & " " & Error(Err.Number)
Resume レコード削除_Exit
End If
End Sub