Partager via


Persistance des données

L’informatique portable (par exemple, l’utilisation d’ordinateurs portables) a engendré une demande en applications qui peuvent s’exécuter à la fois dans un état connecté et déconnecté. ADO a ajouté la prise en charge de cette fonctionnalité en donnant au développeur la possibilité d’enregistrer un objet Recordset de curseur client 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 :

  • Voyages : Lorsque vous emportez une 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ées.

  • Recherches rarement mises à jour : Souvent, dans une application, les tables sont utilisées comme tables de recherche, par exemple des tables fiscales pour l’État. Elles sont rarement mises à jour et 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 Recordset persistant localement.

Dans ADO, pour enregistrer et charger des objets Recordset, utilisez les méthodes Recordset.Save et Recordset.Open(,,,,adCmdFile) sur l’objet Recordset ADO.

Vous pouvez utiliser la méthode Recordset Save pour conserver votre 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.) Plus tard, vous pouvez utiliser la méthode Open pour rouvrir l’objet Recordset lorsque vous êtes prêt à l’utiliser. Par défaut, ADO enregistre l’objet Recordset dans le format propriétaire Microsoft Advanced Data TableGram (ADTG). Ce format binaire est spécifié à l’aide de la valeur adPersistADTG PersistFormatEnum. Vous pouvez également choisir d’enregistrer votre Recordset au format XML à la place avec adPersistXML. Pour plus d’informations sur l’enregistrement des objets Recordset au format XML, consultez Persistance 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 l’objet Recordset, il est facultatif de spécifier la Destination. Si vous omettez Destination, un nouveau fichier est créé avec un nom défini sur la valeur de la propriété Source du Recordset.

Omettez Destination lorsque vous appelez Save après le premier enregistrement, ou une erreur d’exécution se produira. Si vous appelez ensuite Save avec une nouvelle Destination, l’objet Recordset est enregistré dans la nouvelle destination. Toutefois, la nouvelle destination et la destination d’origine seront toutes deux ouvertes.

Save ne ferme pas l’objet Recordset ou Destination. Vous pouvez donc 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 cet intervalle, les 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 Save est appelée alors qu’une opération asynchrone de récupération, d’exécution ou de mise à jour du Recordset est en cours, Save attend que l’opération asynchrone soit terminée.

Les enregistrements sont enregistrés à compter de la première ligne du Recordset. Lorsque la méthode Save est terminée, la position de ligne actuelle est déplacée vers la première ligne de l’objet Recordset.

Pour obtenir de meilleurs résultats, définissez la propriété CursorLocation sur adUseClient avec Save. Si votre fournisseur ne prend pas en charge toutes les fonctionnalités nécessaires pour enregistrer les objets Recordset, le service curseur fournit cette fonctionnalité.

Lorsqu’un Recordset est conservé avec la propriété CursorLocation définie sur adUseServer, la fonctionnalité de mise à jour de l’objet Recordset est limitée. En règle générale, seules les mises à jour, les insertions et les suppressions sur une seule table 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 qui prend en charge l’interface IStream OLE DB, vous pouvez enregistrer un Recordset directement dans l’objet Response ASP.

Dans l’exemple suivant, les méthodes Save et Open sont utilisées pour conserver un Recordset 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  

Notes

Cette section contient les rubriques suivantes :