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