Partager via


Persistance des données

S’applique à : Access 2013, Office 2013

L'informatique nomade, notamment par l'utilisation d'ordinateurs portables, a généré un besoin d'applications capables d'être exécutées à la fois de manière autonome et en réseau. ADO prend désormais en charge ce phénomène en donnant la possibilité au développeur d'enregistrer un jeu d'enregistrements de curseur client sur un disque pour le recharger ultérieurement.

Divers scénarios requièrent l'utilisation de cette fonctionnalité, notamment :

  • Déplacements : lorsque vous vous déplacez avec l'application, il est crucial de pouvoir effectuer des modifications et d'ajouter de nouveaux enregistrements qui peuvent ensuite être soumis à la base de données et validés.

  • Tables de choix rarement mises à jour : dans une application, les tables sont souvent utilisées comme des tables de choix — par exemple, les tables de taxes. Elles sont rarement mises à jour et en lecture seule. Au lieu de relire ces données à partir du serveur à chaque démarrage de l'application, cette dernière peut simplement les charger à partir d'un jeu d'enregistrements conservé localement.

Dans ADO, pour enregistrer et charger des jeux d'enregistrements, utilisez les méthodes Recordset.Save et Recordset.Open(,,,,adCmdFile) sur l'objet Recordset ADO.

Vous pouvez utiliser la méthode RecordsetSave pour conserver votre objet Recordset ADO dans un fichier sur un disque. (Vous pouvez également enregistrer un recordset dans un objet Stream ADO. Les objets Stream sont abordés plus loin dans le guide.) Par la suite, vous pouvez utiliser la méthode Open pour rouvrir l’objet Recordset lorsque vous êtes prêt à l’utiliser. Par défaut, ADO enregistre le jeu d'enregistrements au format propriétaire Microsoft Advanced Data TableGram (ADTG). Ce format binaire est spécifié à l’aide de la valeur persistFormatEnumadPersistADTG. Vous pouvez également choisir d'enregistrer votre jeu d'enregistrements au format XML en utilisant adPersistXML. Pour en savoir plus sur l'enregistrement des jeux d'enregistrements au format XML, reportez-vous à la rubrique Enregistrements persistants 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 n’est pas nécessaire d’indiquer une destination. Si vous oubliez la destination, un nouveau fichier est créé et nommé selon la valeur de la propriété Source du jeu d’enregistrements.

Omettez destination lorsque vous appelez par la suite Enregistrer après le premier enregistrement, ou une erreur d’exécution se produit. Si, par la suite, vous appelez Save avec un nouveau paramètre Destination, l'objet Recordset est enregistré dans la nouvelle destination. Toutefois, la nouvelle destination et la destination d'origine seront toutes deux ouvertes.

Dans la mesure où Save ne ferme pas l'objet Recordset ni Destination, vous pouvez continuer à travailler avec l'objet Recordset et enregistrer vos modifications les plus récentes. La destination reste ouverte jusqu’à ce que l’objet Recordset 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é basse et personnalisée à partir d'un script exécuté par Microsoft Internet Explorer. Pour une explication plus détaillée des problèmes de sécurité, reportez-vous à l'article (en anglais) « ADO and RDS Security Issues in Microsoft Internet Explorer » dans la rubrique Microsoft Data Access Technical Articles du site MSDN.

Si une méthode Save est invoquée alors qu'une opération asynchrone de mise à jour, d'exécution ou d'extraction d'un jeu d'enregistrements est en cours, la méthode Save attend la fin de l'opération asynchrone.

La sauvegarde des enregistrements s'effectue à partir de la première ligne du jeu d'enregistrements. Une fois l'exécution de la méthode Save terminée, la position de ligne active est déplacée à la première ligne de l'objet Recordset.

Pour obtenir de meilleurs résultats, affectez à la propriété CursorLocation la valeur adUseClient avec la méthode Save. Si votre fournisseur ne prend pas en charge toutes les fonctionnalités nécessaires à l'enregistrement des objets Recordset, le service de curseur les fournira.

When a Recordset is persisted with the CursorLocation property set to adUseServer, the update capability for the Recordset is limited. Typically, only single-table updates, insertions, and deletions are allowed (dependent on provider functionality). The Resync method is also unavailable in this configuration.

Puisque le paramètre Destination accepte tout objet prenant en charge l'interface OLE DB IStream, vous pouvez sauvegarder 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 plus tard :

 
'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 

Cette section contient les rubriques suivantes :