次の方法で共有


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 メソッドを使用して現在のレコードへの変更を破棄することが可能です。