Persistance des données
L’informatique portable (par exemple, à l’aide d’ordinateurs portables) a généré la nécessité pour les applications qui peuvent s’exécuter à la fois dans un état connecté et déconnecté. ADO a ajouté la prise en charge de ce problème en donnant au développeur la possibilité d’enregistrer un curseur client Recordset sur le disque et de le recharger ultérieurement.
Il existe plusieurs scénarios dans lesquels vous pouvez utiliser ce type de fonctionnalité, notamment les suivants :
Voyage : Lorsque vous utilisez l’application en déplacement, il est essentiel de fournir la possibilité d’apporter des modifications et d’ajouter de nouveaux enregistrements qui peuvent ensuite être reconnectés à la base de données ultérieurement et validés.
consultations de données rarement mises à jour : Souvent dans une application, les tables sont utilisées comme tables de consultation, par exemple des tables fiscales des États. Elles sont rarement mises à jour et sont en lecture seule. Au lieu de relire ces données à partir du serveur chaque fois que l’application est démarrée, l’application peut simplement charger les données à partir d’un jeu d’enregistrements localement persistant.
Dans ADO, pour enregistrer et charger recordsets, utilisez les méthodes Recordset.Save et Recordset.Open(,,,,adCmdFile) sur l’objet Recordset ADO Recordset.
Vous pouvez utiliser la méthode Recordset Save pour conserver votre jeu d’enregistrements ADO dans un fichier sur un disque. (Vous pouvez également enregistrer un jeu d’enregistrements dans un objet Stream ADO. objets Stream sont abordés plus loin dans le guide.) Plus tard, vous pouvez utiliser la méthode Open pour rouvrir le jeu d’enregistrements lorsque vous êtes prêt à l’utiliser. Par défaut, ADO enregistre le jeu d’enregistrements au format Microsoft Advanced Data TableGram (ADTG) propriétaire. Ce format binaire est spécifié à l’aide de la valeur adPersistADTG PersistFormatEnum. Vous pouvez également choisir d’enregistrer votre jeu d’enregistrements au format XML. Pour cela, utilisez adPersistXML. Pour plus d’informations sur l’enregistrement des Recordsets sous forme de XML, consultez conserver des enregistrements au format XML.
La syntaxe de la méthode Save est la suivante :
recordset.
Save
Destination, PersistFormat
La première fois que vous enregistrez le jeu d’enregistrements , il est facultatif de spécifier la destination . Si vous omettez Destination, un nouveau fichier sera créé avec un nom défini par la valeur de la propriété Source du jeu d’enregistrements .
Omettez Destination lorsque vous appeliez ensuite Enregistrer après le premier enregistrement ou une erreur d’exécution pourrait se produire. Si vous appelez par la suite Enregistrer avec une nouvelle destination, le jeu d’enregistrements est enregistré dans la nouvelle destination. Toutefois, la nouvelle destination et la destination d’origine seront ouvertes.
Enregistrer ne ferme pas le jeu d’enregistrements ou le Destination, vous pouvez donc continuer à travailler avec le jeu d’enregistrements et enregistrer vos modifications les plus récentes. Destination reste ouverte jusqu’à ce que l’ensemble d'enregistrements soit fermé, pendant lequel d’autres applications peuvent lire, mais pas écrire dans destination.
Pour des raisons de sécurité, la méthode Save autorise uniquement l’utilisation de paramètres de sécurité faibles et personnalisés à partir d’un script exécuté par Microsoft Internet Explorer.
Si la méthode Sauvegarder est appelée pendant qu’une opération d’extraction, d'exécution ou de mise à jour d’un jeu d’enregistrements asynchrone est en cours, Sauvegarder attend que l’opération asynchrone soit terminée.
Les enregistrements sont sauvegardés en commençant par la première ligne du jeu d'enregistrements . Lorsque la méthode Save est terminée, la position de ligne actuelle est déplacée vers la première ligne du jeu d’enregistrements .
Pour obtenir de meilleurs résultats, définissez la propriété CursorLocation sur adUseClient avec sauvegarde. Si votre fournisseur ne prend pas en charge toutes les fonctionnalités nécessaires pour enregistrer recordset objets, le service cursor fournit cette fonctionnalité.
Lorsqu’un jeu d’enregistrements est conservé avec la propriété CursorLocation définie sur adUseServer, la fonctionnalité de mise à jour pour le jeu d’enregistrements est limitée. En règle générale, seules les mises à jour, les insertions et les suppressions d’une table unique sont autorisées (en fonction des fonctionnalités du fournisseur). La méthode Resync n’est pas disponible dans cette configuration.
Étant donné que le paramètre Destination peut accepter n’importe quel objet prenant en charge l’interface IStream OLE DB, vous pouvez enregistrer un jeu d’enregistrements directement dans l’objet ASP Response.
Dans l’exemple suivant, les méthodes Save et Open sont utilisées pour conserver un jeu d’enregistrements et le rouvrir ultérieurement :
'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
Remarques
Cette section contient les rubriques suivantes.