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

スポンサーリンク
スポンサーリンク

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

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

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

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

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

Recordset.Delete【レコードセットデリート】メソッド

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

Recordset.Delete【レコードセットデリート】メソッドの書式

オブジェクト変数.Delete


設定値の説明


Accessの商品マスターテーブルの
商品名フィールドのK商品のレコードを削除する例

コード例

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

ADOのライブラリファイルへの参照設定がされていることが前提のコード例です。

コードの解説

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で外部データベースのレコードを削除する方法に
ついての解説を終了します。
ありがとうございます。

スポンサーリンク
スポンサーリンク

フォローする

スポンサーリンク
スポンサーリンク