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.
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.
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
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
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...
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...
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
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 :
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...
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
Merci beaucoup...
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.
Serait-il possible d'avoir ta solution sous forme de code, afin de je puisse comprendre clairement.
Pour ce qui est de Créer une sauvegarde Compléte (Requète, vue, Définition) que me conseillerez vous.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.
Merci...
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.
j'ai trouver l'erreur. En faîte, il faut surcharger le WriteXml comme cela :
afin d'avoir le Schéma et les données
Code : Sélectionner tout - Visualiser dans une fenêtre à part instance.WriteXml(Adresse, XmlWriteMode.WriteSchema)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager