Persistência de dados
A computação portátil (por exemplo, o uso de laptops) gerou a necessidade de aplicativos que podem ser executados em um estado conectado e desconectado. O ADO adicionou suporte para isso, dando ao desenvolvedor a capacidade de salvar um Recordset do cursor do cliente em disco e recarregá-lo mais tarde.
Há vários cenários em que você pode usar esse tipo de recurso, incluindo os seguintes:
Viagens: quando o aplicativo é usado na estrada, é essencial fornecer a capacidade de fazer alterações e adicionar novos registros que possam ser posteriormente reconectados ao banco de dados e confirmados.
Pesquisas atualizadas com pouca frequência: geralmente, em um aplicativo, as tabelas são usadas como pesquisas, por exemplo, tabelas fiscais estaduais. Elas são atualizadas com pouca frequência e são somente leitura. O aplicativo poderá simplesmente carregar os dados de um Recordset persistente localmente em vez de reler esses dados do servidor sempre que for iniciado.
No ADO, para salvar e carregar Recordsets, use os métodos Recordset.Save e Recordset.Open(,,,,adCmdFile) no objeto Recordset do ADO.
Use o método Recordset Save para persistir o Recordset do ADO em um arquivo em um disco. (Salve também um Recordset em um objeto Stream do ADO. Os objetos Stream serão abordados mais adiante no guia). Posteriormente, você pode usar o método Open para reabrir o Recordset quando estiver pronto para usá-lo. Por padrão, o ADO salva o Recordset no formato ADTG (Advanced Data TableGram) proprietário da Microsoft. Esse formato binário é especificado por meio do valor adPersistADTG PersistFormatEnum. Como alternativa, você pode optar por salvar o Recordset como XML usando adPersistXML. Para obter mais informações sobre como salvar Recordsets como XML, confira Como persistir registros no formato XML.
A sintaxe do método Save é a seguinte:
recordset.
Save
Destination, PersistFormat
Na primeira vez que você salva o Recordset, é opcional a especificação de Destination. Se você omitir Destination, um arquivo será criado com um nome definido como o valor da propriedade Source do Recordset.
Omita Destination quando chamar Salvar posteriormente após o primeiro salvamento ou ocorrerá um erro em tempo de execução. Se, posteriormente, você chamar Save com um novo Destination, o Recordset será salvo no novo destino. No entanto, o novo destino e o destino original serão abertos.
Save não fecha o Recordset nem o Destination. Portanto, você pode continuar trabalhando com o Recordset e salvar as alterações mais recentes. O Destination permanece aberto até que o Recordset seja fechado, durante o qual outros aplicativos podem fazer leituras, mas não gravações no Destination.
Por motivos de segurança, o método Save só permite o uso de configurações de segurança baixas e personalizadas de um script executado pelo Microsoft Internet Explorer.
Se o método Save for chamado enquanto uma operação assíncrona de busca, execução ou atualização de Recordset estiver em andamento, Save aguardará até que a operação assíncrona seja concluída.
Os registros são salvos começando na primeira linha do Recordset. Quando o método Save é concluído, a posição da linha atual é movida para a primeira linha do Recordset.
Para obter melhores resultados, defina a propriedade CursorLocation como adUseClient com Save. Se o provedor não der suporte a todas as funcionalidades necessárias para salvar objetos Recordset, o Serviço de Cursor fornecerá essa funcionalidade.
Quando um Recordset é persistente com a propriedade CursorLocation definida como adUseServer, a funcionalidade de atualização do Recordset fica limitada. Normalmente, somente as atualizações de tabela única, as inserções e as exclusões são permitidas (dependentes da funcionalidade do provedor). O método Resync também não está disponível nessa configuração.
Como o parâmetro Destination pode aceitar qualquer objeto que dê suporte à interface IStream do OLE DB, você pode salvar um Recordset diretamente no objeto Response do ASP.
No seguinte exemplo, os métodos Save e Open são usados para persistir um Recordset e reabri-lo posteriormente:
'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
Comentários
Esta seção contém os seguintes tópicos.