今回は更新のプログラムをコピーして、少しだけ変更し、削除のプログラムを作ってみましょう。
ここまで Step 順で進めてきた人は、ほとんど説明しなくても理解できると思います。削除はかなり簡単です。
【1】Accessのファイル「SampleDB020.mdb」を起動し、テーブル「T01Prefecture」を開きます。
【2】一番最後のレコードが、「99 グアム」になっていることを、確認しておいてください。
これからこのレコードを削除します。無い場合は作成してください。PREF_NAMEの文字列は何でもかまいません。
レコードを確認したらテーブルを閉じます。
【3】VBE を起動して、標準モジュールの test6 を表示します。
*VBEは「Altキー」+「F11キー」で起動できます。
【4】「test6」に以下のように、Subプロシージャ deleteData() を追加します。
Sub deleteData(pCd As Integer)
Dim db As DAO.Database
Set db = CurrentDb
Dim rs As DAO.Recordset
Set rs = db.OpenRecordset("T01Prefecture")
rs.Index = "Primarykey"
rs.Seek "=", pCd
If rs.NoMatch Then
Debug.Print "該当するレコードは見つかりませんでした。"
Else
rs.Delete
Debug.Print "レコードを削除しました。"
dispData
End If
rs.Close
Set rs = Nothing
db.Close
Set db = Nothing
End Sub
プログラムの準備ができたら、早速実行してみましょう。
【5】イミディエイト ウィンドウから deleteData() を実行してください。
call deleteData(99)
*引数にはテーブルに存在する PREF_CD を指定します。
【6】削除のメッセージと、レコードの一覧が表示されました。
・PREF_CD が 99 の場合
・PREF_CD が 100 の場合(存在しない)
【7】イミディエイト ウィンドウをスクロールして、レコードが削除されていることを確認してください。
【8】テーブル「T01Prefecture」側でも、レコードが削除されていることを確認してください。
【9】deleteData()を使って、レコードを削除する練習をしてください。
PREF_CD が 1~47 までのレコードは、今後も使いますので削除しないでください。
削除用に addData() で新しいレコードを追加するか、テーブルを開いて直接入力してもかまいません。
【解説】
(1)更新の時とほとんど同じです。変更箇所を赤枠で囲んでみました。
(2)イミディエイト ウィンドウから、deleteData() を引数を指定して呼び出しています。
call deleteData(99)
引数は整数型です。PREF_CD は必ずテーブルに存在する値を使います。
(3)整数型(Integer)の引数を1つ受け取ります。
Sub deleteData(pCd As Integer)
(4)レコードを検索し、対象となるレコードに移動しています。
rs.Index = "Primarykey"
rs.Seek "=", pCd
(5)実際にレコードを削除している部分です。
If rs.NoMatch Then
Debug.Print "該当するレコードは見つかりませんでした。"
Else
rs.Delete
Debug.Print "レコードを削除しました。"
dispData
End If
もしレコードが見つからなかったらメッセージを表示して、見つかったら削除するという処理です。
既に対象となるレコードに移動しているので、あとは「rs.Delete」だけで削除できます。
*削除の時は rs.Update は不要です。
これでデータベースを操作する時の基本となる、「検索、追加、更新、削除」を一通り体験しました。あとはフィールド数が増えるだけで、他のテーブルでも要領は同じです。
【ワンポイント】
もっと簡単で強力なSQL文を使う方法がありますので、後に説明します。