适用于:Access 2013、Office 2013
以下三个示例演示了如何将 Save 和 Open 方法结合起来使用。
假设您正准备出差并希望携带数据库中的某个表。 在出发前,您以 Recordset 的形式访问数据并将其保存在便携表单中。 到达目的地后,您将 Recordset 作为本地的已断开 Recordset 进行访问。 您对 Recordset 进行更改,然后再次保存它。 最后,您回家之后再次连接到数据库,并用出差时所做的更改更新该数据库。
首先,访问并保存 “作者” 表。
'BeginSaveVB
'To integrate this code
'replace the data source and initial catalog values
'in the connection string
Public Sub Main()
On Error GoTo ErrorHandler
'recordset and connection variables
Dim rstAuthors As ADODB.Recordset
Dim Cnxn As ADODB.Connection
Dim strCnxn As String
Dim strSQLAuthors As String
' Open connection
Set Cnxn = New ADODB.Connection
strCnxn = "Provider='sqloledb';Data Source='MySqlServer';" & _
"Initial Catalog='Pubs';Integrated Security='SSPI';"
Cnxn.Open strCnxn
Set rstAuthors = New ADODB.Recordset
strSQLAuthors = "SELECT au_id, au_lname, au_fname, city, phone FROM Authors"
rstAuthors.Open strSQLAuthors, Cnxn, adOpenDynamic, adLockOptimistic, adCmdText
'For sake of illustration, save the Recordset to a diskette in XML format
rstAuthors.Save "c:\Pubs.xml", adPersistXML
' clean up
rstAuthors.Close
Cnxn.Close
Set rstAuthors = Nothing
Set Cnxn = Nothing
Exit Sub
ErrorHandler:
'clean up
If Not rstAuthors Is Nothing Then
If rstAuthors.State = adStateOpen Then rstAuthors.Close
End If
Set rstAuthors = Nothing
If Not Cnxn Is Nothing Then
If Cnxn.State = adStateOpen Then Cnxn.Close
End If
Set Cnxn = Nothing
If Err <> 0 Then
MsgBox Err.Source & "-->" & Err.Description, , "Error"
End If
End Sub
'EndSaveVB
此时,您已经到达目的地。 你将作为本地断开连接的 Recordset 访问“作者”表。 注意,在使用的计算机上必须有 MSPersist 提供程序才能访问已保存的文件 a:\Pubs.xml。
'BeginSave2VB
Public Sub Main()
On Error GoTo ErrorHandler
Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset
'For sake of illustration, we specify all parameters
rst.Open "c:\Pubs.xml", "Provider=MSPersist;", adOpenForwardOnly, adLockBatchOptimistic, adCmdFile
'Now you have a local, disconnected Recordset - Edit as you desired
'(In this example the change makes no difference)
rst.Find "au_lname = 'Carson'"
If rst.EOF Then
Debug.Print "Name not found."
Exit Sub
End If
rst!city = "Chicago"
rst.Update
'Save changes in ADTG format this time, purely for sake of illustration.
'Note that the previous version is still on the diskette, as a:\Pubs.xml.
rst.Save "c:\Pubs.adtg", adPersistADTG
' clean up
rst.Close
Set rst = Nothing
Exit Sub
ErrorHandler:
'clean up
If Not rst Is Nothing Then
If rst.State = adStateOpen Then rst.Close
End If
Set rst = Nothing
If Err <> 0 Then
MsgBox Err.Source & "-->" & Err.Description, , "Error"
End If
End Sub
'EndSave2VB
最后,您返回家中。 现在用所做的更改来更新数据库。
'BeginSave3VB
Public Sub Main()
On Error GoTo ErrorHandler
'To integrate this code
'replace the data source and initial catalog values
'in the connection string
Dim Cnxn As New ADODB.Connection
Dim rst As ADODB.Recordset
Dim strCnxn As String
Set rst = New ADODB.Recordset
' The lock mode is batch optimistic because we are going to
' use the UpdateBatch method.
rst.Open "c:\Pubs.adtg", "Provider=MSPersist;", adOpenForwardOnly, adLockBatchOptimistic, adCmdFile
' Connect to the database, associate the Recordset with the connection
' then update the database table with the changed Recordset
strCnxn = "Provider=SQLOLEDB;Data Source=MySqlServer;Integrated Security=SSPI;Initial Catalog=pubs;"
Cnxn.Open strCnxn
rst.ActiveConnection = Cnxn
rst.UpdateBatch
' clean up
rst.Close
Cnxn.Close
Set rst = Nothing
Set Cnxn = Nothing
Exit Sub
ErrorHandler:
'clean up
If Not rst Is Nothing Then
If rst.State = adStateOpen Then rst.Close
End If
Set rst = Nothing
If Not Cnxn Is Nothing Then
If Cnxn.State = adStateOpen Then Cnxn.Close
End If
Set Cnxn = Nothing
If Err <> 0 Then
MsgBox Err.Source & "-->" & Err.Description, , "Error"
End If
End Sub
'EndSave3VB