たま氏の覚え書き

KNIME・AccessVBA・Swift等、学習したことを覚え書き

AccessVBA_ADOの利用_レコード操作その3【Recordset】【Update】レコードの更新

ADOでデータベースに接続し、Recordsetを使用してカレントレコードを移動させながらレコードを更新する記述

今回の記述に関する前情報

何を行うか

Recordsetで、DoLoopを使用してカレントレコードを移動させつつ
指定したテーブルの指定したフィールドの特定のレコードの値を更新する

パターン1:カレントプロジェクトの指定のテーブルの値を更新
パターン2:別のAccessファイルの指定のテーブルの値を更新

記述例における利用パーツ

・ソース
  →SQL:SELECT文 WHERE句
ステートメント
  →DoLoop
・メソッド
  →Update / MoveNext / Open / Close

※更新・追加・削除などを行うメソッド使用時の注意点※
 ・更新が可能なロックタイプを指定する
 ・ロックタイプは、Openメソッドの第4引数で指定するか「LockType = adLockOptimistic」と記述

▼ロックタイプの種類については以下を参照▼
tama-shi.hatenadiary.com


【実践1】指定のテーブルの指定のフィールドの値を更新する記述例【パターン1】

カレントプロジェクトのデータベースに接続する場合の記述

フィールド「postcode」が「0600042」のレコードの「prefecture」を「ほっかいDo」に変更

▼取得対象テーブル「yubin_data」▼


▼記述例▼

Sub CurrentTable1()

Dim CNT As ADODB.connection
Dim RST As ADODB.Recordset
Dim SQL As String

Set CNT = CurrentProject.connection
Set RST = New ADODB.Recordset

SQL = "SELECT * FROM yubin_data WHERE postcode = '0600042';"
RST.Open SQL, CNT, adOpenKeyset, adLockOptimistic

RST.Update "prefecture", "ほっかいDo"

RST.Close: CNT.Close
Set RST = Nothing: Set CNT = Nothing

End Sub

▼実行結果▼


カレントプロジェクト以外のデータベースに接続して更新する場合の記述【パターン2】

フィールド「prefecture」の値を「ほっかいDo」に変更

▼取得対象テーブル「KEN_ALL_ROME_sub」▼


▼記述例▼

Sub test_yubindataSub()

Dim CNT As New ADODB.connection
Dim RST As New ADODB.Recordset

CNT.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source= C:\Users\user\tama-shi\ken_all\yubin_data\KEN_ALL.accdb"
'RST.LockType = adLockOptimisticと記述してもOK
RST.Open "KEN_ALL_ROME_sub", CNT, adOpenKeyset, adLockOptimistic

Do Until RST.EOF
    RST("prefecture") = "ほっかいDo"
    RST.Update
    RST.MoveNext
Loop

RST.Close: CNT.Close
Set RST = Nothing: Set CNT = Nothing

End Sub

▼実行結果▼