Сохранение данных
Область применения: Access 2013, Office 2013
Переносимые вычисления (например, с помощью ноутбуков) вызвали потребность в приложениях, которые могут выполняться как в подключенном, так и в отключенном состоянии. ADO добавил поддержку для этого, предоставив разработчику возможность сохранить набор записей курсора клиента на диск и перезагрузить его позже.
Существует несколько сценариев, в которых можно использовать эту функцию, в том числе следующие:
Передвижной: При приеме приложения в дороге крайне важно предоставить возможность вносить изменения и добавлять новые записи, которые затем можно будет повторно подключить к базе данных и зафиксировать.
Редко обновляемые подстановки: Часто в приложении таблицы используются в качестве подстановок, например таблицы налогов штата. Они редко обновляются и доступны только для чтения. Вместо того чтобы повторно считывать эти данные с сервера при каждом запуске приложения, приложение может просто загрузить данные из локально сохраненного набора записей.
В ADO для сохранения и загрузки наборов записей используйте методы Recordset.Save и Recordset.Open(,,,,adCmdFile) в объекте ADO Recordset .
Вы можете использовать метод Сохранение набора записей для сохранения ADO Recordset в файле на диске. (Вы также можете сохранить набор записей в объект ADO Stream . Объекты Stream рассматриваются далее в руководстве.) Позже вы можете использовать метод Open для повторного открытия набора записей , когда вы будете готовы к его использованию. По умолчанию ADO сохраняет набор записей в собственный формат Microsoft Advanced Data TableGram (ADTG). Этот двоичный формат задается с помощью значения adPersistADTGPersistFormatEnum . Кроме того, можно сохранить набор записей в формате XML с помощью adPersistXML. Дополнительные сведения о сохранении наборов записей в формате XML см. в разделе Сохранение записей в формате XML.
Синтаксис метода Save выглядит следующим образом:
recordset.Save Destination, PersistFormat
При первом сохранении набора записей необязательно указывать назначение. Если опустить назначение, будет создан новый файл со значением свойства Sourceнабора записей.
Опустите назначение при последующем вызове Save после первого сохранения или возникнет ошибка во время выполнения. При последующем вызове команды Сохранить с новым назначениемнабор записей сохраняется в новом назначении. Однако новое и исходное назначение будут открыты.
Сохранение не закрывает набор записей или назначение, поэтому вы можете продолжить работу с набором записей и сохранить последние изменения. Назначение остается открытым до закрытия набора записей , в течение которого другие приложения могут читать, но не записывать в назначение.
По соображениям безопасности метод Save позволяет использовать только низкие и настраиваемые параметры безопасности из скрипта, выполняемого Microsoft Internet Explorer. Более подробное описание проблем с безопасностью см. в разделе "Проблемы безопасности ADO и RDS в Microsoft Internet Explorer" статьи Объекты данных ActiveX (ADO) в технических статьях Microsoft Data Access.
Если метод Save вызывается во время асинхронной операции получения, выполнения или обновления набора записей , сохранение ожидает завершения асинхронной операции.
Записи сохраняются, начиная с первой строки набора записей. По завершении метода Save текущая позиция строки перемещается в первую строку набора записей.
Для получения наилучших результатов присвойте свойству CursorLocation значение adUseClient с сохранением. Если поставщик не поддерживает все функции, необходимые для сохранения объектов Recordset , служба курсоров предоставит эту функцию.
Если набор записей сохраняется со свойством CursorLocation , для свойства имеет значение adUseServer, возможность обновления для набора записей ограничена. Как правило, допускаются только обновления, вставки и удаления из одной таблицы (в зависимости от функциональности поставщика). Метод Resync также недоступен в этой конфигурации.
Так как параметр Destination может принимать любой объект, поддерживающий интерфейс 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
rst.Close
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
В этой статье содержатся следующие разделы: