Partilhar via


Persistência de Dados

A computação portátil (por exemplo, usando 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 cursor do cliente recordset em disco e recarregá-lo mais tarde.

Há vários cenários em que você pode usar esse tipo de recurso, incluindo o seguinte:

  • Viajando: Ao usar o aplicativo em trânsito, é vital fornecer a capacidade de fazer alterações e adicionar novos registros que podem ser reconectados ao banco de dados mais tarde e confirmados.

  • consultas raramente atualizadas: Geralmente, em um aplicativo, as tabelas são usadas como tabelas de referência, por exemplo, tabelas fiscais estaduais. Eles são raramente atualizados e são apenas para leitura. Em vez de reler esses dados do servidor sempre que o aplicativo for iniciado, o aplicativo pode simplesmente carregar os dados de um conjunto de registros localmente persistente.

No ADO, para salvar e carregar recordsets, use os métodos Recordset.Save e Recordset.Open(,,,,adCmdFile) no objeto recordset do ADO.

Você pode usar o método Recordset Save para persistir o do Conjunto de Registros do ADO em um arquivo em um disco. (Você também pode salvar um Recordset em um objeto Stream do ADO. Objetos Stream são discutidos posteriormente 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 conjunto de registros no formato proprietário do Microsoft Advanced Data TableGram (ADTG). Esse formato binário é especificado usando o valor adPersistADTG PersistFormatEnum. Como alternativa, você pode optar por guardar seu conjunto de registros como XML usando adPersistXML. Para obter mais informações sobre como salvar conjuntos de registros como XML, consulte Persisting Records in XML Format.

A sintaxe do método Salvar é a seguinte:

  
recordset.  
Save  
Destination, PersistFormat  
  

Na primeira vez que você salvar o conjunto de registros , é opcional especificar Destino. Se você omitir Destino, um novo arquivo será criado com um nome baseado no valor da propriedade Source do Recordset.

Omita Destino quando você chamar Salvar após o primeiro salvamento ou ocorrerá um erro em tempo de execução. Se você subsequentemente chamar Salvar com um novo Destino, o Recordset será salvo no novo destino. No entanto, o novo destino e o destino original estarão abertos.

Salvar não fecha o conjunto de registros ou destino, portanto, você pode continuar a trabalhar com o conjunto de registros e salvar suas alterações mais recentes. de Destino permanece aberto até que o do conjunto de registros seja fechado, durante o qual outros aplicativos podem ler, mas não gravar em de Destino.

Por motivos de segurança, o método Salvar permite apenas o uso de configurações de segurança baixa e personalizada de um script executado pelo Microsoft Internet Explorer.

Se o método Salvar for chamado enquanto uma operação assíncrona Recordset busca, execução ou atualização estiver em andamento, Salvar aguardará até que a operação assíncrona seja concluída.

Os registros são salvos a partir da primeira linha do conjunto de registros . Quando o método Salvar for concluído, a posição da linha atual será movida para a primeira linha do conjunto de registros .

Para obter melhores resultados, defina a propriedade CursorLocation como adUseClient ao usar Salvar. 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 é mantido com a propriedade CursorLocation definida como adUseServer, a capacidade de atualização do Recordset é limitada. Normalmente, somente atualizações de tabela única, inserções e 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 de destino pode aceitar qualquer objeto que dê suporte à interface de IStream OLE DB, você pode salvar uma do Conjunto de Registros diretamente no objeto de Resposta ASP.

No exemplo a seguir, os métodos Save e Open são usados para persistir um conjunto de registros e, posteriormente, reabri-lo:

'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  

Observações

Esta seção contém os tópicos a seguir.