Excel VBA ADOで外部データベースのレコードを削除する

スポンサーリンク

外部データベースのレコードを削除する方法

外部データベースのレコードを削除するには、Recordset【レコードセット】オブジェクトの
Delete【デリート】メソッドを使用します。

Delete【デリート】メソッドは、カーソルがあるレコード(カレントレコード)を削除します。削除するレコードを特定のレコードを検索するFind【ファインド】メソッドで検索し、カーソルを移動して削除します。

レコードを削除する場合は、Recordset【レコードセット】オブジェクトのOpen【オープン】メソッドの引数LockType【ロックタイプ】にUpdate【アップデイト】メソッドを呼び出した時だけロックする「adLockOptimictic」【オプティミステイク】または、編集直後のレコードをロックする「adLockPessimictic」【ペスミステイク】を使用します。

削除されたレコードは削除されたあとも、「削除されたレコード」として存在しカレントレコードのままになりますのでMoveFirst【ムーブファースト】メソッドなどを使用してカーソルを移動します。

Delete【デリート】メソッド

カーソルがあるレコード(カレントレコード)を削除するには、Recordset【レコードセット】オブジェクトのDelete【デリート】メソッドを使用します。

Recordset.Delete【レコードセットデリート】メソッドの書式と設定値の説明

オブジェクト変数.Delete


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
2行目【Dim コネクション As New ADODB.Connection】
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で外部データベースのレコードを削除する方法についての解説を終了します。ありがとうございました。

スポンサーリンク

関連記事・広告