Discussion:
レコード削除ボタンの開発のコツ
(too old to reply)
海星
2006-07-31 12:25:01 UTC
Permalink
 カレントレコード削除ボタンを作ろうとしたら、新規レコード状態での動作がうまく
働かず、末尾のレコードが勝手に削除されます。
 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
unknown
2006-08-08 16:25:01 UTC
Permalink
 エラー処理で新規レコードかどうかを判定する方法を紹介していましたが、ヘルプを参照していると、NewRecord プロパティがありました。
 以下のようなコードで、削除処理に入らないように判断させることができます。

Me.Refresh
If Me.NewRecord Then
MsgBox "レコード末尾を越えています。" & vbCrLf & "データ削除できません。"
Exit Sub
End If

 実は3年ほどまで開発したデータベースでは、自分でこのNewRecordプロパティを活用していることを見つけまして、あたかも、マヤの宇宙飛行士やピラミッドの鉄釘などの古代文明のオーパーツを発見したかのように驚きました。要するにオブジェクトが多すぎるのですね。
 また、RefreshメソッドやRequeryメソッドやRepaintメソッドなどを埋め込むタイミングもよく分からす、テストしながら臨機応変に使っているもので、よくご存じの方がいらっしゃいましたらご教授ください。
--
                                  海  星
Loading...