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 :

Modifier un enregistrement - vb2010 acces 2007 [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 63
    Par défaut Modifier un enregistrement - vb2010 acces 2007
    Salut à tout le monde;
    je développe une application de gestion des élèves et je suis bloqué à mise à jour d'un enregistrement existant.
    ma table est:
    create table NOTES (N° int identity primary key, Classe float, C1 float, C2 float, CI float, CA float, MOY float)
    un module qui contient des variables globales:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Imports System.Data.OleDb
    Module Module1
    'instancier l'objet de connexion
    Public Cn As New OleDbConnection("Provider=MicroSoft.ACE.OLEDB.12.0; Data Source=" & Application.StartupPath & "\gestion.accdb")
    Public  Cmd As New OleDbCommand
    Public Dr As OleDbDataReader
    End Module
    un formulaire qui se charge en remplissant un Datagridview avec les données de la table NOTES:
    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 i, j As Integer
            Cn.Open()
            If Cn.State = ConnectionState.Open Then
                Cmd.CommandType = CommandType.Text
                Cmd.CommandText = "SELECT * FROM NOTES "
                CmdClasse.Connection = Cn
                Dr = CmdClasse.ExecuteReader
                If Dr.HasRows Then
                    Dim t As New DataTable
                    t.Load(Dr)
                    DataGridView1.DataSource = t
                    Dr.Close()
                    Cn.Close()
                Else
                    MsgBox("Aucun résultat trouvé", 0 + 16, "Attention !!")
                End If
            Else
                MsgBox("Erreur de connexion", 0 + 16, "Erreur !!")
            End If
    le datagridview charge dand 24 lignes les champs N° et classe dans les colonne 0 et 1 les autre colonnes (2,3,4,5,6) sont encore vides, on va donc les remplir.
    un bouton btnEdit permetant d'exporter les notes à la table NOTES à partir de ce datagridview :
    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
     
    Private Sub btnEdit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEdit.Click
     Dim j As Integer
     For j = 0 To 24
    DataGridView1.Rows.Item(j).Cells(6).Value = (DataGridView1.Rows.Item(j).Cells(2).Value + DataGridView1.Rows.Item(j).Cells(3).Value _
                                                           + DataGridView1.Rows.Item(j).Cells(4).Value * 4 + DataGridView1.Rows.Item(j).Cells(5).Value * 2) / 5
    With Cmd
                        .CommandType = CommandType.Text
                        .CommandText = "UPDATE NOTES SET C1 =@P1, C2 =@P2, CI =@P3, CA =@P4, MOY =@P5"
                        .Connection = Cn
                        With .Parameters
                            .AddWithValue("@P1", DataGridView1.Rows.Item(j).Cells(2).Value)
                            .AddWithValue("@P2", DataGridView1.Rows.Item(j).Cells(3).Value)
                            .AddWithValue("@P3", DataGridView1.Rows.Item(j).Cells(4).Value)
                            .AddWithValue("@P4", DataGridView1.Rows.Item(j).Cells(5).Value)
                            .AddWithValue("@P5", DataGridView1.Rows.Item(j).Cells(6).Value)
                        End With
                    End With
                    Cn.Open()
                    Cmd.ExecuteNonQuery()
                    Cn.Close()
    Next
    End Sub
    le problème c'est que la modification porte sur les 24 champs de la table mais la boucle for ne sort pas de la première ligne (j=0) d’où la première ligne de la table de duplique 24 fois.

    Merci pour l'aide..

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Bonjour,

    Il faut indiquer à la requête la ligne concernée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .CommandText = "UPDATE NOTES SET C1 =@P1, C2 =@P2, CI =@P3, CA =@P4, MOY =@P5 Where identity = @P6 "
    avec pour paramètre pour identity (@P6) certainement DataGridView1.Rows.Item(j).Cells(0).Value).

    A+, Hervé.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 63
    Par défaut
    Citation Envoyé par rv26t Voir le message
    Bonjour,

    Il faut indiquer à la requête la ligne concernée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .CommandText = "UPDATE NOTES SET C1 =@P1, C2 =@P2, CI =@P3, CA =@P4, MOY =@P5 Where identity = @P6 "
    avec pour paramètre pour identity (@P6) certainement DataGridView1.Rows.Item(j).Cells(0).Value).

    A+, Hervé.
    merci pour le geste
    mais j'ai modifier comme ç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
     
                    With CmdClasse
                        .CommandType = CommandType.Text
                        .CommandText = "UPDATE NOTES SET C1 =@P1, C2 =@P2, CI =@P3, CA =@P4, MOY =@P5 Where N° = @P0 " 'AND Classe = " & lblClasse.Text
                        .Connection = Cn
                        With .Parameters
                            .AddWithValue("@P0", DataGridView1.Rows.Item(j).Cells(0).Value)
                            .AddWithValue("@P1", DataGridView1.Rows.Item(j).Cells(2).Value)
                            .AddWithValue("@P2", DataGridView1.Rows.Item(j).Cells(3).Value)
                            .AddWithValue("@P3", DataGridView1.Rows.Item(j).Cells(4).Value)
                            .AddWithValue("@P4", DataGridView1.Rows.Item(j).Cells(5).Value)
                            .AddWithValue("@P5", DataGridView1.Rows.Item(j).Cells(6).Value)
                        End With
                    End With
    l'update de se fais plus

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Attention piège Access
    Sous access les paramètres doivent être ajouté dans l'ordre d'apparition dans la requête
    donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                    With .Parameters
                        .AddWithValue("@P1", DataGridView1.Rows.Item(j).Cells(2).Value)
                        .AddWithValue("@P2", DataGridView1.Rows.Item(j).Cells(3).Value)
                        .AddWithValue("@P3", DataGridView1.Rows.Item(j).Cells(4).Value)
                        .AddWithValue("@P4", DataGridView1.Rows.Item(j).Cells(5).Value)
                        .AddWithValue("@P5", DataGridView1.Rows.Item(j).Cells(6).Value)
                        .AddWithValue("@P0", DataGridView1.Rows.Item(j).Cells(0).Value)
                    End With
    sinon, pour info il vaut mieux ouvrir la connexion avant la boucle de 25 et la fermer après. Parceque ouvrir et fermer 25 fois la connexion, en terme de performance ce n'est pas ce qu'il y a de mieux.

    [Edit]
    D'ailleur la requête devrait plus ressembler à ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .CommandText = "UPDATE NOTES SET C1 = ?, C2 = ?, CI = ?, CA = ?, MOY = ? Where identity = ? "
    [/Edit]
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 63
    Par défaut
    Après le dernier changement apporté par MR rv26t :

    Mon code exact est:
    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
     
    Cn.Open()
     Dim j As Integer
     For j = 0 To DataGridView1.RowCount - 1
    DataGridView1.Rows.Item(j).Cells(6).Value = (DataGridView1.Rows.Item(j).Cells(2).Value + DataGridView1.Rows.Item(j).Cells(3).Value + _ 
                                                DataGridView1.Rows.Item(j).Cells(4).Value + DataGridView1.Rows.Item(j).Cells(5).Value ) / 4
    With Cmd
              .CommandType = CommandType.Text
              .CommandText = "UPDATE NOTES SET C1 = @P1, C2 = @P2, CI = @P3, CA =@P4, MOY =@P5 Where N° = @P0 " 
              .Connection = Cn
              With .Parameters
                            .AddWithValue("@P1", DataGridView1.Rows.Item(j).Cells(2).Value)
                            .AddWithValue("@P2", DataGridView1.Rows.Item(j).Cells(3).Value)
                            .AddWithValue("@P3", DataGridView1.Rows.Item(j).Cells(4).Value)
                            .AddWithValue("@P4", DataGridView1.Rows.Item(j).Cells(5).Value)
                            .AddWithValue("@P5", DataGridView1.Rows.Item(j).Cells(6).Value)
                            .AddWithValue("@P0", DataGridView1.Rows.Item(j).Cells(0).Value)
              End With
    End With
    Cmd.ExecuteNonQuery()
    Next
    Cn.Close()
    le résultat est que la mise à jour touche seulement le premier enregistrement.
    Même on échoue de modifier l'enregistrement une deuxième fois.
    j'ai pas pu trouver le truc

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Un clear des paramètre est necessaire avant l'ajout des paramètres
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Ligne 7
    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
    ' ...
    With Cmd
              .CommandType = CommandType.Text
              .CommandText = "UPDATE NOTES SET C1 = @P1, C2 = @P2, CI = @P3, CA =@P4, MOY =@P5 Where N° = @P0 " 
              .Connection = Cn
              With .Parameters
                            .Clear()
                            .AddWithValue("@P1", DataGridView1.Rows.Item(j).Cells(2).Value)
                            .AddWithValue("@P2", DataGridView1.Rows.Item(j).Cells(3).Value)
                            .AddWithValue("@P3", DataGridView1.Rows.Item(j).Cells(4).Value)
                            .AddWithValue("@P4", DataGridView1.Rows.Item(j).Cells(5).Value)
                            .AddWithValue("@P5", DataGridView1.Rows.Item(j).Cells(6).Value)
                            .AddWithValue("@P0", DataGridView1.Rows.Item(j).Cells(0).Value)
              End With
    '...
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

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

Discussions similaires

  1. [Débutant] Insérer un nouveau enregistrement - vb2010 acces 2007
    Par bucabuca dans le forum VB.NET
    Réponses: 7
    Dernier message: 23/05/2013, 12h26
  2. [MySQL] Un formulaire pour afficher et modifier un enregistrement
    Par Atchoum_002 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 26/09/2005, 14h13
  3. Réponses: 11
    Dernier message: 30/08/2005, 09h31
  4. [APACHE] Modifié les droits d'accès à un dossier.
    Par will-scs dans le forum Apache
    Réponses: 1
    Dernier message: 26/08/2005, 22h12
  5. Modifier un enregistrement.
    Par rabbi_jaccob dans le forum C++Builder
    Réponses: 17
    Dernier message: 26/08/2005, 16h50

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