OriginalValue 和 UnderlyingValue 属性范例

该范例通过当某记录的基本数据在 Recordset 批更新过程中被更改时显示有关信息,来说明 OriginalValueUnderlyingValue 属性。

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
www.holmesian.org