MarshalOptions 属性范例

该范例使用 MarshalOptions 属性,指定将哪些行(所有行还是已修改的行)发送回服务器。

Public Sub MarshalOptionsX()

   Dim rstEmployees As ADODB.Recordset
   Dim strCnn As String
   Dim strOldFirst As String
   Dim strOldLast As String
   Dim strMessage As String
   Dim strMarshalAll As String
   Dim strMarshalModified As String
   
   ' 使用雇员表的姓名打开记录集。
   strCnn = "Provider=sqloledb;" & _
      "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; "
   Set rstEmployees = New ADODB.Recordset
   rstEmployees.CursorType = adOpenKeyset
   rstEmployees.LockType = adLockOptimistic
   rstEmployees.CursorLocation = adUseClient
   rstEmployees.Open "SELECT fname, lname " & _
      "FROM Employee ORDER BY lname", strCnn, , , adCmdText

   ' 存储原始数据。
   strOldFirst = rstEmployees!fname
   strOldLast = rstEmployees!lname
   
   ' 更改编辑缓冲区中的数据。
   rstEmployees!fname = "Linda"
   rstEmployees!lname = "Kobara"

   ' 显示缓冲区中的内容并让用户输入。
   strMessage = "Edit in progress:" & vbCr & _
      " Original data = " & strOldFirst & " " & _
      strOldLast & vbCr & " Data in buffer = " & _
      rstEmployees!fname & " " & rstEmployees!lname & vbCr & vbCr & _
      "Use Update to replace the original data with " & _
      "the buffered data in the Recordset?"
   strMarshalAll = "Would you like to send all the rows " & _
               "in the recordset back to the server?"
   strMarshalModified = "Would you like to send only " & _
               "modified rows back to the server?"
 
   If MsgBox(strMessage, vbYesNo) = vbYes Then
      If MsgBox(strMarshalAll, vbYesNo) = vbYes Then
         rstEmployees.MarshalOptions = adMarshalAll
         rstEmployees.Update
      ElseIf MsgBox(strMarshalModified, vbYesNo) = vbYes Then
         rstEmployees.MarshalOptions = adMarshalModifiedOnly
         rstEmployees.Update
      End If
   End If
   
   ' 显示结果数据。
   MsgBox "Data in recordset = " & rstEmployees!fname & " " & _
      rstEmployees!lname

   ' 恢复原始数据,因为这只是演示。
   If Not (strOldFirst = rstEmployees!fname And _
         strOldLast = rstEmployees!lname) Then
      rstEmployees!fname = strOldFirst
      rstEmployees!lname = strOldLast
      rstEmployees.Update
   End If

   rstEmployees.Close

End Sub