共用方式為


保存資料

可攜式運算 (例如,使用膝上型電腦) 已產生對應用程式的需求,也就是可以在連線和中斷連線的狀態中執行。 ADO 已藉由讓開發人員能夠將用戶端資料指標 Recordset 儲存至磁碟並稍後重新載入,藉此來新增此支援。

有數種案例可讓您使用這種類型的功能,包括下列項目:

  • 旅行:在行進間使用應用程式時,重點在於提供進行變更的能力,以及新增可稍後重新連線至資料庫並認可的新記錄。

  • 不常更新的查閱:通常在應用程式中,資料表會用於查閱,例如州稅資料表。 這些查閱不常更新,而且是唯讀的。 每次啟動應用程式時,應用程式都可以直接從本機保存的 Recordset載入資料,而非從伺服器重新讀取此資料。

在 ADO 中,若要儲存和載入 Recordets,請使用 ADO Recordset物件上的 Recordset.SaveRecordset.Open (,,,,adCmdFile) 方法。

您可以使用 Recordset Save 方法,將 ADO Recordset 保存至磁碟上的檔案。 (您也可以將 Recordset 儲存至 ADO Stream 物件。指南中稍後會討論 Stream 物件。) 之後,您可以在準備好使用時,使用 Open 方法來重新開啟 Recordset。 依預設,ADO 會將 Recordset 儲存至專屬的 Microsoft Advanced Data TableGram (ADTG) 格式。 這個二進位格式是使用 adPersistADTG PersistFormatEnum 值來指定。 或者,您可以選擇將 Recordset 儲存為 XML,而非使用 adPersistXML。 如需將資料錄集儲存為 XML 的詳細資訊,請參閱 以 XML 格式保存記錄

Save 方法的語法如下所示:

  
recordset.  
Save  
Destination, PersistFormat  
  

第一次儲存 Recordset 時,您可以選擇指定 Destination。 如果您省略 Destination,系統將會建立新的檔案,並將名稱設定為 RecordsetSource 屬性值。

當您後續在第一次儲存或發生執行階段錯誤之後呼叫 Save 時,請省略 Destination。 如果您接著使用新的 Destination 呼叫 SaveRecordset 就會儲存至新的目的地。 不過,新的目的地和原始目的地都會開啟。

Save 不會關閉 RecordsetDestination,因此您可以繼續使用 Recordset 並儲存最近的變更。 Destination 會保持開啟狀態,直到 Recordset 關閉為止,在此期間,其他應用程式可以讀取但無法寫入至 Destination

基於安全性考量,Save 方法只允許從 Microsoft Internet Explorer 執行的指令碼使用低和自訂安全性設定。

如果在非同步 Recordset 擷取、執行或更新作業正在進行時呼叫 Save 方法,Save 會等到非同步作業完成為止。

記錄會從 Recordset 的第一個資料列開始儲存。 當 Save 方法完成時,目前的資料列位置會移至 Recordset 的第一個資料列。

為了獲得最佳結果,請使用 SaveCursorLocation 屬性設定為 adUseClient。 如果您的提供者不支援儲存 Recordset 物件所需的所有功能,資料指標服務將會提供該功能。

Recordset 保存時 CursorLocation 屬性設定為 adUseServerRecordset 的更新功能會受到限制。 一般而言,只允許單一資料表更新、插入和刪除 (相依於提供者功能)。 此設定中也無法使用 Resync 方法。

由於 Destination 參數可以接受任何支援 OLE DB IStream 介面的物件,因此您可以將 Recordset 直接儲存至 ASP Response 物件。

在下列範例中,SaveOpen 方法是用來保存 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  

備註

此章節包含下列主題。