Astuces de recherche...
Home
- Accueil & nouveautés
- Les newsgroups VB
- Téléchargements
- L'équipe
- Nous contacter
- Liens
Rubriques
- Toutes les questions
- Affichage & graphismes
- Algorithmique
- API
- Base de registre
- Bases de données
- Contrôles
- Date & heure
- Déploiement
- Divers
- Erreurs & problèmes
- Fichiers & dossiers
- Généralités
- Impression
- Internet & mails
- Math
- Multimédia
- Réseaux
- Structures de données
- Texte & strings
- VB .Net
- VB Script
- VBA
- Windows

Question 143

Mon programme doit sauvegarder des données. Où peut il le faire et comment ?

Il y a de nombreuses façons pour une application de sauvegarder des données. La méthode à employer de préférence dépend de critères variés tels que : la nature des données, la taille des données, les contraintes éventuelles (temps de chargement, espace disque, autres), la portabilité, la facilité d'installation (déploiement), la ou les méthodes avec lesquelles vous êtes le plus confortable, autres critères.

Nous voyons donc que ce n'est pas aussi trivial qu'il y parait. Indépendamment de l'aspect technique, la seule détermination de la méthode à employer est une question en soi.

Cet article ne prétend pas être une description exhaustive de toutes les méthodes, pas plus qu'il ne prétend donner pour chaque cas la meilleure solution. Le but est de présenter ici un sous-ensemble de méthodes classiques, avec leurs avantages et inconvénients respectifs. Cet article présente les méthodes suivantes :

  • Sauvegarde dans un fichier
  • Sauvegarde dans la base de registre
  • Sauvegarde dans une base de données

Sauvegarde dans un fichier

Cette méthode est une des plus souples. Ses avantages sont : la simplicité de mise en oeuvre, la portabilité, les performances, la facilité pour le déploiement et la maintenance, la souplesse (convient pour de petits ou de très gros volumes de données). C'est probablement la méthode la plus adaptée pour le plus grand nombre de situations. Selon la nature des données à sauvegarder, on pourra choisir entre plusieurs méthodes. Il vous faudra néanmoins faire face, si vous choisissez cette méthode à deux sous problèmes : quel format de fichier utiliser et où enregistrer ces fichiers?

Destination des fichiers

Si votre application doit pouvoir fonctionner en présence de restrictions de droits d'accès sur les fichiers (par exemple, en compte utilisateur restreint sous Windows XP), il faudra vous demander quelles sont les permissions dont vous avez besoin pour les fichiers utilisés. Le choix du dossier de destination a donc toute son importance. Pour un accès simple en lecture, le dossier de l'application peut être approprié. Ne supposez toutefois pas avoir un droit en écriture sur ce dossier ! Les dossiers appropriés pour l'écriture de paramètres relatifs à l'utilisateur sont "Application data" (données associées au profil itinérant) et Local Settings (dissocié d'un profil itinérant). En ce qui concerne les documents utilisateurs, le dossier "Mes Documents" sera celui à préférer. Afin de retrouver les chemins correspondants à ces différents dossiers, nous vous invitons à consulter l'article concernant les dossiers spéciaux, où les constantes correspondant aux dossiers précédemment mentionnés sont, dans l'ordre : CSIDL_APPDATA, CSIDL_LOCAL_APPDATA et CSIDL_PERSONAL.

Le choix de votre dossier étant effectué, nous vous conseillons de tester votre application sur un compte utilisateur restreint, afin de vous assurer que votre application se comporte correctement malgré les restrictions en vigueur. Il est à noter que la gestion d'erreurs relatives à la restriction de droits est nécessaire afin d'assurer que l'utilisateur ne perde pas son travail pour avoir tenté d'enregistrer un fichier dans un dossier ne lui étant pas accessible!

Formats de fichiers

Les fichiers .INI

Pour stocker des paramètres de configuration, un fichier de type .INI est un bon choix, en particulier parce que nous disposons d'APIs permettant un accès très simple à ces fichiers, en lecture comme en écriture. Toutes les explications sur l'usage des fichiers .INI sont disponibles dans la FAQ : Comment lire et écrire dans un fichier .INI ?

Microsoft a un temps mentionné que l'utilisation des fichiers .INI était "déprécié", au profit de la base de registre. Cependant, nombre d'applications (dont les applications Microsoft) continuent à utiliser les fichiers .INI.
Cette méthode a aussi l'intérêt d'être aisée à déployer (il suffit de déplacer le fichier .INI avec l'application). La maintenance est aussi très simple, puisqu'un simple éditeur de texte permet de modifier ou de contrôler le fichier .INI.

Les fichiers "propriétaires"

On peut utiliser un fichier texte ou binaire, souvent dans le but de stocker une grande quantité de données non structurées, qu'on manipulera avec les fonctions classiques de VB.

Dans la majorité des cas, les fichiers texte sont à préférer aux fichiers binaires, car ils permettent une manipulation aisée avec n'importe quel éditeur de texte. Cependant, lorsque des critères de taille deviennent importants (notamment pour les fichiers multimédia), les fichiers binaires seront à envisager.

En ce qui concerne les fichiers texte, les fichiers au format XML sont de plus en plus employés. Ce format a de nombreux avantages. Par exemple, leur structure est bien définie et il existe de nombreux outils et librairies qui permettent leur lecture et leur écriture. Pour plus d'informations à ce sujet, nous vous invitons à lire l'article Wikipédia - XML.

Voici quelques exemples très simples d'utilisation de fichiers :

Ecriture dans un fichier texte :

Private Sub Ecrire(ByVal NomFichier As String)

    Dim f As Integer
    
    f = FreeFile
    Open NomFichier For Output As #f
        Print #f, "Pierre"
        Print #f, "Paul"
        Print #f, "Jacques"
    Close #f
End Sub

' Exemple d'appel
Private Sub Command1_Click()
    Call Ecrire("c:\publicdata\test.txt")
End Sub

Lecture dans un fichier texte :

Private Sub Lire(ByVal NomFichier As String)

    Dim f As Integer
    Dim ligne As String
    
    f = FreeFile
    Open NomFichier For Input As #f
        While Not EOF(f)
            Line Input #f, ligne
            Debug.Print "ligne lue : " & ligne
        Wend
    Close #f
End Sub

' Exemple d'appel
Private Sub Command2_Click()
    Call Lire("c:\publicdata\test.txt")
End Sub

Lecture de tout un fichier en une seule passe :

La fonction proposée permet de récupérer l'entièreté du contenu d'un fichier dans une variable (un buffer de type string). Cette méthode est très souvent la plus performante; elle est très bien adaptée pour des fichiers volumineux. Un exemple détaillé et prêt à l'emploi est disponible dans l'article : Comment lire rapidement un fichier texte.

Private Sub LireBuffer(ByVal NomFichier As String)

    Dim f As Integer
    Dim Buffer As String
    
    f = FreeFile
    Open NomFichier For Binary As #f
        Buffer = Space$(LOF(f))
        Get #f, , Buffer
    Close #f
    Debug.Print "Buffer lu : " & vbCrLf & Buffer
End Sub


' Exemple d'appel
Private Sub Command3_Click()
    Call LireBuffer("c:\publicdata\test.txt")
End Sub

Il n'est bien sûr pas possible de détailler ici l'utilisation des fichiers en VB. Un bon point de départ est la lecture de la documentation de la fonction "Open", disponible en ligne dans MSDN: Open Statement. On pourra aussi trouver sur Internet de nombreux exemples et tutoriaux, comme par exemple : Visual Basic - Gestion des Fichiers
Les méthodes de sauvegarde utilisant les fichiers sont souples, portables, efficaces et aisées à mettre en oeuvre. le déploiement d'applications utilisant uniquement des fichiers comme support de sauvegarde est notoirement facile puisqu'il n'implique pas l'utilisation ou l'installation d'autre chose que votre application et les fichiers qu'elle utilise.

Sauvegarde dans la base de registre


Pour stocker des paramètres de configuration d'une application, il est possible d'utiliser la Base De Registre. Visual Basic fournit, entre autres, à ce sujet les fonctions GetSetting et SaveSettings. Pour un accès plus complet, vous pourrez utiliser les API Windows correspondantes, ou les composant scripting, comme décrit dans les articles suivants de la FAQ :
Cette méthode comporte des inconvénients, les plus notables étant le manque de portabilité, la difficulté pour l'utilisateur de transposer sa configuration d'une machine à une autre (au contraire d'un simple fichier), ou encore d'écrire un logiciel de désinstallation s'assurant que toutes les entrées soient supprimées.
Vous l'aurez compris, stocker des données dans la base de registre demande réflexion!

De plus, en fonction des systèmes d'exploitations ciblés, vous devrez tenir compte de limitations imposées par le système, telles que décrites dans la msdn : Registry Element Size Limits.

Sauvegarde dans une Base De Données (BDD)

Visual Basic permet de s'interfacer très simplement avec toutes sortes de BDD, de la plus simple (un simple fichier texte) aux plus professionnelles (SQL Server, Oracle, DB2, etc.), en passant par les classiques (Access, MySql, Ingres, Paradox, etc.).
Les BDD sont particulièrement adaptées dans les situations suivantes :

  • Gros volumes de données structurées
  • Besoin fréquent de mises à jours, modifications, suppressions
  • Besoin de puissantes fonctions de recherche (SQL)
L'utilisation d'une BDD peut aussi grandement simplifier la réalisation des interfaces utilisateur, VB étant doté de contrôles facilement utilisable avec celles-ci. Les BDD sont donc un choix à considérer sérieusement dans ce genre de situations.

Il y a un cependant des inconvénients à l'utilisation des BDD. On citera : l'application n'est plus autonome, elle dépend pour son fonctionnement d'une technologie tierce, le déploiement implique l'installation sur les postes clients des fichiers nécessaires à la gestion de la BDD (moteur Jet pour Access, etc.).
Le sujet est trop vaste pour être seulement abordé ici, même si la FAQ contient une rubrique dédiée aux bases de données : Rubrique 12 : Bases de données. On trouve sur Internet un très grand nombre de tutoriaux consacrés à l'utilisation des BDD en Visual Basic.

Voir aussi :

Date de publication : 19 novembre 2006
Dernière modification : 06 mars 2008
Rubriques : Divers
Mots-clés : sauvegarde, configuration, fichiers, registre, ini, base de données