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

Messages postés
351
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
12 août 2009
- - Dernière réponse : cs_thierry la fronde
Messages postés
351
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
12 août 2009
- 24 août 2008 à 12:06
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
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
31
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 210 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_casy
Messages postés
3869
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
6
0
Merci
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 !
Commenter la réponse de Bacterius
Messages postés
3869
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
6
0
Merci
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 !
Commenter la réponse de Bacterius
Messages postés
351
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
12 août 2009
0
Merci
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
Commenter la réponse de cs_thierry la fronde