Поделиться через


Сохранение данных

Переносимые вычисления (например, с помощью ноутбуков) создали потребность в приложениях, которые могут выполняться как в подключенном, так и в отключенном состоянии. ADO добавила поддержку этого, предоставив разработчику возможность сохранить клиентский курсор набор записей на диск и перезагрузить его позже.

Существует несколько сценариев, в которых можно использовать этот тип функции, в том числе следующие:

  • Путешествия: при использовании приложения в дороге жизненно важно предоставить возможность вносить изменения и добавлять новые данные, которые затем можно повторно подключить к базе данных позже и сохранить.

  • редко обновляемые справочники: Часто в приложении таблицы используются в качестве поисковых таблиц, например, таблицы налогов штатов. Они редко обновляются и доступны только для чтения. Вместо повторного чтения этих данных с сервера при каждом запуске приложения приложение может просто загрузить данные из локально сохраняемого набора записей .

Чтобы сохранить и загрузить наборы записей ADO, используйте методы Recordset.Save и Recordset.Open(,,,,adCmdFile) в объекте ADO Recordset.

Для сохранения набора записей можно использовать метод сохранения набора записей ADO Recordset в файл на диске. (Вы также можете сохранить набора записей в объект ADO Stream. объекты Stream рассматриваются далее в руководстве.) Позже можно использовать метод Open для повторного открытия набора записей, когда вы будете готовы к использованию. По умолчанию ADO сохраняет набор записей в собственный формат Microsoft Advanced DataGram (ADTG). Этот двоичный формат указывается с помощью значения adPersistADTG PersistFormatEnum. Кроме того, можно сохранить набор записей в виде XML вместо использования adPersistXML. Дополнительные сведения о сохранении наборов записей в виде XML см. в разделе Сохранение записей в формате XML.

Синтаксис метода Сохранить выглядит следующим образом:

  
recordset.  
Save  
Destination, PersistFormat  
  

При первом сохранении набора записейможно не указывать место назначения. Если опустить назначения, новый файл будет создан со значением свойства Source набора записей .

Пропустите назначение при последующем вызове Сохранить после первого сохранения, иначе произойдет ошибка времени выполнения. При последующем вызове сохранения с новым назначениемнабор записей сохраняется в новом месте назначения. Однако новый пункт назначения и исходный пункт назначения будут открыты.

Сохранить не закрывает набор записей или назначение, чтобы продолжить работу с набором записей и сохранить последние изменения. место назначения остается открытым до тех пор, пока не будет закрыт набор записей , в течение этого времени другие приложения могут читать, но не записывать в место назначения .

По соображениям безопасности метод Save позволяет использовать только низкие и настраиваемые параметры безопасности из скрипта, выполняемого Microsoft Internet Explorer.

Если метод Save вызывается во время выполнения асинхронной операции получения, исполнения или обновления набора записей Recordset, Save ожидает завершения асинхронной операции.

Записи сохраняются начиная с первой строки набора записей . После завершения метода Save позиция текущей строки перемещается на первую строку набора записей .

Для получения наилучших результатов задайте свойству CursorLocation значение adUseClient с Save. Если поставщик не поддерживает все функциональные возможности, необходимые для сохранения Набор записей объектов, служба курсоров предоставит эту функцию.

Если набор записей сохраняется с установленным значением свойства CursorLocation на adUseServer, возможность обновления набора записей ограничена. Как правило, разрешены только одно табличные обновления, вставки и удаления (зависят от функциональности поставщика). Метод Resync также недоступен в этой конфигурации.

Так как параметр целевого может принимать любой объект, поддерживающий интерфейс IStream OLE DB, можно сохранить набор записей непосредственно в объект ASP Response.

В следующем примере методы save и Open используются для сохранения набора записей и последующего повторного открытия:

'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  

Замечания

Этот раздел содержит следующие разделы.