IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Créer une Sauvegarde


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 134
    Points : 69
    Points
    69
    Par défaut Créer une Sauvegarde
    Bonjour,

    J'aimerais avoir de l'aide pour créer une Sauvegarde et une Restauration d'une base de donnée Access. J'aimerais avoir cette sauvegarde sous fichier XML.

    Merci de votre aide.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Tu peux charger la base dans un dataset, et enregistrer le dataset en XML avec la méthode WriteXml. Ou alors tu peux simplement faire une copie du fichier Access

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 134
    Points : 69
    Points
    69
    Par défaut
    En effet, j'ai pensé à la solution du XML mais j'ai un soucis lorsque j'utilise la méthode "Merge" pour fusionner les tables, je ne sais pas comment elle s'écris. Quand à la solution de copier la base de donnée, ça ne fonctionne pas, il me dit qu'il n'a pas les droit pour aller dans le dossier concerné.


    Merci pour vos réponses...

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par boby15000 Voir le message
    j'ai un soucis lorsque j'utilise la méthode "Merge" pour fusionner les tables, je ne sais pas comment elle s'écris.
    Ben il suffit de regarder la doc...
    http://msdn.microsoft.com/fr-fr/libr...set.merge.aspx

    Mais je ne vois pas trop pourquoi tu aurais besoin de cette méthode...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 134
    Points : 69
    Points
    69
    Par défaut
    Voilà mon soucis. Je souhaite utiliser la méthode de sauvegarde de ma base de donnée par Fichier XML. J'arrive à créé ce fichier
    sans soucis. Mais lorsque j'essaye de restaurer le fichier (pour une simulation) une erreur s'affiche :


    ************** Texte de l'exception **************
    System.Data.DataException: <target>.Quantites et <source>.Quantites ont des propriétés en conflit : incompatibilité de propriété DataType.
    à System.Data.DataSet.RaiseMergeFailed(DataTable table, String conflict, MissingSchemaAction missingSchemaAction)
    à System.Data.Merger.MergeSchema(DataTable table)
    à System.Data.Merger.MergeTableData(DataTable src)
    à System.Data.Merger.MergeDataSet(DataSet source)
    à System.Data.DataSet.Merge(DataSet dataSet, Boolean preserveChanges, MissingSchemaAction missingSchemaAction)
    à System.Data.DataSet.Merge(DataSet dataSet, Boolean preserveChanges)
    à Gestion_de_la_Charge.Fonctions.RestaurerLaBase() dans E:\PROGRAMMATION\Projects\Gestion de la Charge\Gestion de la Charge\ModFonction.vb:ligne 98
    à Gestion_de_la_Charge.Frm_Principale.RestaurerToolStripMenuItem_Click(Object sender, EventArgs e) dans E:\PROGRAMMATION\Projects\Gestion de la Charge\Gestion de la Charge\Frm_Principale.vb:ligne 61
    à System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
    à System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e)
    à System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
    à System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
    à System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
    à System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
    à System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
    à System.Windows.Forms.ToolStripDropDown.OnMouseUp(MouseEventArgs mea)
    à System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    à System.Windows.Forms.Control.WndProc(Message& m)
    à System.Windows.Forms.ScrollableControl.WndProc(Message& m)
    à System.Windows.Forms.ToolStrip.WndProc(Message& m)
    à System.Windows.Forms.ToolStripDropDown.WndProc(Message& m)
    à System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    à System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    à System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


    Pour tout vous dire je ne comprends pas pourquoi ça me sort cette erreur et je ne sais pas quoi faire. Avant j'avais une erreur de
    doublons lorsque je faisais un Update du fichier dataset sur la base de donnée Access. J'ai compris cette erreur et donc j'ai
    utilisé la méthode Merge pour fusionner le DataSet Actuel avec le dataset du fichier XML. Mais voilà que maintenant, l'erreur ci-dessus
    apparaît.


    Remarque: il est vrai que j'aurai pu faire copier/coller le Fichier .mdb (la base de donnée Access). Mais lorsque j'ai essayé cette solution, une erreur de type :
    "Impossible d'accéder au dossier ....\Config" c'est affiché, c'est donc pour cela que je me suis penché sur le Fichier XML


    MERCI DE M'AIDER SUR CE PROBLEME. CAR LA JE SUIS VRAIMENT COINCE.


    Voici mon Code des Fonctions Sauvegarder et Restaurer :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    Sub SauvegarderLaBase()
     
            Dim Forms = My.Forms.Sauvegarder.SaveFileDialog1
            Dim FichierXml As Object = My.Forms.Frm_Principale.Gestion_de_la_ChargeDataSet.GetXml
     
            With Forms
                .CheckFileExists = False 'Alerte quand un nom de fichier qui n'existe pas'
                .OverwritePrompt = True 'Alerte quand un nom de fichier qui existe déjà'
                .CheckPathExists = True 'Alerte quand un chemin d'accès qui n'existe pas'
                .AddExtension() = True 'ajoute automatiquement une extension au nom de fichier lorsque l'utilisateur n'en fait pas mention'
                .DefaultExt() = ".xml" 'Extension par défaut'
                .Filter = "Fichers Xml (*.xml)|*.xml" 'Liste des Extensions autorisé'
     
     
     
                If .ShowDialog = DialogResult.OK Then
                    Dim Adresse As String = .FileName
                    'Copie du Fichier'
                    Dim Instance As DataTable = My.Forms.Frm_Principale.Gestion_de_la_ChargeDataSet.Charge
                    Dim Sw As StreamWriter = File.CreateText(Adresse)
                    Sw.WriteLine(FichierXml)
                    Sw.Close()
                    'Affichage de la Réussite'
                    MessageBox.Show("Sauvegarde Réussi", "Confirmation", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    My.Forms.Sauvegarder.Close()
                End If
            End With
        End Sub
    '--------------------------------------------------------------'
        Sub RestaurerLaBase()
            Dim Forms = My.Forms.Restaurer.OpenFileDialog1
            With Forms
     
                .CheckFileExists = True 'Alerte quand un nom de fichier qui n'existe pas'
                .CheckPathExists = True 'Alerte quand un chemin d'accès qui n'existe pas'
                .Filter = "Fichers Xml (*.xml)|*.xml" 'Liste des Extensions autorisé'
                .Multiselect = False 'Autorise la sélection de plusieurs fichier'
                .showreadonly = False
     
                If .ShowDialog = DialogResult.OK Then
                    Dim Fichier As String = .FileName
                    Dim DataSet_Actuel As DataSet = My.Forms.Frm_Principale.Gestion_de_la_ChargeDataSet
                    'On crée un Nouveau DataSet pui on charge les données'
                    Dim NewDataSet As New DataSet("New DataSet")
                    NewDataSet.ReadXml(Fichier)
                    'On fusionne les DataSet'
                    DataSet_Actuel.Merge(NewDataSet, False)
                    'On affiche le message de réussite'
                    MessageBox.Show("Restauration Réussi", "Confirmation", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    Actualisation()
     
                End If
            End With
        End Sub
    ATTENTION : je tiens à préciser que je suis un débutant, je viens de commencer la programmation Visual Basic depuis que 1 mois, alors merçi de faire claire dans vos explications...

    Merci beaucoup...

  6. #6
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    Bonjour

    Concernant l'erreur que vous avez lister son message, je croix qu'elle est due à la chose suivante (incompatibilité de même champs des deux dataset):
    1-Le champ "Quantites" dans le DataSet nommé "DataSet_Actuel" est de type Double ou…, vu qu'il (ce champ dans le même dataset) est formaté selon le type de la donnée (càd colonne) "Quantites" de la base de données
    2-Le champ "Quantites" dans le DataSet nommé "NewDataSet" est de type string vu qu'il (ce champ dans le même dataset) est formaté selon le type de la donnée (colonne) "Quantites" du fichier Xml qui ne définit pas le type des objets, mais il les stocke (formaté bien sur)

    Proposition de solutions:
    1-rendre le dataset "NewDataSet " typé au fur et à mesure : Lorsque tu charge les données de la base (toutes les données des tables ==> que tu charge depuis toutes les tables de votre base de données), tu utiliser la méthode WriteXmlSchema de votre "DataSet_Actuel" pour enregistrer le schéma de votre dataset dans un fichier à part, puis avant le loading des données depuis le fichier Xml dans le "NewDataSet", vous appelez la méthode ReadXmlSchema (pour le même dataset "NewDataSet") afin que votre dataset devient type et qu'il connaisse les type de vos données, donc lors du merge il n'y aura pas de conflit de type de colonne

    avantage : même si vous changer du format de votre base le code ne sera pas affecté
    inconvénient : lourdeur d'exécution (par rapport au temps consommé dans la première approche)

    2-rendre le dataset "NewDataSet " typé une fois pour toute : vous créez un dataset typé (qui devra contenir la définition de tous vos tables), puis vous instancier les deux dataset ("NewDataSet" et "DataSet_Actuel") depuis ce dataset typé.

    avantage: rapidité d'exécution (puisque le dataset est type il sera même plus rapide que le code que vous avez mis)
    inconvénient: si vous changer du format de votre base le code sera affecté

    par contre, je me demande si vous avez pensé au fait que vous ne sauvegardez pas les requêtes, vues… ni la définition de vous tables (script de création de la base et de ses objets) de votre base, donc au cas de problème la restauration (seule) des données ne sera pas efficace.

    Bon continuation.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 134
    Points : 69
    Points
    69
    Par défaut
    Serait-il possible d'avoir ta solution sous forme de code, afin de je puisse comprendre clairement.

    par contre, je me demande si vous avez pensé au fait que vous ne sauvegardez pas les requêtes, vues… ni la définition de vous tables (script de création de la base et de ses objets) de votre base, donc au cas de problème la restauration (seule) des données ne sera pas efficace.
    Pour ce qui est de Créer une sauvegarde Compléte (Requète, vue, Définition) que me conseillerez vous.

    Merci...

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 134
    Points : 69
    Points
    69
    Par défaut
    Voiçi mon code :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     Sub SauvegarderLaBase()
     
            Dim Forms = My.Forms.Sauvegarder.SaveFileDialog1
     
            With Forms
                .CheckFileExists = False 'Alerte quand un nom de fichier qui n'existe pas'
                .OverwritePrompt = True 'Alerte quand un nom de fichier qui existe déjà'
                .CheckPathExists = True 'Alerte quand un chemin d'accès qui n'existe pas'
                .AddExtension() = True 'ajoute automatiquement une extension au nom de fichier lorsque l'utilisateur n'en fait pas mention'
                .DefaultExt() = ".xml" 'Extension par défaut'
                .Filter = "Fichers Xml (*.xml)|*.xml" 'Liste des Extensions autorisé'
     
     
     
                If .ShowDialog = DialogResult.OK Then
                    Dim Adresse As String = .FileName
                    'Copie du Fichier'
                    Dim instance As DataSet = My.Forms.Frm_Principale.Gestion_de_la_ChargeDataSet
                    instance.WriteXmlSchema(Adresse)
     
                    'Dim Instance As DataTable = My.Forms.Frm_Principale.Gestion_de_la_ChargeDataSet.Charge
                    'Dim Sw As StreamWriter = File.CreateText(Adresse)
                    'Sw.WriteLine(FichierXml)
                    'Sw.Close()
                    'Affichage de la Réussite'
                    MessageBox.Show("Sauvegarde Réussi", "Confirmation", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    My.Forms.Sauvegarder.Close()
                End If
            End With
        End Sub
        Sub RestaurerLaBase()
            Dim Forms = My.Forms.Restaurer.OpenFileDialog1
            With Forms
     
                .CheckFileExists = True 'Alerte quand un nom de fichier qui n'existe pas'
                .CheckPathExists = True 'Alerte quand un chemin d'accès qui n'existe pas'
                .Filter = "Fichers Xml (*.xml)|*.xml" 'Liste des Extensions autorisé'
                .Multiselect = False 'Autorise la sélection de plusieurs fichier'
                .showreadonly = False
     
                If .ShowDialog = DialogResult.OK Then
                    Dim Fichier As String = .FileName
                    Dim DataSet_Actuel As DataSet = My.Forms.Frm_Principale.Gestion_de_la_ChargeDataSet
                    'On crée un Nouveau DataSet puis on charge les données'
                    Dim NewDataSet As New DataSet("New DataSet")
                    NewDataSet.ReadXmlSchema(Fichier)
                    'On fusionne les DataSet'
                    DataSet_Actuel.Merge(NewDataSet)
                    'On affiche le message de réussite'
                    MessageBox.Show("Restauration Réussi", "Confirmation", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    Actualisation()
     
                End If
            End With
        End Sub


    Alors en effet maintenant je n'est plus d'erreur, cependant rien ne ce passe, les données ne se restaure pas.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 134
    Points : 69
    Points
    69
    Par défaut
    j'ai trouver l'erreur. En faîte, il faut surcharger le WriteXml comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    instance.WriteXml(Adresse, XmlWriteMode.WriteSchema)
    afin d'avoir le Schéma et les données

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD12] Limitations flistefichier pour créer une sauvegarde
    Par frenchsting dans le forum WinDev
    Réponses: 2
    Dernier message: 26/07/2012, 16h17
  2. Créer une sauvegarde de l'installation Vista
    Par Yepazix dans le forum Windows Vista
    Réponses: 6
    Dernier message: 01/12/2008, 15h02
  3. [SQL-SERVER 2000] Comment créer une sauvegarde ?
    Par bodev dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 03/10/2008, 15h06
  4. Créer une Sauvegarde :
    Par parp1 dans le forum VB 6 et antérieur
    Réponses: 18
    Dernier message: 26/04/2007, 19h48
  5. Réponses: 6
    Dernier message: 17/08/2006, 09h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo