Compartilhar via


Dados persistentes

Aplica-se ao: Access 2013, Office 2013

A computação portátil (por exemplo, a utilização de laptops) gerou a necessidade de aplicativos que possam ser executados conectados e desconectados. O ADO adicionou suporte a isso, permitindo ao desenvolvedor salvar um Recordset de cursor do cliente no disco e recarregá-lo posteriormente.

Há vários cenários nos quais você poderia usar esse tipo de recurso, incluindo os seguintes:

  • Viagens: ao levar o aplicativo em viagem, é 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 raramente: Frequentemente em um aplicativo as tabelas são usadas como pesquisas — por exemplo, as tabelas de impostos estaduais. Elas são atualizadas raramente e são somente leitura. Em vez de reler esses dados do servidor cada vez que o aplicativo é iniciado, ele pode simplesmente carregar os dados de um Recordset mantido localmente.

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

Pode utilizar o método Guardar conjunto de registos para manter o conjunto de registos ADO num ficheiro num disco. (Também pode guardar um Conjunto de registos num objeto do ADO Stream . Os objetos de transmissão em fluxo são abordados mais tarde no guia.) Mais tarde, pode utilizar o método Abrir para reabrir o Conjunto de Registos quando estiver pronto para utilizá-lo. Por padrão, o ADO salva o Recordset no formato Microsoft Advanced Data TableGram (ADTG) proprietário. Este formato binário é especificado com o valor adPersistADTGPersistFormatEnum . Alternativamente, você pode salvar seu Recordset fora, como XML, em vez de usar o adPersistXML. Para obter mais informações sobre como salvar Recordsets como XML, consulte Mantendo registros em formato XML.

A sintaxe do método Save é a seguinte:

recordset.Save Destination, PersistFormat

Na primeira vez que você salva o Recordset, é opcional especificar Destination. Se você omitir Destination, será criado um novo arquivo com o nome definido como o valor da propriedade Source do Recordset.

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

Save não fecha o Recordset ou Destination, então você poderá continuar trabalhando com o Recordset e salvar suas alterações mais recentes. Destination permanecerá aberto até que o Recordset seja fechado e, durante esse tempo, outros aplicativos poderá ler mas não gravar em Destination.

Por motivos de segurança, o método Save permite apenas a utilização de definições de segurança baixas e personalizadas a partir de um script executado pelo Microsoft Internet Explorer. Para obter uma explicação mais detalhada dos problemas de segurança, consulte "ADO and RDS Security Issues in Microsoft Internet Explorer" sob Artigos Técnicos do ActiveX Data Objects (ADO) nos Artigos Técnicos de Acesso a Dados da Microsoft.

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

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

Para obter melhores resultados, defina a propriedade CursorLocation para adUseClient com Save. Se o provedor não oferecer suporte a toda a funcionalidade necessária para salvar objetos Recordset, o Cursor Service fornecerá essa funcionalidade.

Quando um Recordset for mantido com a propriedade CursorLocation definida como adUseServer, a capacidade de atualização do Recordset será limitada. Normalmente, apenas atualizações, inserções e exclusões de tabela única são permitidas (dependendo da funcionalidade do provedor). O método Resync também está indisponível nessa configuração.

Como o parâmetro Destination pode aceitar qualquer objeto que ofereça suporte à interface IStream do banco de dados OLE, é possível salvar um Recordset diretamente no objeto Response do ASP.

No exemplo a seguir, os métodos Save e Open são usados para manter 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 
 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 

Esta seção inclui os seguintes tópicos: