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

C# Discussion :

Probleme d'update d'un TableAdapter


Sujet :

C#

  1. #21
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    Super article ! Il faut que je fasse des essais et aue je recherche tous les updates de mon TableAdapter. Je vous tiens au courant.

  2. #22
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    Apres chaue update, je fais un AcceptChanges() et comme avant, les erreurs sont beaucoup moins nombreuses qu'avant mais existent toujours. Par exemple je copie 3500 lignes dans ma datagrid, je sauvegarde tout ca (Update + AcceptChanges() ok) et lorsque je veux toute les supprimer, il en supprime peut etre 2000 mais plante...
    Pourtant apres chaue boucle de copy, add, modify et delete, je lance ma methode SaveItem() :

    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
            private void SaveItem()
            {
                // got focus on auto save checkbox just before saving just to validate the cell
                chkAutoSave.Focus();
                this.Validate();
     
                this.pARAMBindingSource.EndEdit();
                if (this.paramDS.HasChanges())
                {
                    if (!this.paramDS.PARAM.HasErrors)
                    {
                        frmAppSplash frm = UIUtility.StartFlash("Saving changes.....", false);
                        sel = UIUtility.GetSelected(dgvParams);
                        UIUtility.UpdateModified(cLimitSetID, userid);
                        this.pARAMTableAdapter.Update(this.paramDS.PARAM);
                        this.paramDS.AcceptChanges();
                        dgvParams.ClearSelection();
                        SetSelected(sel);
                        UIUtility.StopFlash(frm);
                    }
                    else
                    {
                        MessageBox.Show("Warning : Items not saved", "Saving Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
            }
    Du coup je ne voit pas pourquoi le progamme plante lorsque je teste sur des gros volumes (peut etre que le TableAdapter n'a pas le temps de se mettre a jour...).

    Si quelqu'un a une piste...

  3. #23
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    Est-ce que la clause WHERE de la fonction Delete() du TableAdapter opère bien sur toutes les valeurs des champs?

    D'où vient la DeleteCommand de l'Adapter ? Est-ce toi qui l' a écrite.

  4. #24
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    La delete command a ete generee a travers un utilitaire (en xsd) avec les options generate update and delete command.
    En fait le probleme est cerne :

    Je lance le programme
    Je selectionne toutes les lignes de mq grid et je les duplique (fonction duplicate que j'ai codee qui permet de selectionner des lignes de ma grid et de les dupliquer)
    Un auto save est realise (avec la methode que j'ai postee un peu plus haut)
    Je selectionne toutes les lignes de ma grid et je delete.... PLANTAGE --> The DeleteCommand affected 0 of the 1 expected parameter.

    Voila le probleme.

    Maintenant si apres le duplicate je quitte et relance le programme, je peux supprimer toutes les lignes de la grid sans aucun probleme. Je pense qu'il faut faire une sorte de refresh de mon table adapter pour qu'il soit dans le meme etat que lorsque je lance l'application et qu'il charge les donnees.(pour un soucis de performances je ne peux pas le vider et le re-remplir a chaque fois).

    Pourtant je fais bien un AcceptChanges() apres l'Update() dans ma methode SaveItem()...
    Voila ou je suis bloque depuis presque 2 semaines

  5. #25
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    Pour le Save :
    Les enregistrements dupliqués ayant été sauvegardés sans problème, j'en déduis qu'il n'y a pas de clé primaire (unique) sinon la fonction aurait généré des exceptions style "Duplicate key".

    Pour le Delete :
    La commande SQL de suppression d'un enregistrement détruit tous les enregistrements correspondant à la clause WHERE de la commande DELETE :
    - sur l'enregistrement source, le delete va supprimer à la fois l'enregistrement source et l'enregistrement copié,
    - sur l'enregistrement copié, le delete ne vas plus rien avoir à supprimer, d'où l'erreur.

    Solutions : Ignorer ce type d'erreur et compter le nombre total de delete réélement effectués (via, je pense, la property RowAffected de l'event OnRowUpdated du DBDataAdapter)

  6. #26
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    Bonjour Graffito,

    Au niveau de mon duplicate, il y a une procedure Oracle affectee qui recupere un nouvel identifiant a chaque ligne cree dans la grid (paramID.nextval). Donc chaque ligne dupliquee a son propre identifiant (reconnut comme identifiant dans Oracle bien sur...).

    Le fait que chaque ligne aie son identifiant remet il en cause ce que tu dis (la clause where dans la commande delete ) ? ou n'est-ce plus valable ?

    Je verifie les suppressions dans la grid et la bas de donness en meme temps, c'est un autre debut de piste...

    Au fait, parfois certaines UpdateCommand recommencent a planter, cela m'inquiete car je dois bientot avoir fini de fixer tous les bugs de l'appli et il ne me reste que ce probleme de tableAdapter.Update que je n'arrive pas a faire fonctionner correctement...

  7. #27
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    Est-ce que le champ identifiant est bien dans la DataTable ?

    Si oui, est-ce que la contrainte d'incrémentation automatique (ou d'unicité) de ce champ figure bien dans le DataTable ?

    Si une des réponses est non, c'est probalement la source du problème.

  8. #28
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    Bonjour,

    Le champ identifiant (paramid) fait partie du DataTable et est definit comme identifiant comme dans la BDD. Par contre son option AutoIncrement est a false. Je vais tester de le passer a true mais logiquement chaue ligne cree dans le DataTable insere un nouveau para;id definit par Oracle donc si j'auto-incremente en plus ce champ dans la dataTable il risque d'y avoir des plantages... Bref ca ne coute rien d'essayer.

    Si quelqu'un a une autre idee...

    Merci d'avance

  9. #29
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    En passant le paramid en AutoIncrement dans le DataTable, rien ne change...

    La DeleteCommand plante toujours lors de la suppression d'une ligne qui vient d'etre cree (et dont j'ai deja applique Update() et AcceptChanges()).

  10. #30
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Reste encore à vérifier que le test sur le paramId est bien intégré à la clause WHERE de la DeleteCommand du DataAdapter...

  11. #31
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    Je n'arrive pas a recuperer le code sql a chaud qui va generer la suppression du parametre (row). Je pense qu'il n'est pas passe a la fonction update() quand il s'agit d'une ligne qui vient d'etre cree (le AcceptChanges() est cense palier ce probleme...)
    Quoique je change, cette erreur reste. Aucun moyen d'avoir le code sql qui declenche l'erreur afin de savoir si c'est bien l'update qui plante ou si il faut chercher en amont (ligne non presente dans le DataTable...).

    Je pense que le DataAdapter ne met pas a jour le TableAdapter lorsque je cree une ligne dans la DataGrid (cette phrase fait un peu peur...).

    Je continue les recherches et tiens au courant. Si quelqu'un a eu le meme probleme ou maitrise les TableAdapter, n'hesitez pas.

    Merci

  12. #32
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    Personne pour donner son avis ?

    Je reformule le probleme : Lorsque j'ajoute une ligne dans ma DatatGridView, je fais un Update() et un AcceptChanges() et tout se passe bien.

    Par contre, si je veux modifier cette ligne nouvellement cree, l'Update() plante en me disant : The Update command affected 0 of the 1 parameter expected..

  13. #33
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    Bonjour, j'ai essaye tout plein de choses pour corriger ce probleme et ai beaucoup appris. Cependant, je reste encore bloque. J'ai re-ecrit les requetes d'ajout, de modif et de suppression de mon TableAdapter et ca plante toujours au meme endroit :

    Impossible de modifier une ligne que je vient de creer. Pourtant cette ligne existe bien dans la base de donnees, dans le TableAdapter, le Dataset et le DataGridview. Les modifications ne passent pas. Je peux cependant les faire que si je quitte le programme et que je le relance.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [TableAdapter]Problemes Requete Update
    Par lolymeupy dans le forum Accès aux données
    Réponses: 2
    Dernier message: 18/07/2007, 10h09
  2. [requete SQL] Probleme requete UPDATE
    Par Shiryu44 dans le forum JDBC
    Réponses: 12
    Dernier message: 10/03/2005, 11h41
  3. probleme requete update
    Par Amandine62 dans le forum ASP
    Réponses: 12
    Dernier message: 27/01/2005, 11h15
  4. probleme d'update
    Par adun dans le forum Langage SQL
    Réponses: 3
    Dernier message: 04/01/2005, 11h27
  5. Probleme S/ UPDATE : ADOQUERY base = .DBF , D7
    Par bzh56 dans le forum Bases de données
    Réponses: 5
    Dernier message: 18/02/2004, 01h56

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