保存資料
可攜式運算(例如,使用膝上型計算機)已產生應用程式的需求,這些應用程式可以在連線和中斷連線的狀態中執行。 ADO 已新增對此的支援,讓開發人員能夠將用戶端數據指標儲存至磁碟 Recordset,稍後再重載。
有數種案例可讓您使用這種類型的功能,包括下列專案:
旅行: 在路上執行應用程式時,必須提供進行變更並新增紀錄的能力,以便稍後重新連線到資料庫並提交。
不常更新的查找表: 在應用程式中,資料表經常用作查找表,例如州稅資料表。 它們不常更新,而且是唯讀的。 應用程式不需要在每次啟動應用程式時從伺服器重新讀取此資料,而是只需從本機保存的數據載入 Recordset。
在 ADO 中,若要儲存和載入 Recordsets,請在 ADO Recordset 物件上使用 Recordset.Save 和 Recordset.Open(,,,,adCmdFile) 方法。
您可以使用 Recordset Save 方法來將 ADO Recordset 儲存到硬碟上的檔案中。 (您也可以將 Recordset 儲存至 ADO Stream 物件。Stream 物件稍後會在本指南中討論。稍後,您可以使用 Open 方法,在準備好使用它時重新開啟 Recordset。 根據預設,ADO 會將 Recordset 儲存為專屬的 Microsoft Advanced Data TableGram (ADTG) 格式。 這個二進位格式是使用 adPersistADTG PersistFormatEnum 值來指定。 或者,您可以選擇將 Recordset 儲存為 XML,而改用 adPersistXML。 如需將 Recordets 儲存為 XML 的詳細資訊,請參閱 以 XML 格式保存記錄。
Save 方法的語法如下:
recordset.
Save
Destination, PersistFormat
第一次儲存 Recordset時,您可以選擇指定 Destination。 如果您省略 Destination,將會建立新的檔案,並將名稱設為 Recordset的 Source 屬性的值。
在第一次儲存之後,如果您再次呼叫 Save,請省略 目的地,否則會發生運行時錯誤。 如果您接著使用新的 Destination呼叫 Save ,則會將 Recordset 儲存到新的目的地。 不過,新的目的地和原始目的地都會開放。
儲存 不會關閉 Recordset 或 Destination,因此您可以繼續使用 Recordset 並儲存最近的變更。 目的地 會保持開啟狀態,直到 Recordset 關閉為止,在此期間,其他應用程式可以讀取但無法寫入目的地 。
基於安全性考慮,Save 方法只允許使用 Microsoft Internet Explorer 所執行之腳本的低和自定義安全性設定。
如果在異步 Recordset 擷取、執行或更新作業進行中呼叫 Save 方法,則 Save 將等到這些異步作業完成為止。
記錄會從 Recordset 的第一個資料列開始儲存,。 當 Save 方法完成時,目前的數據列位置會移至 Recordset的第一個數據列。
為達到最佳效果,請將 CursorLocation 屬性設為 adUseClient 並搭配 Save。 如果您的提供者不支援儲存 Recordset 物件所需的所有功能,Cursor Service 會提供該功能。
當 Recordset 被保存,並將 CursorLocation 屬性設定為 adUseServer時,Recordset 的更新功能會受到限制。 一般而言,只允許單一數據表更新、插入和刪除(取決於提供者功能)。 此設定中也無法使用 Resync 方法。
由於 Destination 參數可以接受任何支援 OLE DB IStream 介面的物件,因此您可以將 Recordset 直接儲存至 ASP Response 物件。
在下列範例中,Save 和 Open 方法可用來保存 Recordset,稍後再重新開啟它:
'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
備註
本節包含下列主題。