Probleme sauvegarde sur BDD.

Résolu
Kleidp Messages postés 124 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 10 février 2008 - 29 oct. 2007 à 14:19
Kleidp Messages postés 124 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 10 février 2008 - 17 janv. 2008 à 12:38
Bonjour,

Cela fait plusieurs heures que je bloque sur l'impossibilité d'appliquer mes changements sur ma base Access.

Voici comment je procède:
<ol><li>    Je créé ma base Access.</li><li>    J'importe ma base, en faisant une nouvelle connexion.</li><li>    Je créé un nouveau dataSet dans lequel j'incorpore la table Client (avec un cliqué-glissé depuis la fenetre "Server Explorer"), j'ai donc mon dataAdapter qui se créé en même temps.</li></ol>
Mon dataAdapter remplit bien mon dataSet avec la methode Fill, pas de soucis. Mais lorsque j'ajoute ou modifie un enregistrement celui ci n'est pas sauvegardé dans ma base, alors que le dataSet à bien été modifié. Il n'y a aucune erreur d'éxécution !

Voici comment je sauvegarde:
ClientDataAdapter.Update(dataSet1)
ClientDataAdapter.Update(dataSet1.Client) // Ne fonctionne pas non plus, et aucune erreur

J'ai vérifié l'updateCommand et l'insertCommand de l'adapter et le SQL est correct.
J'ai aussi essayé de modifier les "buid Action" et "Copy to Output Directory" dans les propriétés de ma base, mais rien de concluant. Par contre c'est peut être ici que ca bloque d'après moi.
J'ai aussi essayé avec un SQL SERVEUR 2005 Express et le problème reste le même.

Voila, je n'ai plus aucune pistes :(

Merci de votre aide

9 réponses

Kleidp Messages postés 124 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 10 février 2008
29 oct. 2007 à 15:01
Ok j'ai enfin trouvé ...

Pour la postérité:

Lors du cliqué gissé d'une table sur le dataSet, VS demande si l'on veut importer la base dans le projet : Surtout pas!
Bien que la base se trouve sur un répertoire quelconque il faut la copier a la base de votre .exe cad, en phase de production, sur ...bin\debug

Voila les données sont bien enregistrée.
3
The Red Man Messages postés 111 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 13 juin 2010 2
16 janv. 2008 à 02:29
Je pense que j'ai le problème mais c'est un problème sur l'insertion. Avec ma méthode insertUser(), en principe je devrai inséré des données dans la base de données (ma bdd est SQL Server). La requête est correct. Cependant, lors de l'insertion à partir du logiciel, ça fonctionne aussi. Or le problème c'est lorsque je relance l'application, l'utilisateur que j'ai inséré n'est plus là.
Alors je comprend pas pourquoi !

C'est bizard !

Je vais essayé ta méthode.
0
The Red Man Messages postés 111 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 13 juin 2010 2
16 janv. 2008 à 02:39
la bdd est bien dans le dossier que vous avez mentionné. Mais ça ne fonctionne toujours pas. Cependant, ma bdd se situe dans un dossier et ce dossier ce situe dans le dosser ...\bin\debug\

J'espere que ce dossier ne change rien !
0
Kleidp Messages postés 124 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 10 février 2008
16 janv. 2008 à 12:41
Je ne pense pas que c'est un problème de dossier. Vérifiez tout de même la chaine de connection : Project -> Properties -> Settings : ConnectionStrings

Le problème intervient seulement sur l'insertion ?

Si oui essayez, après le adapter.Update(Table) de faire :
dataSet.Table.Clear();
adapter.Fill(Table);
// ok c'est pas optimal, mais ça me resoud mes pb d'insertions.

Pour une nouvelle insertion j'utilise soit les dataRow() soit les CurrencyManager().

Sinon une idée (saugrenues ?) me vient à l'esprit :

Déplacer la base et le .exe dans un dossier différent (ex: C:\TempProject) et tester
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
The Red Man Messages postés 111 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 13 juin 2010 2
16 janv. 2008 à 15:25
En principe les dataRow() (je ne connais pas les CurrencyManager()) ne sert à rien dans l'insertion ou dans l'update puisque c'est les méthodes du TableAdapter qui s'en charge des insertions ou des modifications. A moins que je me trompe complètement.

Pour répondre à votre question, l'update et l'insertion ne fonctionne pas.
0
Kleidp Messages postés 124 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 10 février 2008
16 janv. 2008 à 19:13
Dsl je seche, vous avez exactement les memes soucis que sur mon poste
de départ mais si vous avez bien appliqué ma réponse accepté, alors je
ne vois pas !

Note:
Le dataRow permet d'ajouter une ligne au dataSet :

DataRow dr = dataSet.Table.NewRow();
dr["titre"]= "Mme"
dr["nom"] = "Dupont"
.....
dataSet.Table.Rows.Add(dr);

Après il y a tellement de façons d'ajouter une ligne avec C# que c'est suivant les affinitées :)
0
The Red Man Messages postés 111 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 13 juin 2010 2
16 janv. 2008 à 20:05
Ma méthode fonctionne bien avec ASP .Net. Je vais essayer votre méthode.

Merci en tou cas. :)
0
The Red Man Messages postés 111 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 13 juin 2010 2
16 janv. 2008 à 20:44
                Project01Gestion._01GestionDB.bddDataSet.DossiersRow dossierRow;           

                 try
                {
                    _01GestionDB.bddDataSet.DossiersDataTable dtDossier =
                        new Project01Gestion._01GestionDB.bddDataSet.DossiersDataTable();

                    dossierRow = (_01GestionDB.bddDataSet.DossiersRow)dtDossier.NewRow();

                    dossierRow["idDossier"] = 1;
                    dossierRow["nomDossier"] = "ds";
                    dossierRow["PeriodeDebut"] = "ss";
                    dossierRow["PeriodeFin"] = "ss";
                    dossierRow["CloturerCompte"] = false;
                    dossierRow["UserID"] = 1;

                    dtDossier.Rows.Add(dossierRow);
                }
                catch
                {
                    Utility.MsgBox.showErrorMsg("error","ee");
                }

Votre méthode ne fonctionne toujours pas !

voici ma méthode :
            _01GestionDB.bddDataSetTableAdapters.DossiersTableAdapter taDossier;
           
           
            try
            {
                // instanciation du taDossier
                taDossier = new _01GestionDB.bddDataSetTableAdapters.DossiersTableAdapter();

                // on determine l'id du dossier
                int id = Convert.ToInt32(taDossier.getMaxId()+1);

                // on verifie si l'utilisateur a saisie le nom du dossier
                if (this.folderNameTB.Text.Length != 0)
                {
                    // on assigne les valeurs aux attributs
                    this.FolderName = this.folderNameTB.Text;
                    this.StartPeriod = this.startPeriodDTP.Text;
                    this.EndPeriod = this.EndPeriodDTP.Text;
                    this.FolderID = id;

                    // insertion
                    taDossier.InsertFolderAccount(id, this.FolderName,
                                                      this.StartPeriod,
                                                      this.EndPeriod,
                                                      false, // false car on ne clôture pas le dossier dès la création
                                                      this.UserID);
                                    

                    // on avertit l'utilisateur de l'insertion
                    Utility.MsgBox.showInformationMsg("Dossier " + this.FolderName + " a été créé !", "01.Gestion");

                    // on ferme l'UI
                    this.Close();

                }
                else
                {
                    Utility.MsgBox.showWarningMsg("Vérifiez que tous les champs sont bien remplis.", "01.Gestion");
                }
            }
            catch
            {
                Utility.MsgBox.showErrorMsg("Erreur de création du dossier !","01.Gestion");
            }

ma méthode fonctionne tres bien mais seulement pendant l'execution du programme. Je peux effectuer des requetes a partir de mon programme et ça fonctione. Or aucune donnée n'est sauvegardé dans la base de données.
0
Kleidp Messages postés 124 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 10 février 2008
17 janv. 2008 à 12:38
Hmmm

j'ai testé avec la methode insert() du dataAdapter et ça fonctionne chez moi.

A mon avis le problème ne vient pas du code (d'ailleurs tu n'as pas d'erreur), mais de ta liaison avec la bdd.
Créé plûtot un nouveau post sur le site en reprennant les éléments de la discussion pour avoir l'aide des autres programmeurs.
0
Rejoignez-nous