VB Если в комбо-боксе не работает инструкция «Остальное» - PullRequest
0 голосов
/ 16 октября 2018

У меня есть поле со списком для выбора предметов в зависимости от семестра.Например, если первый семестр, то это будут предметы и так далее.Мое поле со списком уже заполнено из моей базы данных.Моя проблема в том, что даже в первом семестре предметы, показанные в поле со списком, являются предметом второго семестра.У меня такое ощущение, что ошибка не имеет ничего общего с моими запросами, а с самим условием.

Private Sub fillsubjectcombo()

    If yearlabel.Text = "Grade 11" Or course_label.Text = "STEM" Or semester_label.Text = "Second semester" Then

        Dim str As String

        con.Close()
        con.Open()

        str = "SELECT* FROM [Subjects] ORDER BY [STEM G11 SS]"
        cmd = New SqlClient.SqlCommand(str, con)
        cmd.CommandText = str
        cmd.Connection = con
        drd = cmd.ExecuteReader
        subject_cbx.Items.Clear()

        While (drd.Read())

            subject_cbx.Items.Add(drd("STEM G11 SS"))

        End While

        cmd.Dispose()
        drd.Close()
        con.Close()

    End If

    If yearlabel.Text = "Grade 11" Or course_label.Text = "STEM" Or semester_label.Text = "First semester" Then

        Dim sti As String

        con.Close()
        con.Open()

        sti = "SELECT* FROM [Subjects] ORDER BY [STEM G11 FS]"
        cmd = New SqlClient.SqlCommand(sti, con)
        cmd.CommandText = sti
        cmd.Connection = con
        drd = cmd.ExecuteReader
        subject_cbx.Items.Clear()

        While (drd.Read())

            subject_cbx.Items.Add(drd("STEM G11 FS"))

        End While

        cmd.Dispose()
        drd.Close()

        con.Close()

    End If

Кто-нибудь может мне помочь?Пожалуйста: (

Ответы [ 4 ]

0 голосов
/ 17 октября 2018

Спасибо, сэр @laancelot, с кодами, которые вы дали, и я придумаю эти коды, и они все работают!

Окончательные коды здесь, где моя проблема в утверждении If-Else изменилась на Select-Case

If yearlabel.Text <> "" Then

        Select Case yearlabel.Text

            Case "Grade 11"

                If course_label.Text <> "" Then

                    Select Case course_label.Text

                        Case "STEM"

                            If semester_label.Text <> "" Then

                                Dim str As String
                                Dim classname As String

                                Select Case semester_label.Text

                                    Case "First Semester"
                                        classname = "STEM G11 FS"
                                        str = "SELECT* FROM [Subjects] ORDER BY [STEM G11 FS]"

                                    Case "Second Semester"
                                        classname = "STEM G11 SS"
                                        str = "SELECT* FROM [Subjects] ORDER BY [STEM G11 SS]"

                                End Select

                                con.Close()
                                con.Open()

                                cmd = New SqlClient.SqlCommand(str, con)
                                cmd.CommandText = str
                                cmd.Connection = con
                                drd = cmd.ExecuteReader
                                subject_cbx.Items.Clear()

                                While (drd.Read())
                                    subject_cbx.Items.Add(drd(classname))
                                End While

                                cmd.Dispose()
                                drd.Close()
                                con.Close()

                            End If

                        Case "HUMSS"

                            If semester_label.Text <> "" Then

                                Dim str As String
                                Dim classname As String

                                Select Case semester_label.Text

                                    Case "First Semester"
                                        classname = "HUMSS G11 FS"
                                        str = "SELECT* FROM [Subjects] ORDER BY [HUMSS G11 FS]"

                                    Case "Second Semester"
                                        classname = "HUMSS G11 SS"
                                        str = "SELECT* FROM [Subjects] ORDER BY [HUMSS G11 SS]"

                                End Select

                                con.Close()
                                con.Open()

                                cmd = New SqlClient.SqlCommand(str, con)
                                cmd.CommandText = str
                                cmd.Connection = con
                                drd = cmd.ExecuteReader
                                subject_cbx.Items.Clear()

                                While (drd.Read())
                                    subject_cbx.Items.Add(drd(classname))
                                End While

                                cmd.Dispose()
                                drd.Close()
                                con.Close()

                            End If

                    End Select

                End If

            Case "Grade 12"

                If course_label.Text <> "" Then

                    Select Case course_label.Text

                        Case "STEM"

                            If semester_label.Text <> "" Then

                                Dim str As String
                                Dim classname As String

                                Select Case semester_label.Text

                                    Case "First Semester"
                                        classname = "STEM G12 FS"
                                        str = "SELECT* FROM [Subjects] ORDER BY [STEM G12 FS]"

                                    Case "Second Semester"
                                        classname = "STEM G12 SS"
                                        str = "SELECT* FROM [Subjects] ORDER BY [STEM G12 SS]"

                                End Select

                                con.Close()
                                con.Open()

                                cmd = New SqlClient.SqlCommand(str, con)
                                cmd.CommandText = str
                                cmd.Connection = con
                                drd = cmd.ExecuteReader
                                subject_cbx.Items.Clear()

                                While (drd.Read())
                                    subject_cbx.Items.Add(drd(classname))
                                End While

                                cmd.Dispose()
                                drd.Close()
                                con.Close()

                            End If

                        Case "HUMSS"

                            If semester_label.Text <> "" Then

                                Dim str As String
                                Dim classname As String

                                Select Case semester_label.Text

                                    Case "First Semester"
                                        classname = "HUMSS G12 FS"
                                        str = "SELECT* FROM [Subjects] ORDER BY [HUMSS G12 FS]"

                                    Case "Second Semester"
                                        classname = "HUMSS G12 SS"
                                        str = "SELECT* FROM [Subjects] ORDER BY [HUMSS G12 SS]"

                                End Select

                                con.Close()
                                con.Open()

                                cmd = New SqlClient.SqlCommand(str, con)
                                cmd.CommandText = str
                                cmd.Connection = con
                                drd = cmd.ExecuteReader
                                subject_cbx.Items.Clear()

                                While (drd.Read())
                                    subject_cbx.Items.Add(drd(classname))
                                End While

                                cmd.Dispose()
                                drd.Close()
                                con.Close()

                            End If

                    End Select

                End If

        End Select

    End If

Еще раз спасибо, сэр @laancelot!

0 голосов
/ 16 октября 2018

Это сработает, если, как я понял, ваши сомнения верны.

Private Sub fillsubjectcombo()

    If yearlabel.Text = "Grade 11" Or course_label.Text = "STEM" Then
        'use and instead of or if both condiions must be true
        If semester_label.Text = "Second semester" Then

            Dim str As String

            con.Close()
            con.Open()

            str = "SELECT* FROM [Subjects] ORDER BY [STEM G11 SS]"
            cmd = New SqlClient.SqlCommand(str, con)
            cmd.CommandText = str
            cmd.Connection = con
            drd = cmd.ExecuteReader
            subject_cbx.Items.Clear()

            While (drd.Read())

                subject_cbx.Items.Add(drd("STEM G11 SS"))

            End While

            cmd.Dispose()
            drd.Close()
            con.Close()



        ElseIf semester_label.Text = "First semester" Then

            Dim sti As String

            con.Close()
            con.Open()

            sti = "SELECT* FROM [Subjects] ORDER BY [STEM G11 FS]"
            cmd = New SqlClient.SqlCommand(sti, con)
            cmd.CommandText = sti
            cmd.Connection = con
            drd = cmd.ExecuteReader
            subject_cbx.Items.Clear()

            While (drd.Read())

                subject_cbx.Items.Add(drd("STEM G11 FS"))

            End While

            cmd.Dispose()
            drd.Close()

            con.Close()
        End If

    End If
End Sub
0 голосов
/ 16 октября 2018

Как правило, когда вы копируете и вставляете строки на одной и той же странице, вспомните, что вы делаете, потому что, вероятно, это можно улучшить.

Вот кое-что, о чем я подумалВаша проблема:

    If yearlabel.Text = "Grade 11" AndAlso course_label.Text = "STEM" Then
        Dim query As String
        Dim className As String

        If semester_label.Text <> "" Then
            Select Case semester_label.Text
                Case "First semester"
                    className = "[STEM G11 FS]"
                    query = "SELECT* FROM [Subjects] ORDER BY " & className
                Case "Second semester"
                    className = "[STEM G11 SS]"
                    query = "SELECT* FROM [Subjects] ORDER BY " & className
            End Select

            con.Close()
            con.Open()

            cmd = New SqlClient.SqlCommand(query, con)
            cmd.CommandText = query
            cmd.Connection = con
            drd = cmd.ExecuteReader
            subject_cbx.Items.Clear()

            While (drd.Read())
                subject_cbx.Items.Add(drd(className))
            End While

            cmd.Dispose()
            drd.Close()
            con.Close()
        End If
    End If

Обратите внимание, что это почти точно ваш код, но организован таким образом, чтобы избежать повторений.И в качестве бонуса, проверьте свой комбинированный список сейчас!

0 голосов
/ 16 октября 2018

Попробуйте это:

Private Sub fillsubjectcombo()

If (yearlabel.Text = "Grade 11" Or course_label.Text = "STEM") AndAlso (semester_label.Text = "Second semester") Then

    Dim str As String

    con.Close()
    con.Open()

    str = "SELECT* FROM [Subjects] ORDER BY [STEM G11 SS]"
    cmd = New SqlClient.SqlCommand(str, con)
    cmd.CommandText = str
    cmd.Connection = con
    drd = cmd.ExecuteReader
    subject_cbx.Items.Clear()

    While (drd.Read())

        subject_cbx.Items.Add(drd("STEM G11 SS"))

    End While

ElseIf (yearlabel.Text = "Grade 11" Or course_label.Text = "STEM") AndAlso (semester_label.Text = "First semester") Then

    Dim sti As String

    con.Close()
    con.Open()

    sti = "SELECT* FROM [Subjects] ORDER BY [STEM G11 FS]"
    cmd = New SqlClient.SqlCommand(sti, con)
    cmd.CommandText = sti
    cmd.Connection = con
    drd = cmd.ExecuteReader
    subject_cbx.Items.Clear()

    While (drd.Read())

        subject_cbx.Items.Add(drd("STEM G11 FS"))

    End While

End If

cmd.Dispose()
drd.Close()
con.Close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...