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 :

Modification d'un enregistrement


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Par défaut Modification d'un enregistrement
    Je veux modifier un enregistrement mais d'après le code que j'ai établi aucune modification ne s'effectue. Comment faire?

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    Private Sub Btnmodif_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btnmodif.Click
            Btnmodif.Enabled = False
            Btnannuler.Enabled = False
            Btnediter.Enabled = True
            Dim cnx As New OleDbConnection
            Dates.Visible = False
            Txtdates.Visible = True
            Txtdates.Text = ""
            Datef.Visible = False
            Txtdatef.Visible = True
            Txtdatef.Text = ""
            Cbxfrs.Visible = False
            Txtnomfrs.Visible = True
            Txtnomfrs.Text = ""
            Txtnumab.Enabled = False
            Txtnumab.ReadOnly = True
            Txtnumab.Text = ""
            Txtlibab.Enabled = False
            Txtlibab.Text = ""
            Txtdates.Enabled = False
            Txtdates.ReadOnly = True
            Txtdatef.Enabled = False
            Txtdatef.ReadOnly = True
            Txtmontantab.Enabled = False
            Txtmontantab.ReadOnly = True
            Txtmontantab.Text = ""
            Txtnumfrs.Enabled = False
            Txtnumfrs.ReadOnly = True
            Txtnumfrs.Text = ""
            Txtnomfrs.Enabled = False
            Txtnomfrs.ReadOnly = True
            Txtnomfrs.Text = ""
            Dim command = New OleDbCommand("update Abonnement set Abonnement.Num_abonnement='" & Cbxnumab.Text & "'", cnx)
            Try
                cnx.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source = C:\Documents and Settings\Administrateur.STANDARD\Mes documents\Projet Budget\Budget\Budget\Marches.mdb"
                cnx.Open()
     
            Catch ex As Exception
     
            End Try
            Me.Dispose()
            Frmprincipale.Show()
        End Sub

  2. #2
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Ben il faudrait sans doute que tu exécutes la requête avec un ExecuteNonQuery()...
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Par défaut Risque de doublons
    J'ai fait comme tu m'as dit sauf que quand j'essaye d'insérer cet enregistrement modifié il me met qu'il y a un risque de doublons. Il n'accepte pas de réinsérer la clé primaire qui est le numéro de l'abonnement. comment faire pour qu'il accepte de le réinscrire?
    voici mon nouveau code :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    Private Sub Btnmodif_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btnmodif.Click
            Btnmodif.Enabled = False
            Btnannuler.Enabled = False
            Btnediter.Enabled = True
            Dim cnx As New OleDbConnection
            Dates.Visible = False
            Txtdates.Visible = True
            Txtdates.Text = ""
            Datef.Visible = False
            Txtdatef.Visible = True
            Txtdatef.Text = ""
            Cbxfrs.Visible = False
            Txtnomfrs.Visible = True
            Txtnomfrs.Text = ""
            Txtnumab.Enabled = False
            Txtnumab.ReadOnly = True
            Txtnumab.Text = ""
            Txtlibab.Enabled = False
            Txtlibab.Text = ""
            Txtdates.Enabled = False
            Txtdates.ReadOnly = True
            Txtdatef.Enabled = False
            Txtdatef.ReadOnly = True
            Txtmontantab.Enabled = False
            Txtmontantab.ReadOnly = True
            Txtmontantab.Text = ""
            Txtnumfrs.Enabled = False
            Txtnumfrs.ReadOnly = True
            Txtnumfrs.Text = ""
            Txtnomfrs.Enabled = False
            Txtnomfrs.ReadOnly = True
            Txtnomfrs.Text = ""
            Dim command = New OleDbCommand("update Abonnement set Abonnement.Num_abonnement='" & Cbxnumab.Text & "'")
            Try
                cnx.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source = C:\Documents and Settings\Administrateur.STANDARD\Mes documents\Projet Budget\Budget\Budget\Marches.mdb"
                cnx.Open()
                command.connection = cnx
                command.executenonquery()
                MsgBox("L'abonnement a été modifié avec succès", MsgBoxStyle.Information + MsgBoxStyle.OkOnly)
            Catch ex As Exception
                MsgBox(ex.Message)
            Finally
                If Not (cnx Is Nothing) Then
                    cnx.Close()
                End If
            End Try
            Me.Dispose()
            Frmprincipale.Show()
        End Sub

  4. #4
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    C'est normal, tu essaies réaffecter la même clé primaire à toutes les lignes de la table. Tu n'aurais pas oublié la clause WHERE de ta requête UPDATE ?

    Et au passage, ça ne sert à rien de faire un Me.Dispose à la fin...
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Par défaut
    Comment je peux corriger cela? Peux tu me donner un exemple ou de corriger mon code SVP?

  6. #6
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Ben tu ajoutes une clause WHERE dans ta requête SQL pour ne mettre à jour qu'un des enregistrements (celui qui correspond à tes critères).
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  7. #7
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Par défaut
    Peux tu me corriger mon code ou me donner un exemple?

  8. #8
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "UPDATE table SET champ = nouvelle_valeur WHERE champ = valeur_recherchee AND autrechamp = autre_valeur_recherchee"
    C'est du SQL de base, je vois ce qui te pose problème...
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  9. #9
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Par défaut
    Merci Saumonagile j'ai plus ce msg d'erreur mais l'insertion de l'enregistrement modifié ne s'effectue pas. pourquoi?

  10. #10
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Ben ce n'est pas une insertion que tu fais, c'est une mise à jour...
    Tu dois avoir un enregistrement modifié, mais en aucun cas, tu n'auras un nouvel enregistrement.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  11. #11
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Par défaut
    Comment je fais pour modifier un enregistrement existant?

  12. #12
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Par défaut
    Saumonagile j'ai pas compris ce que vous voulez dire par vous devez avoir un enregistrement modifié. Pouvez vous me précisez avec plus de détails?

  13. #13
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Le problème est que ta requête SQL essaie de modifier TOUT les enregistrements au lieu de modifier seulement celui que tu veux.
    Dans ton code comment sais tu quel enregistrement tu veux modifier ?

    La solution c'est que ta requête ne doit pas modifier tout les enregistrements, mais seulement celui qui t'intéresse. C'est à ça que sert la clause WHERE de la requête UPDATE : à spécifier les critères de modification de ta requête.
    Si tu souhaites modifier la clé primaire d'un enregistrement, tu dois faire une requête du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE table SET cle = nouvelle_cle WHERE cle = ancienne_cle
    Après, je ne vois pas quoi dire de plus, si tu ne comprends toujours pas, commence par les cours de SQL avant d'essayer de l'appliquer dans ton code.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  14. #14
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Par défaut
    La seule modification qu'il effectue c'est qu'il efface la clé primaire bien qu'au niveau du champ "txtnumab.text" il existe une valeur et il ne prend pas en compte les autres modifications effectuées.
    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
     
    Dim cnx As New OleDbConnection
            Dim command = New OleDbCommand("update Abonnement set Abonnement.Num_abonnement='" & Txtnumab.Text & "'" & "where Num_abonnement='" & Cbxnumab.Text & "'")
            Try
                cnx.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source = C:\Documents and Settings\Administrateur.STANDARD\Mes documents\Projet Budget\Budget\Budget\Marches.mdb"
                cnx.Open()
                command.connection = cnx
                command.executenonquery()
                MsgBox("L'abonnement a été modifié avec succès", MsgBoxStyle.Information + MsgBoxStyle.OkOnly)
            Catch ex As Exception
                MsgBox(ex.Message)
            Finally
                If Not (cnx Is Nothing) Then
                    cnx.Close()
                End If
            End Try

  15. #15
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Utilise plutot des paramètres SQL pour passer les valeurs de tes paramètres plutot que de concaténer directement les valeurs issues de tes textbox.
    Regarde du côté de OleDbParameter dans la MSDN.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  16. #16
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Par défaut
    J'ai trouvé la solution toute seule . La voici :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    Private Sub Btnmodif_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btnmodif.Click
            Btnmodif.Enabled = False
            Btnannuler.Enabled = False
            Btnediter.Enabled = True
            Dates.Visible = False
            Txtdates.Visible = True
            Datef.Visible = False
            Txtdatef.Visible = True
            Cbxfrs.Visible = False
            Txtnomfrs.Visible = True
            Txtnumab.Enabled = False
            Txtnumab.ReadOnly = True
            Txtlibab.Enabled = False
            Txtdates.Enabled = False
            Txtdates.ReadOnly = True
            Txtdatef.Enabled = False
            Txtdatef.ReadOnly = True
            Txtmontantab.Enabled = False
            Txtmontantab.ReadOnly = True
            Txtnumfrs.Enabled = False
            Txtnumfrs.ReadOnly = True
            Txtnomfrs.Enabled = False
            Txtnomfrs.ReadOnly = True
            Dim cnx As New OleDbConnection
            Dim command = New OleDbCommand("update Abonnement set Abonnement.Num_abonnement='" & Cbxnumab.Text & "'" & ", Abonnement.Lib_abonnement='" & Txtlibab.Text & "'" & ", Abonnement.Date_debut_ab='" & Dates.Value & "'" & ", Abonnement.Date_fin_ab='" & Datef.Value & "'" & ", Abonnement.Montant_ab='" & Txtmontantab.Text & "'" & ", Abonnement.Num_frs='" & Txtnumfrs.Text & "'" & ",Abonnement.Nom_frs='" & Cbxfrs.Text & "'" & "where Num_abonnement='" & Cbxnumab.Text & "'", cnx)
            Try
                cnx.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source = C:\Documents and Settings\Administrateur.STANDARD\Mes documents\Projet Budget\Budget\Budget\Marches.mdb"
                cnx.Open()
                command.connection = cnx
                command.executenonquery()
                MsgBox("L'abonnement a été modifié avec succès", MsgBoxStyle.Information + MsgBoxStyle.OkOnly)
            Catch ex As Exception
                MsgBox(ex.Message)
            Finally
                If Not (cnx Is Nothing) Then
                    cnx.Close()
                End If
            End Try
            Me.Dispose()
            Frmprincipale.Show()
        End Sub

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

Discussions similaires

  1. modification d'un enregistrement par une requete
    Par tzinzin dans le forum Access
    Réponses: 7
    Dernier message: 23/03/2006, 20h36
  2. date de modification d'un enregistrement
    Par xycoco dans le forum Access
    Réponses: 3
    Dernier message: 15/11/2005, 21h47
  3. [IBquery]modification manuelle d'enregistrement
    Par dudux dans le forum Bases de données
    Réponses: 5
    Dernier message: 27/06/2005, 20h53
  4. TDBlookupcombo et modification d'un enregistrement existant
    Par delphim dans le forum Bases de données
    Réponses: 1
    Dernier message: 19/04/2005, 12h11
  5. Gestion des modifications pour un enregistrement
    Par Pascal Jankowski dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/03/2004, 14h09

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