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

ADO.NET Discussion :

Dataset et Datagridview


Sujet :

ADO.NET

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Dataset et Datagridview
    Bonjour à tous,

    J'ai à réalisé une application concernant une liste de matériel (qui provient de 3 tables de ma BDD) que je doit gérer dans un Datagridview (modification/ajout/suppression) après avoir remplis un dataset

    Je découvre ADO.net et j'ai quelques questions à vous poser.

    Tout d'abord, (sachant qu'il faut que je mette à jour mon dataset aprés les modifs effectuées) il est préférable de créer 3 datatables différentes avec 3 requetes sans jointures, ou une seule datatable avec une requetes et des jointures ?

    Ensuite, pour la mise à jour de la BDD à l'aide du dataset, si je choisis l'option de ne créer qu'une seule datatable (avec une requete et des jointures), est-il possible de faire l'update sur les 3 tables de la BDD directement ?
    J'ai lu pas mal de choses sur la méthode update de l'objet dataset mais ce n'est pas encore très clair.

    au cas ou voici la requete pour l'option d'une seule datatable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    z_rqte = "SELECT  T1.Af_Ctr_Cde,T2.Mt_DesRef, T3.Et_Lib, T2.Mt_SriCst, T1.Af_NumCtt, T1.Af_DteCtt, T1.Af_NbrLoy, "
    z_rqte = z_rqte & "T1.Af_MttLoy, T1.Af_DepGar, T1.Af_CttFin, T1.Af_DepGar "
    z_rqte = z_rqte & "FROM MAS..Mt_Aff T1 INNER JOIN MAS..Mt_Mtr T2 ON T1.Af_Ett_Mtr = T2.Mt_Ett_Mtr "
     z_rqte = z_rqte & "AND T1.Af_Mtr_SriCst = T2.Mt_SriCst INNER JOIN MAS..Mt_Ett T3 ON T2.Mt_Ett_Mtr = T3.Et_Cde "
     z_rqte = z_rqte & "WHERE T1.Af_Ctr_Cde='" & z_stCodCentre & "'"
    Pour résumer :
    soit:
    -je crée 3 datatables différentes représentant mes 3 tables de la BDD
    -je les ajoute à mon dataset
    -je remplis mon datagridview
    -je met à jour ma BDD avec mon dataset

    soit:
    -je crée une seule datatable comportant le résultat de la requête
    -je l'ajoute à mon dataset
    -je remplis mon datagridview
    -je met à jour ma BDD avec mon dataset

    j'espère avoir été assez clair

    Merci d'avance

  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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par gael74 Voir le message
    Tout d'abord, (sachant qu'il faut que je mette à jour mon dataset aprés les modifs effectuées) il est préférable de créer 3 datatables différentes avec 3 requetes sans jointures, ou une seule datatable avec une requetes et des jointures ?
    Ben ça dépend de comment tu vas utiliser les données... Mais si tu dois mettre à jour derrière, c'est plus facile avec 3 DataTable séparées.

    Citation Envoyé par gael74 Voir le message
    Ensuite, pour la mise à jour de la BDD à l'aide du dataset, si je choisis l'option de ne créer qu'une seule datatable (avec une requete et des jointures), est-il possible de faire l'update sur les 3 tables de la BDD directement ?
    J'ai lu pas mal de choses sur la méthode update de l'objet dataset mais ce n'est pas encore très clair.
    Tu ne peux pas faire un Update d'une table si la SelectCommand est une jointure, en tous cas pas avec les requêtes de mise à jour générées par DbCommandBuilder : ça ne fonctionne qu'avec les requêtes sur une seule table. Par contre tu dois pouvoir créer toi-même les requêtes UpdateCommand/InsertCommand/DeleteCommand de l'adapteur, en mappant les paramètres sur les colonnes de la DataTable (DbParameter.SourceColumn)

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Ben ça dépend de comment tu vas utiliser les données... Mais si tu dois mettre à jour derrière, c'est plus facile avec 3 DataTable séparées.
    J'avais choisi cette solution c'est déjà ça
    Par contre, il existe une méthode simple pour remplir le datagridview avec plusieurs datatables ?
    je sais qu'avec une datatable on utilise " datagridview.datasource = dataset ", mais là je me suis "embetté" à faire un parcours de toutes les datatables pour ajouter les items un par un, donc c'est un peu lourd.

    Tu ne peux pas faire un Update d'une table si la SelectCommand est une jointure, en tous cas pas avec les requêtes de mise à jour générées par DbCommandBuilder : ça ne fonctionne qu'avec les requêtes sur une seule table. Par contre tu dois pouvoir créer toi-même les requêtes UpdateCommand/InsertCommand/DeleteCommand de l'adapteur, en mappant les paramètres sur les colonnes de la DataTable (DbParameter.SourceColumn)
    Ok, étant donné que je suis parti sur les 3 tables, je vais créer les propriétés InsertCommand/UpdateCommand/DeleteCommand.

    Encore une question

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "UPDATE Customers SET CustomerID = @CustomerID, CompanyName =  @CompanyName "
    Cette requête va bien mettre à jour plusieurs lignes si je ne précise pas de where ? (j'ai encore un peu de mal avec les paramètres)

    Merci encore pour ton aide !

  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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par gael74 Voir le message
    J'avais choisi cette solution c'est déjà ça
    Par contre, il existe une méthode simple pour remplir le datagridview avec plusieurs datatables ?
    Tu peux modéliser dans le DataSet les relations entre les tables. Si tu as besoin dans la table X d'un champ "toto" de la table parente Y, tu peux créer la colonne "toto" dans X en spécifiant comme expression :
    "Parent(Nom_De_La_Relation).toto"


    Citation Envoyé par gael74 Voir le message
    Ok, étant donné que je suis parti sur les 3 tables, je vais créer les propriétés InsertCommand/UpdateCommand/DeleteCommand.
    Ben non, justement... c'est seulement si tu avais créé une seule DataTable avec le résultat de la jointure que tu devrais faire ça. Si tu fais des DataTable séparées, le CommandBuilder se débrouillera pour générer ces commandes automatiquement.

    Citation Envoyé par gael74 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "UPDATE Customers SET CustomerID = @CustomerID, CompanyName =  @CompanyName "
    Cette requête va bien mettre à jour plusieurs lignes si je ne précise pas de where ? (j'ai encore un peu de mal avec les paramètres)
    Oui, donc tu as plutôt intérêt à mettre un WHERE... mais de toutes façons tu ne devrais pas avoir besoin de créer les requêtes toi-même.

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Ok,en fait il me semble plus intéressant d'utiliser les propriétés InsertCommand/UpdateCommand/DeleteCommand avec les parametres (histoire d'apprendre à manipuler tout ça)
    J'avais gardé une autre version de mon programme avec une seule Datatable donc je réutilise la requête avec les jointures.
    Je me pose encore une question (dsl je n'ai pas trouvé d'exemple sur le net)

    Par exemple j'ai la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT T2.champ1 ,T1.champ2,T2. champ8 FROM Table1 T1 JOIN Table2 T2 ON T1.champ2 = T2.champ1
    Donc je met le résultat dans une datatable d'un dataset, je fais mes manips avec mon datagrid et ainsi de suite..

    Pour la mise à jour, lorsque je créer mon UpdateCommand (et insert/delete...) :

    Dans mon selectcommand, je met ma requete avec la jointure? ou je doit faire 2 selectcommand différents ?
    Je me pose la meme question pour les updatecommand/insert/delete ...

    Merci encore

    Apparemment, il faut faire 2 requêtes différentes pour chaque commande (j'ai trouvé ça mise à jour avec jointure )
    Ce n'est pas du Ado.net mais je suppose que c'est le même principe. Peut tu me confirmer ça ?

  6. #6
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Pour le SelectCommand, tu mets la requête avec la jointure.
    Pour les autres, tu mets autant de requêtes que de tables à mettre à jour, séparées par des points-virgules. (ce dernier point est un peu théorique, j'ai jamais essayé... donc je suis pas certain que ça marche )

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    J'ai fait comme tu m'as dit pour le SelelectCommand et j'ai essayé d'avancer un peu avec ce que je trouve sur internet (pas grand chose pour ça, c'est bien la 1ere fois )


    Voila ce que ça donne :

    pour le param p_rqte , toujours la même requete avec les jointures :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT  T1.Af_Ctr_Cde,T2.Mt_DesRef, T3.Et_Lib, T2.Mt_SriCst, T1.Af_NumCtt, T1.Af_DteCtt, T1.Af_NbrLoy, T1.Af_MttLoy, T1.Af_DepGar, T1.Af_CttFin, T1.Af_MttOldLoy FROM MAS..Mt_Aff T1 INNER JOIN MAS..Mt_Mtr T2 ON T1.Af_Ett_Mtr = T2.Mt_Ett_Mtr AND T1.Af_Mtr_SriCst = T2.Mt_SriCst INNER JOIN MAS..Mt_Ett T3 ON T2.Mt_Ett_Mtr = T3.Et_Cde WHERE T1.Af_Ctr_Cde='" & z_stCodCentre & ""



    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    Public Sub UpdateDataset(ByVal p_Dts As DataSet, ByVal p_datatable As String, ByVal p_rqte As String, ByVal p_tableBdd As String)
            'Met à jour les Tables de la BDD
     
     
            Dim z_Adp As New OleDb.OleDbDataAdapter
            z_Adp.SelectCommand = New OleDb.OleDbCommand(p_rqte, z_Cnx)
     
            Try
     
                z_Adp.Fill(p_Dts, p_datatable)
     
                Select Case p_tableBdd 'en fonction de la table 
                    Case "Mt_Aff"
     
                        'Commande Update
                        z_Adp.UpdateCommand = New OleDbCommand("UPDATE MAS.." & p_tableBdd & " SET Af_Ctr_Cde =? ,Af_NumCtt = ? , Af_DteCtt = ? , Af_NbrLoy = ? , " & _
                        " Af_MttLoy = ? ,Af_DepGar = ? , Af_CttFin = ? , Af_MttOldLoy = ? WHERE Af_Ctr_Cde = ? ", z_Cnx)
     
                        Createparameters(z_Adp, "Update", "?Af_Ctr_Cde", "Af_Ctr_Cde", OleDbType.VarChar, DataRowVersion.Original, 8, Frm_Mat.Tx_CodCentre.Text)
                        Createparameters(z_Adp, "Update", "?Af_NumCtt", "Af_NumCtt", OleDbType.VarChar, DataRowVersion.Current, 15)
                        Createparameters(z_Adp, "Update", "?Af_DteCtt", "Af_DteCtt", OleDbType.DBDate, DataRowVersion.Current, 10)
                        Createparameters(z_Adp, "Update", "?Af_NbrLoy", "Af_NbrLoy", OleDbType.Decimal, DataRowVersion.Current)
                        Createparameters(z_Adp, "Update", "?Af_MttLoy", "Af_MttLoy", OleDbType.Decimal, DataRowVersion.Current)
                        Createparameters(z_Adp, "Update", "?Af_DepGar", "Af_DepGar", OleDbType.Decimal, DataRowVersion.Current)
                        Createparameters(z_Adp, "Update", "?Af_CttFin", "Af_CttFin", OleDbType.DBDate, DataRowVersion.Current)
                        Createparameters(z_Adp, "Update", "?Af_MttOldLoy", "Af_MttOldLoy", OleDbType.Decimal, DataRowVersion.Current)
     
                        'Commande Delete
                        z_Adp.DeleteCommand = New OleDbCommand("DELETE FROM MAS.." & p_tableBdd & "  WHERE Af_Ctr_Cde = ? ", z_Cnx)
                        Createparameters(z_Adp, "Delete", "?Af_Ctr_Cde", "Af_Ctr_Cde", OleDbType.VarChar, DataRowVersion.Original, 8, Frm_Mat.Tx_CodCentre.Text)
                        Createparameters(z_Adp, "Delete", "?Af_NumCtt", "Af_NumCtt", OleDbType.VarChar, DataRowVersion.Current, 15)
                        Createparameters(z_Adp, "Delete", "?Af_DteCtt", "Af_DteCtt", OleDbType.DBDate, DataRowVersion.Current, 10)
                        Createparameters(z_Adp, "Delete", "?Af_NbrLoy", "Af_NbrLoy", OleDbType.Decimal, DataRowVersion.Current)
                        Createparameters(z_Adp, "Delete", "?Af_MttLoy", "Af_MttLoy", OleDbType.Decimal, DataRowVersion.Current)
                        Createparameters(z_Adp, "Delete", "?Af_DepGar", "Af_DepGar", OleDbType.Decimal, DataRowVersion.Current)
                        Createparameters(z_Adp, "Delete", "?Af_CttFin", "Af_CttFin", OleDbType.DBDate, DataRowVersion.Current)
                        Createparameters(z_Adp, "Delete", "?Af_MttOldLoy", "Af_MttOldLoy", OleDbType.Decimal, DataRowVersion.Current)
     
                        'Commande Insert
                        z_Adp.InsertCommand = New OleDbCommand("INSERT INTO MAS.." & _
                        p_tableBdd & " (Af_Ctr_Cde, Af_NumCtt, Af_DteCtt, Af_NbrLoy," & _
                        " Af_MttLoy, Af_DepGar, Af_CttFin, Af_MttOldLoy) VALUES " & _
                        "(?, ?, ?, ?, ?, ?, ?, ?) ", z_Cnx)
                        Createparameters(z_Adp, "Insert", "?Af_Ctr_Cde", "Af_Ctr_Cde", OleDbType.VarChar, DataRowVersion.Original, 8, Frm_Mat.Tx_CodCentre.Text)
                        Createparameters(z_Adp, "Insert", "?Af_NumCtt", "Af_NumCtt", OleDbType.VarChar, DataRowVersion.Current, 15)
                        Createparameters(z_Adp, "Insert", "?Af_DteCtt", "Af_DteCtt", OleDbType.DBDate, DataRowVersion.Current, 10)
                        Createparameters(z_Adp, "Insert", "?Af_NbrLoy", "Af_NbrLoy", OleDbType.Decimal, DataRowVersion.Current)
                        Createparameters(z_Adp, "Insert", "?Af_MttLoy", "Af_MttLoy", OleDbType.Decimal, DataRowVersion.Current)
                        Createparameters(z_Adp, "Insert", "?Af_DepGar", "Af_DepGar", OleDbType.Decimal, DataRowVersion.Current)
                        Createparameters(z_Adp, "Insert", "?Af_CttFin", "Af_CttFin", OleDbType.DBDate, DataRowVersion.Current)
                        Createparameters(z_Adp, "Insert", "?Af_MttOldLoy", "Af_MttOldLoy", OleDbType.Decimal, DataRowVersion.Current)
     
     
     
                    Case "Mt_Mtr"
                        'Commande Update
                        z_Adp.UpdateCommand = New OleDbCommand("UPDATE MAS.." & p_tableBdd & " SET Mt_DesRef = ? , Mt_SriCst = ? WHERE Mt_SriCst = ?   ", z_Cnx)
                        Createparameters(z_Adp, "Update", "?Mt_DesRef", "Mt_DesRef", OleDbType.VarChar, DataRowVersion.Current, 200)
                        Createparameters(z_Adp, "Update", "?Mt_SriCst", "Mt_SriCst", OleDbType.VarChar, DataRowVersion.Original, 25)
     
                        'Commande Delete
                        z_Adp.DeleteCommand = New OleDbCommand("DELETE FROM MAS.." & p_tableBdd & " WHERE Mt_SriCst = ?  ", z_Cnx)
                        Createparameters(z_Adp, "Delete", "?Mt_DesRef", "Mt_DesRef", OleDbType.VarChar, DataRowVersion.Current, 200)
                        Createparameters(z_Adp, "Delete", "?Mt_SriCst", "Mt_SriCst", OleDbType.VarChar, DataRowVersion.Original, 25)
     
                        'Commande Insert
                        z_Adp.InsertCommand = New OleDbCommand("INSERT INTO MAS.." & p_tableBdd & " (Mt_DesRef, Mt_SriCst) VALUES (?, ?) ", z_Cnx)
                        Createparameters(z_Adp, "Insert", "?Mt_DesRef", "Mt_DesRef", OleDbType.VarChar, DataRowVersion.Current, 200)
                        Createparameters(z_Adp, "Delete", "?Mt_SriCst", "Mt_SriCst", OleDbType.VarChar, DataRowVersion.Original, 25)
     
     
                    Case "Mt_Ett"
     
                        'Commande Update
                        z_Adp.UpdateCommand = New OleDbCommand("UPDATE MAS.." & p_tableBdd & " SET Et_Lib = ? WHERE Et_Lib = ?   ", z_Cnx)
                        Createparameters(z_Adp, "Update", "?Et_Lib", "Et_Lib", OleDbType.VarChar, DataRowVersion.Current, 200)
     
                        'Commande Delete
                        z_Adp.DeleteCommand = New OleDbCommand("DELETE FROM MAS.." & p_tableBdd & " WHERE Et_Lib = ?  ", z_Cnx)
                        Createparameters(z_Adp, "Delete", "?Et_Lib", "Et_Lib", OleDbType.VarChar, DataRowVersion.Current, 200)
     
                        'Commande Insert
                        z_Adp.InsertCommand = New OleDbCommand("INSERT INTO MAS.." & p_tableBdd & " (Et_Lib) VALUES (?) ", z_Cnx)
                        Createparameters(z_Adp, "Insert", "?Et_Lib", "Et_Lib", OleDbType.VarChar, DataRowVersion.Current, 200)
     
                End Select
     
                z_Adp.Update(p_Dts, p_datatable)
     
            Catch ex As Exception
     
                Throw ex
            End Try
     
        End Sub
    Pour la procédure : Createparameters, voici le 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
    Public Sub Createparameters(ByRef p_adp As OleDbDataAdapter, ByVal p_NomCmd As String, ByVal p_NomParam As String, ByVal p_NomCol As String, ByVal z_typeValeur As OleDbType, ByVal p_SourceVersion As DataRowVersion, Optional ByVal p_lenghtValeur As Integer = 0, Optional ByVal p_ValeurParam As String = "")
            'création des parametres  
     
            Select Case p_NomCmd
                Case "Update"
                    p_adp.UpdateCommand.Parameters.Add(p_NomParam, z_typeValeur, p_lenghtValeur, p_NomCol)
                    If p_ValeurParam <> "" Then
                        p_adp.UpdateCommand.Parameters(p_NomParam).Value = p_ValeurParam
                    End If
                    p_adp.UpdateCommand.Parameters(p_NomParam).SourceVersion = p_SourceVersion
     
                Case "Insert"
                    p_adp.InsertCommand.Parameters.Add(p_NomParam, z_typeValeur, p_lenghtValeur, p_NomCol).Value = p_ValeurParam
                    If p_ValeurParam <> "" Then
                        p_adp.InsertCommand.Parameters(p_NomParam).Value = p_ValeurParam
                    End If
                    p_adp.InsertCommand.Parameters(p_NomParam).SourceVersion = p_SourceVersion
    Pour les objets OleDbDataAdapter et OdbcDataAdapter, on utilise les espaces réservés point d'interrogation (?) pour identifier les paramètres. (différents des objets SQl ou on utilise le "@" pour les params"

    Malheuresement, ça ne fonctionne pas encore (je n'ai peut être pas les bon types pour les données) mais dans l'ensemble je pense que je ne suis pas loin

  8. #8
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par gael74 Voir le message
    Malheuresement, ça ne fonctionne pas encore
    Il y a une erreur ? laquelle ?

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Il n'y a pas d'erreur mais l'update ne se fait pas. C'est peut être à cause des types de champs, je n'ai pas vérifié si c'étaient exactement les mêmes.. enfin j'espère que ce n'est que ça

  10. #10
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par gael74 Voir le message
    Il n'y a pas d'erreur mais l'update ne se fait pas
    Etrange

    Tu es sûr que les lignes à mettre à jour sont bien dans l'état "modified" dans ton DataSet ? Tu n'aurais pas fait un AcceptChanges quelque part ?

    Essaie d'appeler GetChanges sur la DataTable en question pour voir ce qu'il te renvoie

  11. #11
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Ah si j'ai effectivement fait un acceptchanges lorsque je clique sur le bouton enregistrer. j'ai réessayé sans, et j'obtient cette erreur
    No value given for one or more required parameters
    Apparement il faut que je donne des valeurs à mes paramètres...

  12. #12
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par gael74 Voir le message
    Apparement il faut que je donne des valeurs à mes paramètres...
    Normalement il doit faire ça automatiquement si tu renseignes la propriété SourceColumn (le nom de la colonne de DataTable qui correspond à ce paramètre). Visiblement ta procédure Createparameters le fait, mais peut-être que tu t'es trompé de nom quelque part

  13. #13
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    j'ai vérifié et revérifié mais ce sont les bon noms de champs
    En plus j'ai fait exprès de mettre les même noms dans mon DatagridView et dans ma base de donnée pour éviter ce genre d'erreur justement

    Je remet le code que j'ai éssayé de simplier un peu au cas où
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
      z_rqteUpdate = "UPDATE MAS.." & p_tableBdd & " SET Af_Ctr_Cde = ? , Af_NumCtt = ? , Af_DteCtt = ? , Af_NbrLoy = ? , " & _
                        " Af_MttLoy = ? , Af_DepGar = ? , Af_CttFin = ? , Af_MttOldLoy = ? WHERE Af_Ctr_Cde = ? "
     
                        z_rqteDelete = "DELETE FROM MAS.." & p_tableBdd & "  WHERE Af_Ctr_Cde = ? "
     
                        z_rqteInsert = "INSERT INTO MAS.." & p_tableBdd & " (Af_Ctr_Cde, Af_NumCtt, Af_DteCtt, Af_NbrLoy," & _
                         " Af_MttLoy, Af_DepGar, Af_CttFin, Af_MttOldLoy) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"
     
                        'param Update
                        ReDim Preserve z_UpdateParam(7)
                        z_UpdateParam(0) = New OleDbParameter("?Af_Ctr_Cde", OleDbType.VarChar, 20, "Af_Ctr_Cde")
                        z_UpdateParam(1) = New OleDbParameter("?Af_NumCtt", OleDbType.VarChar, 20, "Af_NumCtt")
                        z_UpdateParam(2) = New OleDbParameter("?Af_DteCtt", OleDbType.DBDate, 20, "Af_DteCtt")
                        z_UpdateParam(3) = New OleDbParameter("?Af_NbrLoy", OleDbType.Decimal, 20, "Af_NbrLoy")
                        z_UpdateParam(4) = New OleDbParameter("?Af_MttLoy", OleDbType.Decimal, 20, "Af_MttLoy")
                        z_UpdateParam(5) = New OleDbParameter("?Af_DepGar", OleDbType.Decimal, 20, "Af_DepGar")
                        z_UpdateParam(6) = New OleDbParameter("?Af_CttFin", OleDbType.DBDate, 20, "Af_CttFin")
                        z_UpdateParam(7) = New OleDbParameter("?Af_MttOldLoy", OleDbType.Decimal, 20, "Af_MttOldLoy")
                        For i = 1 To z_UpdateParam.Length - 1
                            z_UpdateParam(i).SourceVersion = DataRowVersion.Current
                        Next
                        z_UpdateParam(0).SourceVersion = DataRowVersion.Default
     
                        'param Delete
                        ReDim Preserve z_DeleteParam(0)
                        z_DeleteParam(0) = New OleDbParameter("?Af_Ctr_Cde", OleDbType.VarChar, 20, "Af_Ctr_Cde")
                        z_DeleteParam(0).SourceVersion = DataRowVersion.Original
                        'param Insert     
                        ReDim Preserve z_InsertParam(7)
                        z_InsertParam(0) = New OleDbParameter("?Af_Ctr_Cde", OleDbType.VarChar, 20, "Af_Ctr_Cde")
                        z_InsertParam(1) = New OleDbParameter("?Af_NumCtt", OleDbType.VarChar, 20, "Af_NumCtt")
                        z_InsertParam(2) = New OleDbParameter("?Af_DteCtt", OleDbType.DBDate, 20, "Af_DteCtt")
                        z_InsertParam(3) = New OleDbParameter("?Af_NbrLoy", OleDbType.Decimal, 20, "Af_NbrLoy")
                        z_InsertParam(4) = New OleDbParameter("?Af_MttLoy", OleDbType.Decimal, 20, "Af_MttLoy")
                        z_InsertParam(5) = New OleDbParameter("?Af_DepGar", OleDbType.Decimal, 20, "Af_DepGar")
                        z_InsertParam(6) = New OleDbParameter("?Af_CttFin", OleDbType.DBDate, 20, "Af_CttFin")
                        z_InsertParam(7) = New OleDbParameter("?Af_MttOldLoy", OleDbType.Decimal, 20, "Af_MttOldLoy")
                        For i = 1 To z_InsertParam.Length - 1
                            z_InsertParam(i).SourceVersion = DataRowVersion.Current
                        Next
                        z_InsertParam(0).SourceVersion = DataRowVersion.Original
     
    .....
     
     
    z_Adp = New OleDbDataAdapter()
     
                z_cmdInsert = New OleDbCommand(z_rqteInsert, z_Cnx)
                z_cmdUpdate = New OleDbCommand(z_rqteUpdate, z_Cnx)
                z_cmdDelete = New OleDbCommand(z_rqteDelete, z_Cnx)
                z_cmdInsert.Parameters.AddRange(z_InsertParam)
                z_cmdUpdate.Parameters.AddRange(z_UpdateParam)
                z_cmdDelete.Parameters.AddRange(z_DeleteParam)
     
                z_Adp.InsertCommand = z_cmdInsert
                z_Adp.DeleteCommand = z_cmdDelete
                z_Adp.UpdateCommand = z_cmdUpdate
     
                z_Adp.Update(p_Dts, p_datatable.TableName)
                p_Dts.AcceptChanges()
    j'ai aussi essayé de rentrer les valeurs à la main (en utilisant monparam.value), mais j'ai toujours la même erreur

Discussions similaires

  1. [Débutant] dataset et datagridview
    Par jolona dans le forum VB.NET
    Réponses: 3
    Dernier message: 06/12/2011, 12h07
  2. Réponses: 2
    Dernier message: 19/08/2008, 12h29
  3. Suppression de ligne dans dataSet via Datagridview
    Par papy75 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 21/05/2008, 20h30
  4. XML DataSet et DataGridView
    Par amalaxel dans le forum C#
    Réponses: 8
    Dernier message: 10/06/2007, 12h20
  5. probleme dataset et datagridview
    Par issam_eddine dans le forum VB.NET
    Réponses: 5
    Dernier message: 25/05/2007, 09h53

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