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 :

Delete row Access


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 61
    Par défaut Delete row Access
    Bonjour,

    J'ai une base Access qui comprend une table USERS. J'ai créé un bouton SUPPRIMER pour pouvoir supprimer un utilisateur. Dans mon bouton j'ai ceci

    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
            Dim sql_supprimer As String
            Try
     
                sql_supprimer = "DELETE from USERS where ALPS ='" & TXT_ALPS_USER.Text & "'"
                commande_user = New OleDb.OleDbCommand(sql_supprimer, con_user)
                commande_user.ExecuteNonQuery()
                con_user.Close()
                con_user.Open()
                MsgBox("L'utilisateur a bien été supprimé")
     
            Catch ex As OleDbException
     
                MsgBox(ex.Message, MsgBoxStyle.Critical, "Oledb Error")
     
            Catch ex As Exception
     
                MsgBox(ex.Message, MsgBoxStyle.Critical, "General Error")
     
            End Try
     
        End Sub
    La suppression fonctionne mais la mise à jour ne se fait pas. Je suis obligé de quitter le formulaire pour ne plus voir mon utilisateur supprimer. Quelqu'un pourrait il m'aider ?

    Merci d'avance,

  2. #2
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    Bonjour,

    c'est normale,
    après ta suppression, tu ferme puis tu ré-ouvre seulement ta connexion à ta base sans recharger ton dataset.


    le célèbre P.Lasserre à réponse à ta question
    http://plasserre.developpez.com/cour...ees2#LXVII-E-2
    Effacer l'enregistrement en cours:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ObjetDataSet.Tables("FICHEPATIENT").Rows(RowNumber).Delete()
     
    ObjetCommandBuilder = New OleDbCommandBuilder(objetDataAdapter)
     
    ObjetDataAdapter.Update(objetDataSet, "FICHEPATIENT")
    Pas besoin de fermer ta connexion et la ré-ouvrir,
    met à jour ton dataset (p-e même le datagridview au besoin)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 61
    Par défaut
    Merci d'avoir répondu,

    J'ai déjà essayé de mettre à jour mon dataset dans ma procédure. La suppression marche mais dans ce cas là j'ai un message d'erreur du style Aucune ligne à la position 1.. Problème qui est dû je crois à cause de l'index.

    Sinon pour la procédure de P.Lasserre. En ce qui me concerne, j'ai du oublier un chapitre car ça ne marche pas chez moi

    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
     
            Dim sql_supprimer As String
            Try
                sql_supprimer = "DELETE from USERS where ALPS ='" & TXT_ALPS_USER.Text & "'"
                commande_user = New OleDb.OleDbCommand(sql_supprimer, con_user)
                commande_user.ExecuteNonQuery()
                dts_user.Clear()
                MsgBox("L'utilisateur a bien été supprimé")
            Catch ex As OleDbException
     
                MsgBox(ex.Message, MsgBoxStyle.Critical, "Oledb Error")
     
            Catch ex As Exception
     
                MsgBox(ex.Message, MsgBoxStyle.Critical, "General Error")
     
            End Try
     
     
        End Sub

  4. #4
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    En fait il faut simplement que tu mette à jour ton Dataset en re-Requettant ta BDD après avoir exécuté la requête de DELETE.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            Try
                sql_supprimer = "DELETE from USERS where ALPS ='" & TXT_ALPS_USER.Text & "'"
                commande_user = New OleDb.OleDbCommand(sql_supprimer, con_user)
                commande_user.ExecuteNonQuery()
                dts_user.Clear()
     
                ' Il manque la mise à jour du DataSet
                ' Il faut que tu lise ta BDD comme tu dois le faire au form_load
     
                MsgBox("L'utilisateur a bien été supprimé")
            Catch ex As OleDbException

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 61
    Par défaut
    Merci encore pour ta réponse mais je tourne toujours en rond.

    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
            Dim sql_supprimer As String
            Dim mybuild As OleDbCommandBuilder
     
            Try
                sql_supprimer = "DELETE from USERS where ALPS ='" & TXT_ALPS_USER.Text & "'"
                commande_user = New OleDb.OleDbCommand(sql_supprimer, con_user)
                commande_user.ExecuteNonQuery()
                dts_user.Clear()
                mybuild = New OleDbCommandBuilder(dta_user)
                dta_user.Update(dts_user, "USERS")
     
                MsgBox("L'utilisateur a bien été supprimé")
     
                demarrage_users() 'connexion
            Catch ex As OleDbException
     
                MsgBox(ex.Message, MsgBoxStyle.Critical, "Oledb Error")
     
            Catch ex As Exception
     
                MsgBox(ex.Message, MsgBoxStyle.Critical, "General Error")
     
            End Try
    Après avoir cherché comment faire pour mettre à jour mon dataset, j'en suis arrivé là mais c'est toujours pareil ..
    Aurais tu un exemple ?
    Merci d'avance

  6. #6
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    ça fait longtemps que j'ai fait un projet la dessus.

    en faite il y a 2 manières de procéder.
    Et la on est en train de faire un mix des deux

    1. Première méthode: effacement dans le Dataset puis mise à jour de la BDD
      souce: http://www.daniweb.com/software-deve.../threads/48686
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      'delete row
      DS_Pass1.Tables("PwordStore").Rows(0).Delete()
      Dim cmdbuilder As OleDbCommandBuilder = New oleDbCommandBuilder(OleDAPass)
      OleDAPass.update(DS_Pass1)
    2. Deuxième méthode: effacement dans la BDD puis mise à jour du Dataset
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      'Suppression de l'enregistrement dans la BDD
      sql_supprimer = "DELETE from USERS where ALPS ='" & TXT_ALPS_USER.Text & "'"
      commande_user = New OleDb.OleDbCommand(sql_supprimer, con_user)
      commande_user.ExecuteNonQuery()
      dts_user.Clear()
      'Mise à jour du Dataset
      sql_MAJ = "SELECT * from USERS"
      commande_user = New OleDb.OleDbCommand(sql_MAJ, con_user)
      ' J'écris le code de mémoire la...
      ' mais tu vois la démarche maintenant


    Je ne te donne que des idées, pas la solution.
    Regarde tout ce qui se fait sur internet
    tu apprendra plus en cherchant par toi même


    PS: désolé pour le retard.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 61
    Par défaut
    J'ai très bien compris les méthodes. Tes explications sont très clair. Néanmoins, j'ai toujours le même problème et je pense que c'est tout simplement l'index (i) qui se met pas à jour... Pour information, j'ai une procédure d'affichage permettant d'afficher l'ensemble des champs de ma table "USERS" et qui utilise cette index (i).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TXT_ALPS_USER.Text = dts_user.Tables("USERS").Rows(i).Item("ALPS").ToString
    J'aimerais alors à savoir si la mise à jour de l'index lors d'une suppression se fait automatiquement ? Faut-il que je créé une procédure qui repositionne les index ?
    exemple :
    Si on a 5 index et que je veux supprimer la ligne avec l'index 3, les 2 index qui suivent cette ligne supprimée se repositionne à l'index 3.

    Merci encore,

  8. #8
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    Citation Envoyé par Ced39300 Voir le message
    Néanmoins, j'ai toujours le même problème
    Peux tu nous montrer le code que tu a maintenant

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 61
    Par défaut
    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
            Dim sql_MAJ As String = "SELECT * FROM USERS"
            Dim mybuild As OleDbCommandBuilder
     
            Try
    ' suppression
                dts_user.Tables("USERS").Rows(i).Delete()
                mybuild = New OleDbCommandBuilder(dta_user)
                dta_user.Update(dts_user, "USERS")
                dts_user.Clear()  ' on vide le dataset
     
    'MAJ dataset
                commande_user = New OleDb.OleDbCommand(sql_MAJ, con_user)
                demarrage_users()
                MsgBox("L'utilisateur a bien été supprimé")
            Catch ex As OleDbException
     
                MsgBox(ex.Message, MsgBoxStyle.Critical, "Oledb Error")
     
            Catch ex As Exception
     
                MsgBox(ex.Message, MsgBoxStyle.Critical, "General Error")
     
            End Try

  10. #10
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    et qu'est ce qui se cache ici?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    'MAJ dataset
                commande_user = New OleDb.OleDbCommand(sql_MAJ, con_user)
            --> demarrage_users() <--
                MsgBox("L'utilisateur a bien été supprimé")
    ceci suffit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ' suppression
                dts_user.Tables("USERS").Rows(i).Delete()
                mybuild = New OleDbCommandBuilder(dta_user)
                dta_user.Update(dts_user, "USERS")
    Je comprend pas pourquoi tu efface le Dataset que tu viens de mette à jour
    Le seul détail qu'il te manque, c'est la mise à jour de ta listBox...
    Je te propose de la vider, puis de lui recharger la nouvelle liste
    (Un peu comme tu a du faire au form_load)

    Pour moi, tu n'a besoin que de ça :
    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
            Dim sql_MAJ As String = "SELECT * FROM USERS"
            Dim mybuild As OleDbCommandBuilder
     
            Try
    ' suppression
                dts_user.Tables("USERS").Rows(i).Delete()
                mybuild = New OleDbCommandBuilder(dta_user)
                dta_user.Update(dts_user, "USERS")
     
                ' Rafraichir la ListBox 
     
                MsgBox("L'utilisateur a bien été supprimé")
            Catch ex As OleDbException
     
                MsgBox(ex.Message, MsgBoxStyle.Critical, "Oledb Error")
     
            Catch ex As Exception
     
                MsgBox(ex.Message, MsgBoxStyle.Critical, "General Error")
     
            End Try
    Parce-que le problème, c'est que dans tous tes code tu arrive à recharger le Dataset,
    mais jamais tu ne rafraichi ta listBox....
    tu a beau passer par 2 moyens différents, jamais tu ne verra la différence à l'écran si tu ne l'affiche pas.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 61
    Par défaut
    Bonjour,

    Citation Envoyé par hunteshiva Voir le message
    Le seul détail qu'il te manque, c'est la mise à jour de ta listBox...
    Je te propose de la vider, puis de lui recharger la nouvelle liste
    (Un peu comme tu a du faire au form_load)
    Je n'ai pas du procéder comme il le fallait. Dans mon form_load je n'ai monté que ma connexion demarrage_user

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      Public Sub demarrage_users()
            con_user = New OleDbConnection
            con_user.ConnectionString = strConn
            strSql_user = "SELECT * FROM USERS"
            commande_user = New OleDb.OleDbCommand(strSql_user, con_user)
            commande_user.Connection.Open()
            dta_user = New OleDb.OleDbDataAdapter
            dta_user.SelectCommand = commande_user
            dta_user.Fill(dts_user, "USERS")
        End Sub
    je ne vois pas comment vider un index et le recharger, je dois lui affecter une listebox pour pouvoir afficher après suppression ?? Je suis dsl de te faire perdre ton temps, je suis débutant et je tourne en rond. En tout cas merci de me consacrer du temps sur mon manque de connaissance

  12. #12
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    Et comment tu fait alors pour afficher des valeurs dans ta listBox?

    Pour gérer ta listox il y a ces fonctions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    'effacer la listBox
    MaListBox.Clear ' ou MaListBox.items.clear
    'Ajout d'un élément dans la liste
    MaListBox.Items.Add("Toto")
    'tu a l'index aussi
    ' la je sais plus de tête
    Ce que je t'ais mis c'est de tête,
    a vérifier sur la toile pour s'assurer de la bonne syntaxe

    L'idée, c'est qu'après tu n'a plus qu'a parcourir ton tableau
    avec une boucle For ou While *c'est au choix*

    PS: désolé ce sont des infos à la volée, je dois préparer sur un chantier

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 61
    Par défaut
    Mais je n'ai aucune listbox .. Je pêche les valeurs depuis ma base Access et mon formulaire VB ne comprend que des textbox ou combo ..

  14. #14
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    Ouups, je me suis emballé dasn l'élan.

    Je suppose que tu choisi dans ta combobox la valeur que tu veux effacer?
    comment tu la met a jour? ou tu la charge?

    PS: le principe est le même entre une combobox et une lisBox.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 61
    Par défaut
    Je suppose que tu choisi dans ta combobox la valeur que tu veux effacer?
    Non pas du tout, j'ai un seul et unique formulaire (pour l'instant) qui comprend un bouton Consultation, modification, ajout et suppression pour les utilisateurs. (je t'ai mis une image en pièce jointe pour mieux t'expliquer)

    comment tu la met a jour? ou tu la charge?
    Je charge mes combobox comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ' Permet de générer les listes des agences pour les prestataire et intérimaire.
    dtr_agence = commande_agence.ExecuteReader
     
            While dtr_activite.Read
                CB_ACTIVITE_USER.Items.Add(dtr_activite.GetValue(0))
            End While
    J'aurai du sûrement commencer par là Dsl pour le manque d'information.
    Images attachées Images attachées   

  16. #16
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    Tu traite correctement ton Dataset,

    ce qu'il te manque c'est la mise à jour de l'interface graphique (textBox, ComboBox)
    Alors je sais pas comment tu fait au form_load,
    mais l'idée c'est de tout effacer, et de mettre à jour les "items" des ComboBox.

    Après si tu ne veux pas que tous tes champs deviennent vides quand tu efface un utilisateur,
    tu peux essayer de penser à récupérer l'iD qui est juste avant et donc dire que tu affichera celui la après le refresh de toute ta page.
    mais c'est du bonus.

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 61
    Par défaut
    Mais mon index i contiendra toujours la valeur supprimée, non ? Car je ne pense pas que faire un clear sur mes items modifiera l'index. Dans mon form_load, j'appelle uniquement ma connexion (demarrage_user). Et lorsque je clique sur un de mes bouton (consultation, modification ect ), j'ai une procédure affichage qui est appelée


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub affichage()
            TXT_ALPS_USER.Text = dts_user.Tables("USERS").Rows(i).Item("ALPS").ToString
            TXT_NOM_USER.Text = dts_user.Tables("USERS").Rows(i).Item("NOM_USER").ToString
            TXT_PRENOM_USER.Text = dts_user.Tables("USERS").Rows(i).Item("PRENOM_USER").ToString
    Je vais essayer tes solutions mais j'ai un doute, merci

  18. #18
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    Bah si ton dts_user est bien à jour,
    tu rappel juste ta fonction affichage()

    il devrait changer d'utilisateur, seul détail à faire gaffe.
    c'est que si tu supprime le dernier enregistrement, "i" va pointer trop loin.
    je te laisse gérer ce détail

Discussions similaires

  1. [VB.NET] Delete Row DataGridView temporairement
    Par tssi555 dans le forum VB.NET
    Réponses: 2
    Dernier message: 26/08/2009, 12h59
  2. probleme quand delete rows d une table
    Par benamar06 dans le forum C#
    Réponses: 3
    Dernier message: 16/02/2009, 13h02
  3. delete row de ma base
    Par anisj1m dans le forum JDBC
    Réponses: 7
    Dernier message: 20/03/2007, 15h00
  4. [C# 2.0] DataGridView add/delete row ?
    Par fix105 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 30/11/2006, 16h52

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