Requête INSERT INTO exécutée deux fois [Résolu]

Signaler
Messages postés
351
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
12 août 2009
-
Messages postés
351
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
12 août 2009
-
Bonjour à tous les développeurs..

Voilà donc mon problème pour qui à une minute pour y réfléchir :
Je réalise une base de données avec interface en VB.NET et je fais des requêtes d'insertion sans problème. Puis, pour une procédure SUB (-identique à d'autres que j'utilise dans le même projet et qui fonctionnent très bien) ma requête s'exécute UNE fois dans mon programme (j'ai vérifié) par contre les données sont insérées deux fois dans ma base (base ACCESS). voici mon code:

Private Sub AjouterUneCompetenceALApprenantCourant()
        Dim IdCompetence As Integer = Me.IDCompetence(Me.CBCompetences.Text)
        Dim IdApprenantsSelectionne As Integer = Me.LVApprenants.SelectedItems(0).SubItems(2).Text
        Dim MaRequete As String
        If Not Me.CompetenceDejaAssociee(IdCompetence, IdApprenantsSelectionne) Then

            MaRequete = "INSERT INTO T_LigneCompetences(RID_Apprenants,RID_DomaineCompetences) VALUES (" & IdApprenantsSelectionne & _
            " , " & IdCompetence & ");"
            Me.TableLigneDomCompetence.Clear()
            ProceduresCommunes.OuvrirConnexionALaBase()
            Me.ExecuterRequete(MaRequete, NomTable.t_lignecompetence)
            Me.TableLigneDomCompetence.Clear()
            Me.ExecuterRequete("SELECT * FROM T_LigneCompetences", NomTable.t_lignecompetence)
            ProceduresCommunes.FermerLaConnexionALaBase()
            RemplirCompetence(IdApprenantsSelectionne)
            MessageBox.Show("test")
        Else
            MessageBox.Show("La Compétences est déjà dans la liste", "INFORMATION", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If
    End Sub

Sub ExecuterRequete(ByVal LaRequete As String, ByVal LeNomTable As NomTable) ' NomTable est un type enum

        Try
            LeDataAdapter = New OleDbDataAdapter(LaRequete, MaConnexion)
            LeDataAdapter.Fill(LeDataSet)
            Select Case LeNomTable
               Case NomTable.t_domcompetence
                    LeDataAdapter.Fill(LeDataSet, "T_DomaineCompetences")
                    Me.TableDomaineCompetence = LeDataSet.Tables("T_DomaineCompetences")
                Case NomTable.t_lignecompetence
                    LeDataAdapter.Fill(LeDataSet, "T_LigneCompetences")
                    Me.TableLigneDomCompetence = LeDataSet.Tables("T_LigneCompetences")
                Case NomTable.t_villes
                    LeDataAdapter.Fill(LeDataSet, "T_CPVILLES")
                    Me.TableVilles = LeDataSet.Tables("T_CPVILLES")
            '....
            End Select
        Catch ex As Exception
            MessageBox.Show("L'erreur suivante s'est produite : " & ex.ToString)
        End Try
    End Sub

Si d'autres on rencontré un soucis de ce genre, votre aide est bien venue... merci d'avoir monopolisé quelques neurones à mon affaire.

thierry la fronde

4 réponses

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
36
Juste une petite analyse rapide, regarde si ça viendrait pas de ce code, pour moi la requette est effectivement executée 2 fois :

        Try
            LeDataAdapter = New OleDbDataAdapter(LaRequete, MaConnexion)
1x -->      LeDataAdapter.Fill(LeDataSet)
            Select Case LeNomTable
               Case NomTable.t_domcompetence
2x -->              LeDataAdapter.Fill(LeDataSet, "T_DomaineCompetences")
                    Me.TableDomaineCompetence = LeDataSet.Tables("T_DomaineCompetences")
                Case NomTable.t_lignecompetence
ou 2x -->           LeDataAdapter.Fill(LeDataSet, "T_LigneCompetences")
                    Me.TableLigneDomCompetence = LeDataSet.Tables("T_LigneCompetences")
                Case NomTable.t_villes
ou 2x -->           LeDataAdapter.Fill(LeDataSet, "T_CPVILLES")
                    Me.TableVilles = LeDataSet.Tables("T_CPVILLES")
            '....
            End Select
        Catch ex As Exception

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
C'est pas serieux d'avoir des sous-sections VB dans un forum delphi ...

Nous nous situons ont : DelphiFr/Base de données/Access, Visual Basic, VB6, VB.NET, ...

Cordialement, Bacterius !
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Oups mille excuses  je me suis trompé j'etais sur VBFrance.com à cause d'une discussion dans les sections communes CS ... en fait c'est le dernier qui poste qui détermine dans quel site se situe le topic, selon l'endroit depuis lequel il poste son message ... et c'était un VBiste ^^

Cordialement, Bacterius !
Messages postés
351
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
12 août 2009

Merci pour la vue extérieure, en effet j'avais récupéré ce code d'un autre module de mon application qui avait cette forme :
LeDataAdapter = New OleDbDataAdapter(LaRequete, MaConnexion)
            LeDataAdapter.Fill(LeDataSet,NomDeLaTable) 'où nom de la table est une chaine de caractère. et donc n'apparaît qu'une fois dans la procédure
Or dans mon code j'utilise un type enum j'ai donc modifié la structure et pas enlevé la ligne coupable.( comme quoi je n'avais pas tout compris sur la méthode Fill.
Merci pour votre aide

thierry la fronde