cs_thierry la fronde
Messages postés351Date d'inscriptionmercredi 21 juillet 2004StatutMembreDernière intervention12 août 2009
-
23 août 2008 à 14:20
cs_thierry la fronde
Messages postés351Date d'inscriptionmercredi 21 juillet 2004StatutMembreDernière intervention12 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.
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 23 août 2008 à 14:47
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
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 23 août 2008 à 21:22
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 ^^
cs_thierry la fronde
Messages postés351Date d'inscriptionmercredi 21 juillet 2004StatutMembreDernière intervention12 août 2009 24 août 2008 à 12:06
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