Microsoft Office 2000/Visual Basic プログラマーズ ガイド |
次のコードは、スクロールおよび更新可能な Recordset オブジェクトを開き、レコードのデータを編集する方法を示しています。
Sub UpdateRecordset(strDBPath As String, _
strSQL As String, _
strUpdateFld As String, _
strUpdateValue As String)
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Set cnn = New ADODB.Connection
' 接続を開きます。
With cnn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.Open strDBPath
End With
Set rst = New ADODB.Recordset
With rst
' Recordset オブジェクトを開きます。
.Open Source:= strSQL, _
ActiveConnection:= cnn, _
CursorType:= adOpenKeyset, _
LockType:= adLockOptimistic
' カレント レコードに対して指定したフィールドを更新します。
.Fields(strUpdateFld).Value = strUpdateValue
' Recordset オブジェクト内のカレント レコードに対して行った変更を保存します。
.Update
' Recordset オブジェクトを閉じます。
.Close
End With
' 接続を閉じ、オブジェクト変数を破棄します。
cnn.Close
Set rst = Nothing
Set cnn = Nothing
End Sub
たとえば、プロシージャを使用して Northwind データベースの Customer テーブルを開き、Around the Horn 社のレコードを取り出して ContactName を "Jane New" と変更するために使用するコードは以下の通りです。
UpdateRecordset "c:\Program Files\Microsoft Office\Office\Samples\Nwind.mdb", _
"SELECT * FROM Customers WHERE CustomerId = 'AROUT'",_
"ContactName", "Jane New"
UpdateRecordset プロシージャは、Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Samples\CH14 サブフォルダに収録されている DataAccess.mdb サンプル ファイルのOpenRecordset モジュールにあります。
Recordset オブジェクトのデータを更新する ADO および DAO コードは類似しています。上記の 2 つの例の主な違いは、DAO は Edit メソッドを使用して Recordset オブジェクトを編集可能な状態にする必要があるのに対して ADO は編集モードに入ることを明確に指定しなくても構わない点です。DAO および ADO の両方で、EditMode プロパティをチェックして現在のレコードの編集状況を確かめることができます。
DAO と ADO の動作の違いで注意するべき点は、レコードを更新した後、Update メソッドを呼び出さずにほかのレコードへ移動した場合です。DAO では、Update メソッドを先に呼び出さずにほかのレコードへ移動すると、現在のレコードに加えた変更はすべて失われますが、ADO では、新しいレコードに移動すると現在のレコードに加えた変更は自動的に保存されます。DAO および ADO で、CancelUpdate メソッドを使用して現在のレコードへの変更を破棄することが可能です。