Conservar los datos
Los equipos portátiles han creado la necesidad de recurrir a 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 objeto Recordset de cursor de cliente 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:
Viajar: al usar la aplicación sobre la marcha, es fundamental proporcionar la capacidad de realizar cambios y agregar nuevos registros que luego se puedan volver a conectar a la base de datos más adelante y confirmarlos.
Búsquedas actualizadas con poca frecuencia: en una aplicación, las tablas se suelen utilizarse para realizar búsquedas, por ejemplo, las tablas de impuestos estatales. Se actualizan con poca frecuencia y son de solo lectura. En lugar de volver a leer estos datos desde el servidor cada vez que se inicia la aplicación, esta simplemente puede cargar los datos de un objeto Recordset persistente localmente.
En ADO, para guardar y cargar objetos Recordset, use los métodos Recordset.Save y Recordset.Open(,,,,adCmdFile) en el objeto Recordset de ADO.
Puede usar el método Recordset Save para conservar el objeto Recordset de ADO en un archivo de un disco. (También puede guardar un objeto Recordset en un objeto Stream de ADO. Los 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 objeto Recordset cuando esté listo para usarlo. De forma predeterminada, ADO guarda el objeto Recordset en el formato propietario TableGram de datos avanzados de Microsoft (ADTG). Este formato binario se especifica mediante el valor adPersistADTG PersistFormatEnum. Como alternativa, puede elegir guardar el objeto Recordset como XML mediante adPersistXML. Para obtener más información sobre cómo guardar objetos Recordset como XML, vea Almacenamiento de registros en formato XML.
La sintaxis del método Save es la siguiente:
recordset.
Save
Destination, PersistFormat
La primera vez que guarde el objeto Recordset, es opcional especificar Destination. Si omite Destination, se creará un archivo con un nombre establecido en el valor de la propiedad Source del objeto Recordset.
Omita Destination cuando llame posteriormente a Save después de guardar por primera vez o, de lo contrario, se producirá un error en tiempo de ejecución. Si posteriormente llama a Save con un nuevo valor Destination, el objeto Recordset se guarda en el nuevo destino. Sin embargo, el nuevo destino y el destino original estarán abiertos.
Save no cierra el objeto Recordset ni Destination, por lo que puede seguir trabajando con el objeto Recordset y guardar los cambios más recientes. Destination permanece abierto hasta que se cierra el objeto Recordset, un tiempo durante el cual otras aplicaciones pueden leer pero no escribir en Destination.
Por motivos de seguridad, el método Save solo permite usar configuraciones de seguridad baja y personalizada de un script ejecutado por Microsoft Internet Explorer.
Si se llama al método Save mientras está en curso una operación asincrónica de recuperación de cambios, ejecución o actualización de Recordset, Save espera hasta que se completa la operación asincrónica.
Los registros se guardan a partir de la primera fila del objeto Recordset. Cuando finalice el método Save, la posición de fila actual se mueve a la primera fila del objeto 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 objeto Recordset se almacena con la propiedad CursorLocation establecida en adUseServer, la funcionalidad de actualización del objeto Recordset está limitada. Normalmente, solo se permiten actualizaciones, inserciones y eliminaciones de una sola tabla (según la funcionalidad del proveedor). El método Resync tampoco 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 objeto Recordset directamente en el objeto Response de ASP.
En el ejemplo siguiente, los métodos Save y Open se usan para almacenar un objeto Recordset y volver a abrirlo más tarde:
'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
Comentarios
Esta sección contiene los temas siguientes.