レコードの更新(ADO)Update メソッド
データベースのレコードを更新する
Update メソッド
カレントレコードの内容を更新します。
object.Update [ FieldList, Values ]
引数・戻り値
- object ・・・ 対象となる Recordset オブジェクトを指定します。
- FieldList ・・・ 変更するレコードのフィールド名を指定します。複数のフィールド名を指定するには、フィールド名、または位置を表す値の並びを配列として指定します。省略可。
- Values ・・・ 変更するレコードの値を指定します。複数の値を指定するには配列にします。省略可。
レコードを更新する場合、Recordset オブジェクトのOpen メソッドの引数 LockType には、adLockOptimistic または adLockPessimistic を指定します。(Recordset を開く時に使うロックの種類に関しては、データベース(Access 等)に接続(ADO) を参照して下さい。)
Update メソッドを実行すると実行前に変更したレコード、追加したレコードの内容が保存されます。
Update メソッド実行前後でカレントレコードは移動しません。
Field オブジェクトのValue プロパティを使用してレコードの値を設定後、引数なしの Update メソッドを実行してレコードを更新することもできます。
1 2 3 4 5 6 7 8 |
with rs .Find "ID = 3", 0, adSearchForward 'フィールド名「ID」の値が、3 であるレコードの位置へ移動 .Fields("NAME").Value = "Abel" 'カレントレコード「NAME」フィールドの値を「Abel」に設定する .Fields("CONTRY").Value = "スペイン" 'カレントレコード「CONTRY」フィールドの値を「スペイン」に設定する .Update '変更内容を確定する end with |
Find メソッド
Recordset オブジェクト内を検索します。
object.Find ( Criteria, SkipRows, SearchDirection, Start )
引数・戻り値
- object ・・・ 対象となる Recordset オブジェクトを指定します。
- Criteria ・・・ 検索する条件式を文字列型(String)で指定します(条件式は、”(二重引用符)で囲みます)。検索できるのは、単一列のみです。比較演算子には、>、<、<=、および like 演算子を使用できます。値には、文字列、浮動小数点数、日付を使用できます。文字列の値は、'(単一引用符)または #(シャープ記号)で囲みます(例:「user = 'Rin'」または「user = #Rin#」)。日付の値は、#(シャープ記号)で囲みます(例:「sdate > #7/22/97#」)。また、like 演算子を使用する場合、「keyword like ‘k*’」、「keyword like ‘*ba*’」のように文字列の末尾または文字列の先頭と末尾にアスタリスク(*)を使用して検索します。ただし「keyword like ‘*ea’」、「keyword like ‘a*c’」のように文字列の先頭や文字列中にアスタリスク(*)を使用することはできません。この場合はエラーが発生します。
- SkipRows ・・・ 検索を開始する、カレント行または Start ブックマークからの行のオフセットを指定する長整数型(Long)の値を指定します。省略可能です(既定値は 0 。既定では、カレント行から検索が開始されます)。
- SearchDirection ・・・ 検索する方向を SearchDirectionEnum クラスの定数または値を指定します。省略可能です。
定数 値 内容 adSearchForward
(既定値)1 前方検索をし、Recordset の末尾で終了します。一致するレコードが見つからない場合、レコード ポインタは EOF に移動します。 adSearchBackward -1 後方検索をし、Recordset の先頭で終了します。一致するレコードが見つからない場合、レコード ポインタは BOF に移動します。 - Start ・・・ 検索の開始位置として使用するバリアント型(Variant)のブックマークを指定します。省略可能です。
Find メソッドを呼び出す前にカレント行の位置が設定されていない場合は、エラーが発生します。この場合、Find メソッドを呼び出す前に、MoveFirst などの行の位置を設定するメソッドを呼び出す必要があります。
Find メソッドを実行し、条件が一致したレコードがあればそのレコードの位置に移動します。条件を満たすレコードがなかった場合は、カレントの位置は Recordset の最後または最初に設定されます。
Update メソッド・Find メソッド 使用例
サンプルVBAソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
Sub Sample_Update() '参照設定:Microsoft ActiveX Data Objects 6.1 Library Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim constr As String Dim DBFile As String Dim i As Long Dim j As Long DBFile = ActiveWorkbook.Path & "\mydb1.accdb" constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBFile Set cn = New ADODB.Connection cn.ConnectionString = constr cn.Open Set rs = New ADODB.Recordset With rs 'テーブルを開く .Source = "テーブル1" .ActiveConnection = cn .CursorType = adOpenKeyset 'キーセットカーソル使用 .LockType = adLockPessimistic 'レコード単位排他的ロック .Open 'フィールド名「ID」の値が、3 のレコードへ移動 .Find "ID = 3", 0, adSearchForward 'レコードを更新する .Update Array("NAME", "CONTRY"), Array("Abel", "スペイン") End With With Worksheets("Sheet1") rs.MoveFirst i = 1 .Cells.Clear Do Until rs.EOF For j = 0 To rs.Fields.Count - 1 If i = 1 Then .Cells(i, j + 1) = rs(j).Name .Cells(i + 1, j + 1) = rs(j).Value Next j rs.MoveNext i = i + 1 Loop End With rs.Close Set rs = Nothing cn.Close Set cn = Nothing End Sub |
実行結果
関連記事
-
レコードを指定した条件で抽出する(ADO)Filter プロパティ
データベースのレコードを指定した条件で抽出する Filter プロパティ 【書式 …
-
データベース(Oracle)に接続する(oo4o)
oo4o 接続 OO4O(Oracle Objects for OLE)はWin …
-
インデックス、プロパティの設定(ADOX)
インデックスを作成する index オブジェクト 【書式】 <CreateObj …
-
BOF プロパティ・EOF プロパティ(ADO)
EOF プロパティ・BOF プロパティ BOF プロパティは、カレントレコードの …
-
Excelファイルに接続(ADO)
ADOでExcelファイルに接続 ADO を使用してExcelファイルを読み込み …
-
トランザクション(ADO)BeginTrans、CommitTrans、RollbackTrans
ADO でのトランザクション処理 【書式】 Sub Sample_Transac …
-
データベース(Oracle)に接続する(ODBC を使用)
ODBC接続(ADO) ADOで、ODBC(Open Database Conn …
-
クエリの作成・削除(ADOX)
ADOX を使用してクエリを作成・削除 クエリを作成する手順 【書式】 <参照設 …
-
データベースを作成する(ADOX)
ADOX を使用してデータベース(Access)を作成 Catalog オブジェ …
-
レコードを並べ替える(ADO)Sort プロパティ
データベースのレコードを並べ替える Sort プロパティ 【書式】 object …