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

VB.NET Discussion :

TableAdapter : MAJ BDD (utilisation de tbox, lbox)


Sujet :

VB.NET

  1. #1
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 24
    Par défaut TableAdapter : MAJ BDD (utilisation de tbox, lbox)
    Bonjour,

    J'ai une listBox reprenant l'ensemble des utilisateurs stockés dans la table Utilisateur. Affichage du pseudo uniquement.

    J'ai un label qui indique l'ID de l'utilisateur selectionné.
    Une textbox qui indique le pseudo
    Une textbox qui indique le mot de passe.
    Un bouton valider pour enregistrer les modifications.

    Je ne m'attarde pour le moment pas encore sur le mot de passe.

    J'ai procédé comme suis en mode graphique :

    Association de la table Utilisateur à la listbox via la propriété DataSource
    Visual me crée un UtilisateurBindSource ,un Bd1DataSet et une UtilisateurTableAdapter
    Display Member = Pseudo

    Pour la textbox Pseudo : (DataBindings) / Text = UtilisateurBindingSource - Pseudo
    Pour le label ID : (DataBindings) / Text = UtilisateurBindingSource - ID_Personne

    Dans le code :
    A été généré dans le load :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Me.UtilisateurTableAdapter.Fill(Me.Bd1DataSet.Utilisateur)
    'Pensant que ça pouvait être la source du problème, j'ai redefini la commande update mais ça me "marche" sans celle-ci.
    'UtilisateurTableAdapter.Adapter.UpdateCommand = New OleDbCommand("UPDATE Utilisateur SET Pseudo = '" & tbPseudo.Text & "' WHERE ID_Personne = " & laID.Text, con)
    Lorsque je clique sur le bouton Valider, j'execute la ligne suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Me.Bd1DataSet.Utilisateur.AcceptChanges()
    UtilisateurTableAdapter.Update(Me.Bd1DataSet.Utilisateur)
    Symptomes :

    Lorsque je modifie le pseudo dans la textBox et que je clique sur Valider, il met bien a jour le pseudo dans la listBox mais pas dans la base de donnée.

    PAR CONTRE, lorsque après avoir fait la même chose que ci-dessus, je me balade dans la listbox, re selectionne l'utilisateur clique dans la textbox pseudo et clique sur valider. la modification s'enregistre dans la BDD.

    Il me faut donc cliquer deux fois sur Valider pour que l'enregistrement s'effectue dans la BDD... pourquoi ?

    NB : Il s'agit d'un tableAdapteur, je le dis parce que en cherchant sur google j'ai pas trouvé beaucoup de doc

    NB2 :
    Lorsque dans le code du bouton valider je met le code suivant, la modification s'effectue immédiatement dans la BDD :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     cmd = New OleDbCommand("UPDATE Utilisateur SET Pseudo = '" & tbPseudo.Text & "' WHERE ID_Personne = " & laID.Text, con)
            cmd.ExecuteNonQuery()

  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 : 43
    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
    Par défaut
    Le fait d'appeler AcceptChanges sur la table marque toutes les lignes comme non modifiées. Comme Update ne prend en compte que les lignes modifiées (ou ajoutées ou supprimées), si tu appelles AcceptChanges juste avant, Update considère qu'il n'a rien à faire !

    Supprime l'appel à AcceptChanges, et ça devrait marcher (AcceptChanges est appelé automatiquement à la fin de Update de toutes façons)

  3. #3
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 24
    Par défaut
    Merci de ta réponse, cependant le problème reste identique.

    Différence constatée :

    Après le clic sur le bouton valider, la listbox ne se met pas à jour. Elle se met a jour uniquement lorsqu'on clique sur un élément de la liste.

  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 : 43
    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
    Par défaut
    J'ai fait le test, et j'ai effectivement reproduit le problème

    J'ai trouvé une solution, mais c'est assez moche... En gros, tu peux gérer l'évènement Validated des TextBox avec ce handler :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub bindingControls_Validated(sender As Object, e As EventArgs) Handles tbId.Validated, tbPseudo.Validated
    	UtilisateurBindingSource.ResetBindings(False)
    End Sub

Discussions similaires

  1. MAJ BDD Update TableAdapter
    Par tmerigon dans le forum C#
    Réponses: 17
    Dernier message: 24/03/2010, 17h44
  2. [MySQL] MAJ BDD par un fichier .txt distant
    Par Nalack dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 17/01/2007, 19h25
  3. Réponses: 1
    Dernier message: 24/10/2006, 12h10
  4. [PHP-JS] Fenêtre invisible (pour MAJ BDD) ?
    Par Lideln dans le forum Langage
    Réponses: 7
    Dernier message: 01/08/2006, 19h05
  5. [ADO.NET] MAJ BDD à partir d'un DataSet d'un DataGrid
    Par bart64 dans le forum Accès aux données
    Réponses: 15
    Dernier message: 20/12/2005, 18h16

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