该范例通过当某记录的基本数据在 Recordset 批更新过程中被更改时显示有关信息,来说明 OriginalValue 和 UnderlyingValue 属性。
Public Sub OriginalValueX() Dim cnn1 As ADODB.Connection Dim rstTitles As ADODB.Recordset Dim fldType As ADODB.Field Dim strCnn As String ' 打开连接。 Set cnn1 = New ADODB.Connection strCnn = "Provider=sqloledb;" & _ "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; " cnn1.Open strCnn ' 打开批更新的记录集。 Set rstTitles = New ADODB.Recordset Set rstTitles.ActiveConnection = cnn1 rstTitles.CursorType = adOpenKeyset rstTitles.LockType = adLockBatchOptimistic rstTitles.Open "titles" ' 设置 Type 字段的字段对象变量。 Set fldType = rstTitles!Type ' 更改 psychology 标题的类型。 Do Until rstTitles.EOF If Trim(fldType) = "psychology" Then fldType = "self_help" End If rstTitles.MoveNext Loop ' 通过使用命令字符串更新数据的方法模拟另一用户所做的更改。 cnn1.Execute "UPDATE titles SET type = 'sociology' " & _ "WHERE type = 'psychology'" ' 检查更改。 rstTitles.MoveFirst Do Until rstTitles.EOF If fldType.OriginalValue <> _ fldType.UnderlyingValue Then MsgBox "Data has changed!" & vbCr & vbCr & _ " Title ID: " & rstTitles!title_id & vbCr & _ " Current value: " & fldType & vbCr & _ " Original value: " & _ fldType.OriginalValue & vbCr & _ " Underlying value: " & _ fldType.UnderlyingValue & vbCr End If rstTitles.MoveNext Loop ' 取消更新,因为这只是演示。 rstTitles.CancelBatch rstTitles.Close ' 恢复原始值。 cnn1.Execute "UPDATE titles SET type = 'psychology' " & _ "WHERE type = 'sociology'" cnn1.Close End Sub