便携式计算(例如,使用笔记本电脑)生成了可以同时处于连接状态和断开连接状态运行的应用程序的需求。 ADO 添加了对此的支持,使开发人员能够将客户端游标保存到磁盘,Recordset 磁盘并稍后重新加载它。
您可以在以下几种情境中使用这种类型的功能:
旅行: 在路上使用应用程序时,必须提供进行更改和添加新记录的能力,然后稍后重新连接到数据库并提交。
不经常更新的查找表: 通常,数据表用作查找,比如州税表。 它们不经常更新,并且是只读的。 应用程序每次启动时,都无需从服务器重新读取此数据,只需从本地持久化 Recordset加载数据。
在 ADO 中,若要保存和加载 记录集,请使用 ADO Recordset 对象上的 Recordset.Save 和 Recordset.Open(,,,,adCmdFile) 方法。
可以使用 Recordset Save 方法将 ADO Recordset 保存到磁盘上的文件。 (还可以将 Recordset 保存到 ADO Stream 对象。本指南稍后将讨论 Stream 对象。稍后,可以使用 Open 方法在准备好使用它时重新打开 Recordset。 默认情况下,ADO 将 Recordset 保存到专有Microsoft高级数据表语法(ADTG)格式。 此二进制格式是使用 adPersistADTG PersistFormatEnum 值指定的。 或者,可以选择将 Recordset 保存为 XML,而不是使用 adPersistXML。 有关将记录集保存为 XML 的详细信息,请参阅 以 XML 格式保存记录。
Save 方法的语法如下所示:
recordset.
Save
Destination, PersistFormat
首次保存 记录集时,可以选择指定 目标。 如果省略 目标,则将创建一个新文件,其名称设置为 Recordset的 Source 属性的值。
在第一次保存后,如果您再次调用 “保存”,请省略 “目标”,否则会出现运行时错误。 如果随后使用新的 目标调用 保存,Recordset 将保存到新目标。 但是,新目标和原始目标都将开放。
保存 不会关闭 记录集 或 目标,因此可以继续使用 Recordset 并保存最近的更改。 目标 保持打开状态,直到 记录集 关闭,在此期间,其他应用程序可以读取但不能写入 目标。
出于安全考虑,Save 方法仅允许使用由 Microsoft Internet Explorer 执行的脚本中的低自定义安全设置。
如果在异步 记录集 提取、执行或更新操作时调用 Save 方法,保存 等待异步操作完成。
记录从 记录集的第一行开始保存。 Save 方法完成后,当前行位置将移动到 Recordset的第一行。
为了获得最佳结果,请将 CursorLocation 属性设置为 adUseClient,并使用 Save。 如果提供程序不支持保存 Recordset 对象所需的所有功能,游标服务将提供该功能。
当 Recordset 保留时,CursorLocation 属性设置为 adUseServer,则 Recordset 的更新功能受到限制。 通常,只允许单表更新、插入和删除(依赖于提供程序功能)。 重新同步 方法在此配置中也不可用。
由于 Destination 参数可以接受支持 OLE DB IStream 接口的任何对象,因此可以直接将 Recordset 保存到 ASP Response 对象。
在以下示例中,保存 和 打开 方法用于保存 记录集,稍后重新打开它:
'BeginPersist
conn.ConnectionString = _
"Provider=SQLOLEDB;Data Source=MySQLServer;" _
& "Integrated Security=SSPI;Initial Catalog=pubs"
conn.Open
conn.Execute "create table testtable (dbkey int " & _
"primary key, field1 char(10))"
conn.Execute "insert into testtable values (1, 'string1')"
Set rst.ActiveConnection = conn
rst.CursorLocation = adUseClient
rst.Open "select * from testtable", conn, adOpenStatic, _
adLockBatchOptimistic
'Change the row on the client
rst!field1 = "NewValue"
'Save to a file--the .dat extension is an example; choose
'your own extension. The changes will be saved in the file
'as well as the original data.
MyFile = Dir("c:\temp\temptbl.dat")
If MyFile <> "" Then
Kill "c:\temp\temptbl.dat"
End If
rst.Save "c:\temp\temptbl.dat", adPersistADTG
Set rst = Nothing
'Now reload the data from the file
Set rst = New ADODB.Recordset
rst.Open "c:\temp\temptbl.dat", , adOpenStatic, _
adLockBatchOptimistic, adCmdFile
Debug.Print "After Loading the file from disk"
Debug.Print " Current Edited Value: " & rst!field1.Value
Debug.Print " Value Before Editing: " & rst!field1.OriginalValue
'Note that you can reconnect to a connection and
'submit the changes to the data source
Set rst.ActiveConnection = conn
rst.UpdateBatch
'EndPersist
言论
本节包含以下主题。