外部データベースのレコードを削除する方法
外部データベースのレコードを削除するには、Recordset【レコードセット】オブジェクトの
Delete【デリート】メソッドを使用します。
Delete【デリート】メソッドは、カーソルがあるレコード(カレントレコード)を削除します。削除するレコードを特定のレコードを検索するFind【ファインド】メソッドで検索し、カーソルを移動して削除します。
レコードを削除する場合は、Recordset【レコードセット】オブジェクトのOpen【オープン】メソッドの引数LockType【ロックタイプ】にUpdate【アップデイト】メソッドを呼び出した時だけロックする「adLockOptimictic」【オプティミステイク】または、編集直後のレコードをロックする「adLockPessimictic」【ペスミステイク】を使用します。
削除されたレコードは削除されたあとも、「削除されたレコード」として存在しカレントレコードのままになりますのでMoveFirst【ムーブファースト】メソッドなどを使用してカーソルを移動します。
Delete【デリート】メソッド
カーソルがあるレコード(カレントレコード)を削除するには、Recordset【レコードセット】オブジェクトのDelete【デリート】メソッドを使用します。
Recordset.Delete【レコードセットデリート】メソッドの書式と設定値の説明
オブジェクト変数.Delete
- オブジェクト変数(必須)
Recordset【レコードセット】オブジェクトのインスタンスが格納されているオブジェクト変数を指定します。
Accessの商品マスターテーブルの
商品名フィールドのK商品のレコードを削除する例
コードと解説
※ADOのライブラリファイルへの参照設定がされていることが前提のコード例です。
Sub レコード削除() Dim コネクション As New ADODB.Connection Dim レコード As New ADODB.Recordset コネクション.Open ConnectionString:= _ "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=C:¥Users¥Desktop¥Database1.accdb;" レコード.Open Source:="商品マスター", ActiveConnection:=コネクション, _ CursorType:=adOpenKeyset, LockType:=adLockPessimistic With レコード .Find criteria:="商品名 = 'K商品'" On Error GoTo エラー処理 .Delete .MoveFirst End With MsgBox "K商品のレコードを削除しました。" レコード.Close: Set レコード = Nothing コネクション.Close: Set コネクション = Nothing Exit Sub エラー処理: MsgBox "指定したデータはデータベースにありません。" レコード.Close: Set レコード = Nothing コネクション.Close: Set コネクション = Nothing End Sub
Dim【デム】ステートメントでNew【ニュー】キーワード使用して外部データベースとの接続を確立するConnection【コネクション】オブジェクトのインスタンスを生成してオブジェクト変数「コネクション」に格納します
3行目【Dim レコード As New ADODB.Recordset】
Dim【デム】ステートメントでNew【ニュー】キーワード使用して外部データベースのレコードを参照するRecordset【レコードセット】オブジェクトのインスタンスを生成してオブジェクト変数「レコード」に格納します。
4行目~6行目【コネクション.Open ConnectionString:= _
“Provider=Microsoft.ACE.OLEDB.12.0;” & _
“Data Source=C:¥Users¥Desktop¥Database1.accdb;”】
Connection【コネクション】オブジェクトのOpen【オープン】メソッドを使用して外部データベースの接続をします。
7行目~8行目【レコード.Open Source:=”商品マスター”, ActiveConnection:=コネクション, _
CursorType:=adOpenKeyset, LockType:=adLockPessimistic】
Recordset【レコードセット】オブジェクトのOpen【オープン】メソッドを使用して外部データベースのレコードを参照します。引数CursorType【カーソルタイプ】を他のユーザーによって削除されたレコードにアクセスできない点以外、すべての動作が許可される動的カーソルのadOpenKeyset【キーセット】に指定し引数LockType【ロックタイプ】を編集直後のレコードをロックするadLockPessimistic【ペスミステイク】に指定します。
9行目【With レコード】
Rcordset【レコードセット】オブジェクトが格納されているオブジェクト変数「レコード」をWith【ウィズ】ステートメントで指定します。
10行目【.Find criteria:=”商品名 = ‘K商品'”】
With【ウィズ】ステートメントで指定したRecordset【レコードセット】オブジェクトが格納されているオブジェクト変数「レコード」に対してFind【ファインド】メソッドで削除するデータを引数criteria【クライテリア】の検索条件式に指定します。「商品名フィールドのK商品のレコード」を指定してカーソルをそのレコードに移動します。
11行目【On Error GoTo エラー処理】
Find【ファインド】メソッドで指定したレコードが存在しない場合、次のDelete【デリート】メソッドでエラーになり処理が中断してデバックモードにならないようにOn Error【オンエラー】ステートメントとGoTo【ゴゥトゥ】ステートメントを使用してエラーが発生した場合、エラー処理ラベルがある19行目まで処理をジャンプします。
12行目【.Delete】
With【ウィズ】ステートメントで指定したRecordset【レコードセット】オブジェクトが格納されているオブジェクト変数「レコード」のカレントレコードつまり、Find【ファインド】メソッドで検索されたレコードをDelete【デリート】メソッドで削除します。
13行目【.MoveFirst】
削除されたレコードは削除されたあとも「削除されたレコード」として存在しカレントレコードのままになりますのでMoveFirst【ムーブファースト】メソッドを使用してカーソルの位置を先頭のレコードに移動します。
15行目【MsgBox “K商品のレコードを削除しました。”】
MsgBox【メッセージボックス】関数を使用してレコードを削除したことをユーザーに伝えます。
16行目【レコード.Close: Set レコード = Nothing】
Recordset【レコードセット】オブジェクトのClose【クローズ】メソッドでレコードの参照を切断し、Nothing【ナッシング】を代入して
メモリー領域を解放します。
17行目【コネクション.Close: Set コネクション = Nothing】
Connection【コネクション】オブジェクトのClose【クローズ】メソッドで外部データベースの接続を切断し、Nothing【ナッシング】を代入してメモリー領域を解放します。
18行目【Exit Sub】
Exit【エグジット】ステートメントでSub【サブ】プロシージャーを途中で終了させます。
19行目【エラー処理:】
12行目のDelete【デリート】メソッドで、Find【ファインド】メソッドで検索値のレコードがなかった場合エラーになるので、エラーになった場合このラベルまで処理がジャンプします。以降の処理はエラーが発生した場合の処理になります。
20行目【MsgBox “指定したデータはデータベースにありません。”】
MsgBox【メッセージボックス】関数を使用してユーザーにエラーが発生したことを伝えます。
24行目【レコード.close: Set レコード = Nothing】
Recordset【レコードセット】オブジェクトのClose【クローズ】メソッドでレコードの参照を切断し、Nothing【ナッシング】を代入して
メモリー領域を解放します。
25行目【コネクション.Close: Set コネクション = Nothing】
Connection【コネクション】オブジェクトのClose【クローズ】メソッドで外部データベースの接続を切断し、Nothing【ナッシング】を代入してメモリー領域を解放して処理を終了します。
実行結果
以上で、ADOで外部データベースのレコードを削除する方法についての解説を終了します。ありがとうございました。