AccessVBAでフォームで指定した一つのレコードを削除する
データソースにテーブルAとBで構成されたクエリを設定してある帳票フォームで、例えば削除ボタンを作って、以下のDoCmdオブジェクトのDeleteメソッドを使うと、「クエリの中のテーブルAのレコードは消えたけど、Bのテーブルのレコードは消えてない」という場合があったので、SQLで両方のテーブルの削除したいレコードをしっかり指定して削除する方法を書いておく。
までもこれは基本のコードですね。
以下のコードは帳票フォームの詳細にレコードが表示されるようになっていて、そこのSeikyuIDというテキストボックスコントロールに各レコードの請求番号というのが表示される。んでもって削除ボタンも作っておいて、それをクリックすると以下のコードで、テーブルAとBの中の請求番号のレコードが削除されるという流れになっている。
On Error GoTo ErrExit
DoCmd.SetWarnings False
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim Ksql As String
Dim Bsql As String
Dim DelID As Integer
DelID = Me.SeikyuID
Ksql = "SELECT * FROM テーブルA WHERE 請求番号 = " & DelID 'テーブルAのレコードを削除
Set db = CurrentDb()
Set rs = db.OpenRecordset(Ksql, dbOpenDynaset)
rs.Delete
Set rs = Nothing
Bsql = "SELECT * FROM テーブルB WHERE 請求番号 = " & DelID 'テーブルBのレコードを削除
Set rs = db.OpenRecordset(Bsql, dbOpenDynaset)
rs.Delete
rs.Close
Set rs = Nothing
db.Close
Set db = Nothing
DoCmd.SetWarnings True
MsgBox "指定したデータは削除されました。"
Exit Sub
ErrExit:
MsgBox "エラーが発生した為、削除できませんでした。" & vbCrLf & "エラー内容: " & Err.Description