Salut à tous ,

J'ai une Form sur laquelle j'ai mis une ListBox et une CheckedListBox , je travaille avec VB 2010 Professionnal Edition et une base de données SQL SERVER 2008.

Tout d'abord je veux remplir une table qui contient deux champs seulement :

ProfDivisions ( #idDiv,"idProf )

Tout simplement la table ProfDivisions est formée d'une clé primaire composée et qui est reliée à deux autres tables Divisions et Profs :

Divisions ( idDiv , libDiv , ... )
Profs ( idProf , nomProf , .... )

C'est-à-dire que la table ProfDivisions est reliée à ces deux tables ci-dessus.

Sur la ListBox j'arrive à la remplir avec le nom et prénom des professeurs avec ce 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
18
cn.ConnectionString = strcon
 
        Dim strProfs As String = "select idprof,nomp + '  ' + prenp as professor from profs"
        Dim daProfs As New SqlDataAdapter(strProfs, cn)
        Dim dtProfs As New DataTable("profs")
 
        If cn.State Then cn.Close()
 
        cn.Open()
        daProfs.Fill(dtProfs)
        cn.Close()
 
        For Each dr As DataRow In dtProfs.Rows
            lstProfs.Items.Add(dr("professor").ToString)
        Next
 
        lstProfs.DisplayMember = "professor"
        lstProfs.ValueMember = "idprof"
La CheckedListBox j'arrive à la remplir avec le nom des divisions avec
ce 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
18
19
Dim strDivs As String = "select idcla,libcla from divisions"
 
        Dim daDivs As New SqlDataAdapter(strDivs, cn)
        Dim dtDivs As New DataTable("divisions")
 
        If cn.State Then cn.Close()
 
        cn.Open()
        daDivs.Fill(dtDivs)
        cn.Close()
 
        For Each r As DataRow In dtDivs.Rows
 
            chkListDivs.Items.Add(r("libcla").ToString)
 
        Next
 
        chkListDivs.DisplayMember = "libcla"
        chkListDivs.ValueMember = "idcla"
L'utilisateur ne pourra sélectionné qu'un seul professeur et pourra sélectionné 3 à 4 divisions car le maximum de classes (divisions) pour un prof c'est 4 et le minimum c'est 3.

Donc comment enregistrer dans la table ProfDivisions ce que l'utilisateur a sélectionné c'est -à-dire : Un Prof de la ListBox et 4 Divisions de la CheckedListBox.

J'ai essayé ce code pour l'enregistrement des Items de la CheckedListBox seulelment mais ça ne marche pas :

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
Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
 
        cn.ConnectionString = strcon
 
        Dim i As Integer
 
        For i = 0 To chkListDivs.CheckedItems.Count - 1 
 
            Dim str As String = chkListDivs.CheckedItems(i).ToString()
            Dim cmd As SqlCommand = New SqlCommand()
            cmd.CommandText = "insert into ProfDivisions values('" + str + "')"
            cmd.Connection = cn
            cmd.ExecuteNonQuery()
 
        Next
 
        cn.Close()
 
End Sub
J'arrive pas à trouver la bonne solution pour à la fois enregistrer l'ID du professeur et les ID des 4 divisions car la table ProfDivisions est formée ainsi :

ProfDivisions ( #idDivision , #idProf )

Merci de votre aide.