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 :

Pb sur DataAdapter.UpdateAll après BindingSource.RemoveCurrent


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 16
    Par défaut Pb sur DataAdapter.UpdateAll après BindingSource.RemoveCurrent
    Bonjour à tous,

    Je recherche qques bonnes âmes pour le problème suivant :

    ENVIRONNEMENT:------------------
    - sous vb 2008 express (sous xp sp2)
    - application locale pour test, sans autres utilisateurs concurrentiels
    - dans un formulaire avec un dataset typé lié à une table "Archive" sous sql server
    - avec une vue datagrid et une vue détails de ce dataset (intégration auto. par l'environnement des classiques : TableAdapterManager, TableAdapter, BindingSource, BindingNavigator)

    CONTEXTE:---------------
    - j'ai un bouton pour supprimer l'enregistrement courant, sélectionné en cliquant sur une ligne du datagrid

    CODE:--------------
    Private Sub BtSupprimer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtSupprimer.Click
    Me.Validate()
    If ArchiveBindingSource.Count > 0 Then
    ArchiveBindingSource.RemoveCurrent()
    End If
    ArchiveBindingSource.EndEdit()

    ' Dim sCommand = ArchiveTableAdapter.Adapter.DeleteCommand.CommandText.ToString()

    Me.TableAdapterManager.UpdateAll(Me.DSArchives)

    End Sub

    ERREUR:--------------
    - jusqu'à BindingSource.RemoveCurrent() tout va bien... suppression dans le datasource (ligne disparait à l'écran dans le datagrid)
    - plantage sur TableAdapterManager.UpdateAll :
    >>>> "DBConcurrencyException was unhandled
    Violation de l'accès concurrentiel : DeleteCommand a affecté 0 des enregistrements 1 attendus."

    J'ai récupéré la chaine de requête SQL par ArchiveTableAdapter.Adapter.DeleteCommand.CommandText.ToString()
    dont voici le contenu :

    "DELETE FROM [dbo].[Archive]
    WHERE (([IDArchive] = @Original_IDArchive)
    AND ([CheminArchive] = @Original_CheminArchive)
    AND ([TypeArchive] = @Original_TypeArchive)
    AND ((@IsNull_AuteurArchive = 1 AND [AuteurArchive] IS NULL) OR ([AuteurArchive] = @Original_AuteurArchive))
    AND ([UtilOKArchive] = @Original_UtilOKArchive)
    AND ([WebOKArchive] = @Original_WebOKArchive)
    AND ([QualiteArchive] = @Original_QualiteArchive)
    AND ((@IsNull_DateOriginalArchive = 1 AND [DateOriginalArchive] IS NULL) OR ([DateOriginalArchive] = @Original_DateOriginalArchive))
    AND ((@IsNull_LieuOriginalArchive = 1 AND [LieuOriginalArchive] IS NULL) OR ([LieuOriginalArchive] = @Original_LieuOriginalArchive))
    AND ((@IsNull_ThematiqueArchive = 1 AND [ThematiqueArchive] IS NULL) OR ([ThematiqueArchive] = @Original_ThematiqueArchive))
    AND ((@IsNull_DescGeneraleArchive = 1 AND [DescGeneraleArchive] IS NULL) OR ([DescGeneraleArchive] = @Original_DescGeneraleArchive))
    AND ([DateCreationArchive] = @Original_DateCreationArchive)
    AND ((@IsNull_UtilCreationArchive = 1 AND [UtilCreationArchive] IS NULL) OR ([UtilCreationArchive] = @Original_UtilCreationArchive))
    AND ([DateSuppressionArchive] = @Original_DateSuppressionArchive)
    AND ((@IsNull_UtilSuppressionArchive = 1 AND [UtilSuppressionArchive] IS NULL) OR ([UtilSuppressionArchive] = @Original_UtilSuppressionArchive)))"


    Une idée svp?
    Je précise que je me suis balladé pour trouver la réponse comme un grand, et que j'ai notamment déjà testé sans succès la fait de passer la propriété "DeleteItem" du BindingNavigator à "none", puis également suppression du bouton. En bref, A VOTRE BON COEUR M'SIEURS DAMES !

    jh

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 16
    Par défaut
    est-ce que celà pourrait être lié à un conflit entre le datagridview et les modifs dans les detail views ? ...

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 346
    Par défaut
    Bonjour,

    si une DBConcurrencyException est lancée, cela signifie que le serveur de base de données n'a trouvé aucune ligne a effacée. En effet, dans ta requête delete, il y a une clause where qui reprend toutes les valeurs originales de la ligne de la table à effacer et ceci afin de gérer les accès concurrentiel.
    Je pense qu'une des valeurs "ORIGINAL" n'est pas correcte et selon moi le problème vient d'un des champs date qui peut avoir une valeur NULL. J'ai déjà eu le problème. Ca merde un peu. Mets les en commentaire dans la requête et tu testes pour voir si ça marche ou pas. Observe ensuite la valeur pour vérifier si cette valeur est particulière.

    Dis moi quoi
    Bye

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 16
    Par défaut
    Tout d'abord, merci de te pencher sur mon problème!

    Les dates: ca peut être une bonne piste... j'avais un champ (DateSuppresion) dans la vue detail qui était un textbox avec une valeur facultative.. et laissées à vide pour mes quelques enregistrements de test...
    donc j'ai supprimé & remplacé ce contrôle par un DateTimePicker, et recréé un enregistrement de test mais cette fois en sélectionnant explicitement une date
    Résultat: sur validation, le UpdateAll plante pareil....

    En fait, je peux reproduire la même erreur en venant en modif même mineure (+1 lettre dans un textbox de champ non-clé) sur n'importe quel champ de l'enregistrement.....

    Si ça éclaire....

    PS: les procédures DeleteCommand, UpdateCommand etc... ont ét créé en auto. J'ai su comment récupéré la valeur DleteCommand.CommandText... mais ne voit pas comment introduire une modif genre commentaires sur certaines clauses.... Avec la même propriété en mode set plutôt que get ?

    D'avance merci,
    jh

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 346
    Par défaut
    Bonjour,

    modifies la requête à partir du Designer de DataSet et mets en commentaires les lignes de la clause Where où il y a test de valeur de champ date qui peuvent accepter les valeurs nul. Ne perds pas ton temps à chercher un problème dans l'affectation des données dans la vue. Je suis persuadé que ton problème vient de là.

    Bye

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 16
    Par défaut
    Ca sent vraiment le vécu !!! L'expérience a bien parlé : le problème a disparu ! BIEN SUR, un autre apparaît..... je m'explique.

    J'ai d'abord essayer la solution radicale :
    Dans le designer de dataset, j'ai modifiée directement la requête SELECT générique (de laquelle sont générées en automatique les commandes insert, update, delete.
    ) :
    "SELECT IDArchive, CheminArchive, TypeArchive, ..... DateCreationArchive, UtilCreationArchive, UtilSuppressionArchive
    FROM Archive"

    C'est là-dedans que j'ai enlevé en dur le champ DateSuppression dans la clause SELECT....

    Je sais, c'est pas terrible... mais bon, j'ai vu que mon appli ne plantait plus -> donc GENIAL et MERCI BCP !!


    Ensuite, j'ai modifié les commandes update & delete en enlevant le filtre sur le champ date incriminé.... sauvegarde ok....
    Pb: ca m'a apparemment fait sauté un certain nombre de références et donc gros plantage à la compilation...... le datasource n'existe plus, le tableadapter non plus d'ailleurs... le dataset.xsd ne s'ouvre plus sans une erreur "Failed to load dataset. 8 is not a valid int32 value..." ou truc du genre...

    Bref, si mon cher bienfaiteur du jour avait une autre solution miracle.
    Je vais naturellement essayer de recréer le dataset, avec le même nom pour que les milliards de ligne de code générées automatiquement restent cohérentes mais bon.... a suivre....... et bonne nuit sinon

    ciao
    jh

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/10/2006, 16h46
  2. Réponses: 1
    Dernier message: 10/04/2006, 20h22
  3. Réponses: 10
    Dernier message: 23/11/2005, 21h20
  4. CR9:Espace sur champ numérique après concaténation
    Par nanouille56 dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 07/07/2005, 09h35
  5. Erreur sur le TNSListener après installation de 9iAS
    Par Patmane dans le forum Installation
    Réponses: 4
    Dernier message: 04/02/2004, 11h16

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