Persistencia de datos
La informática portátil (por ejemplo, el uso de portátiles) ha generado la necesidad de aplicaciones que se pueden ejecutar en un estado conectado y desconectado. ADO ha agregado compatibilidad con esto al proporcionar al desarrollador la capacidad de guardar un cursor de cliente recordset en el disco y volver a cargarlo más adelante.
Hay varios escenarios en los que podría usar este tipo de característica, incluidos los siguientes:
Viaje: Al llevar la aplicación fuera de la oficina, es fundamental proporcionar la capacidad de realizar cambios y agregar nuevos registros que luego se pueden volver a conectar a la base de datos más adelante y guardar.
consultas de datos que se actualizan con poca frecuencia: a menudo, en una aplicación, las tablas se utilizan como consultas de datos, por ejemplo, tablas fiscales estatales. Se actualizan con poca frecuencia y son de solo lectura. En lugar de volver a leer estos datos del servidor cada vez que se inicia la aplicación, la aplicación puede simplemente cargar los datos de un Recordset persistente localmente .
En ADO, para guardar y cargar conjuntos de registros, use los métodos Recordset.Save y Recordset.Open(,,,,adCmdFile) en el objeto conjunto de registros de ADO.
Puede usar el método Save Recordset para conservar el recordset de ADO en un archivo de un disco. (También puede guardar un recordset de en un objeto de stream de ADO. objetos Stream se describen más adelante en la guía). Más adelante, puede usar el método Open para volver a abrir el Recordset cuando esté listo para usarlo. De forma predeterminada, ADO guarda el recordset en el formato propietario microsoft Advanced Data TableGram (ADTG). Este formato binario se especifica mediante el valor adPersistADTG PersistFormatEnum. Como alternativa, puede elegir guardar el conjunto de registros de como XML en su lugar mediante adPersistXML. Para obtener más información sobre cómo guardar conjuntos de registros como XML, vea Registros persistentes en formato XML.
La sintaxis del método Save es la siguiente:
recordset.
Save
Destination, PersistFormat
La primera vez que guarda el Recordset, es opcional especificar Destino. Si omite Destination, se creará un nuevo archivo con un nombre establecido en el valor de la propiedad Source del Recordset.
Omita Destino cuando llame posteriormente a Guardar después del primer guardado o se producirá un error en tiempo de ejecución. Si posteriormente llama a Save con un nuevo Destination, se guarda el Recordset en la nueva ubicación. Sin embargo, el nuevo destino y el destino original estarán abiertos.
Guardar no cierra el Recordset o el Destination, por lo que puede seguir trabajando con el Recordset y guardar sus cambios más recientes. Destino permanece abierto hasta que se cierra el recordset, durante este tiempo otras aplicaciones pueden leer, pero no escribir en Destino.
Por motivos de seguridad, el método Save permite solo el uso de la configuración de seguridad baja y personalizada desde un script ejecutado por Microsoft Internet Explorer.
Si se llama al método Save mientras se está realizando una operación asincrónica de recuperación, ejecución o actualización del Recordset, Save espera hasta que se complete la operación asincrónica.
Los registros se guardan a partir de la primera fila del conjunto de registros de . Cuando finaliza el método Save, la posición de fila actual se mueve a la primera fila del Recordset.
Para obtener los mejores resultados, establezca la propiedad CursorLocation en adUseClient con Save. Si el proveedor no admite toda la funcionalidad necesaria para guardar objetos Recordset, el Servicio de Cursor proporcionará esa funcionalidad.
Cuando un Recordset se conserva con la propiedad CursorLocation establecida en adUseServer, la capacidad de actualización para el Recordset es limitada. Normalmente, solo se permiten actualizaciones, inserciones y eliminaciones de una sola tabla (en función de la funcionalidad del proveedor). El método Resync también no está disponible en esta configuración.
Dado que el parámetro Destination puede aceptar cualquier objeto que admita la interfaz IStream de OLE DB, puede guardar un Recordset directamente en el objeto ASP Response.
En el ejemplo siguiente, los métodos Save y Open se usan para conservar un recordset de y volver a abrirlo más adelante:
'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
Observaciones
Esta sección contiene los temas siguientes.