Compartilhar via


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.