2017-04-24 59 views
0

此代码是关于查看已发布的咨询时间表。不幸的是我坚持if语句。错误发生在行:如果dr(“Lecturer”)= ComboBox2.SelectedItem Then ||我使用组合框来显示数据库中的数据,这意味着组合框中有一个项目列表,我将选择任何讲师,以便它显示在窗体中。我有一个数据库,其中包含发布的时间表,如图所示。并且存储在这里(数据库)中的所有数据实际上都不可用(声明为red = unavailable,lime = available),但可用的数据不存储在数据库中。因此,我现在要做的是从数据库中读取和匹配“时间”,“可用”和“讲师”,并将其更改为(红色)到各自的标签中(以石灰着色)。Exception unhandle System.IndexOutOfRangeException

Database

The Form

Imports System.Data.OleDb 
Public Class viewconsultationschedule 
Dim time1 As String = "8.00am-10.00am" 
Dim time2 As String = "10.00am-12.00pm" 
Dim time3 As String = "12.00pm-2.00pm" 
Dim time4 As String = "2.00pm-4.00pm" 
Dim time5 As String = "4.00pm-6.00pm" 
Dim day1 As String = "Monday" 
Dim day2 As String = "Tuesday" 
Dim day3 As String = "Wednesday" 
Dim day4 As String = "Thursday" 
Dim day5 As String = "Friday" 

Dim conn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=sdpdatabase.accdb;Persist Security Info=False;") 
Dim cmd As OleDbCommand 
Dim cmd2 As OleDbCommand 
Dim dr As OleDbDataReader 
Dim sql As String 
Dim sql2 As String 
Private Sub ToolStrip1_ItemClicked(sender As Object, e As ToolStripItemClickedEventArgs) Handles ToolStrip1.ItemClicked 

End Sub 

Private Sub ComboBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox2.SelectedIndexChanged 
    'If (ComboBox2.SelectedIndex = 3) Then 

    Dim time1 As String = "8.00am-10.00am" 
     Dim time2 As String = "10.00am-12.00pm" 
     Dim time3 As String = "12.00pm-2.00pm" 
     Dim time4 As String = "2.00pm-4.00pm" 
     Dim time5 As String = "4.00pm-6.00pm" 
     Dim day1 As String = "Monday" 
     Dim day2 As String = "Tuesday" 
     Dim day3 As String = "Wednesday" 
     Dim day4 As String = "Thursday" 
     Dim day5 As String = "Friday" 
     Dim conn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=sdpdatabase.accdb;Persist Security Info=False;") 
     sql = "Select * FROM consultationschedule WHERE [email protected]" ' And [Time][email protected] AND [email protected] " 
     sql2 = "Select COUNT (*) FROM consultationschedule WHERE [email protected]" 
     conn.Open() 
     cmd = New OleDbCommand(sql, conn) 
     cmd2 = New OleDbCommand(sql2, conn) 

     cmd.Parameters.AddWithValue("@lecturer", ComboBox2.SelectedItem) 
     'cmd.Parameters.AddWithValue("@[Time]", time1) 
     'cmd.Parameters.AddWithValue("@weekDay", day1) 

     cmd2.Parameters.AddWithValue("@lecturer", ComboBox2.SelectedItem) 
     'cmd2.Parameters.AddWithValue("@[Time]", time2) 
     'cmd2.Parameters.AddWithValue("@weekDay", day2) 
     Dim count As Integer = cmd2.ExecuteScalar() 

     dr = cmd.ExecuteReader 
     dr = cmd2.ExecuteReader 
     If (dr.HasRows) Then 
     For i = 1 To count 
      If (i = 1) Then 
       dr.Read() 

       If dr("Lecturer") = ComboBox2.SelectedItem Then 

        If dr("Available") = "1" Then 
         Label11.BackColor = Color.Red 

        Else 
         Label11.BackColor = Color.Lime 
        End If 

       ElseIf (i = 2) Then 
        If dr("Lecturer") = ComboBox2.SelectedItem Then 
         If dr("Available") = "1" Then 
          Label12.BackColor = Color.Red 

         Else 
          Label12.BackColor = Color.Lime 


         End If 


        ElseIf (i = 3) Then 
         If dr("Lecturer") = ComboBox2.SelectedItem Then 
          If dr("Available") = "1" Then 
           Label13.BackColor = Color.Red 

          Else 
           Label13.BackColor = Color.Lime 


          End If 



         ElseIf (i = 4) Then 
          If dr("Lecturer") = ComboBox2.SelectedItem Then 
           If dr("Available") = "1" Then 
            Label14.BackColor = Color.Red 

           Else 
            Label14.BackColor = Color.Lime 


           End If 

          ElseIf (i = 5) Then 
           If dr("Lecturer") = ComboBox2.SelectedItem Then 
            If dr("Available") = "1" Then 
             Label15.BackColor = Color.Red 

            Else 
             Label15.BackColor = Color.Lime 


            End If 
           ElseIf (i = 6) Then 
            If dr("Lecturer") = ComboBox2.SelectedItem Then 
             If dr("Available") = "1" Then 
              Label16.BackColor = Color.Red 

             Else 
              Label16.BackColor = Color.Lime 


             End If 
            ElseIf (i = 7) Then 
             If dr("Lecturer") = ComboBox2.SelectedItem Then 
              If dr("Available") = "1" Then 
               Label17.BackColor = Color.Red 

              Else 
               Label17.BackColor = Color.Lime 


              End If 
             ElseIf (i = 8) Then 
              If dr("Lecturer") = ComboBox2.SelectedItem Then 
               If dr("Available") = "1" Then 
                Label18.BackColor = Color.Red 

               Else 
                Label18.BackColor = Color.Lime 


               End If 
              ElseIf (i = 9) Then 
               If dr("Lecturer") = ComboBox2.SelectedItem Then 
                If dr("Available") = "1" Then 
                 Label19.BackColor = Color.Red 

                Else 
                 Label19.BackColor = Color.Lime 


                End If 
               ElseIf (i = 10) Then 
                If dr("Lecturer") = ComboBox2.SelectedItem Then 
                 If dr("Available") = "1" Then 
                  Label20.BackColor = Color.Red 

                 Else 
                  Label20.BackColor = Color.Lime 

                 End If 
                ElseIf (i = 11) Then 
                 If dr("Lecturer") = ComboBox2.SelectedItem Then 
                  If dr("Available") = "1" Then 
                   Label21.BackColor = Color.Red 

                  Else 
                   Label21.BackColor = Color.Lime 

                  End If 
                 ElseIf (i = 12) Then 
                  If dr("Lecturer") = ComboBox2.SelectedItem Then 
                   If dr("Available") = "1" Then 
                    Label22.BackColor = Color.Red 

                   Else 
                    Label22.BackColor = Color.Lime 

                   End If 
                  ElseIf (i = 13) Then 
                   If dr("Lecturer") = ComboBox2.SelectedItem Then 
                    If dr("Available") = "1" Then 
                     Label23.BackColor = Color.Red 

                    Else 
                     Label23.BackColor = Color.Lime 
                    End If 
                   ElseIf (i = 14) Then 
                    If dr("Lecturer") = ComboBox2.SelectedItem Then 
                     If dr("Available") = "1" Then 
                      Label24.BackColor = Color.Red 

                     Else 
                      Label24.BackColor = Color.Lime 

                     End If 
                    ElseIf (i = 15) Then 
                     If dr("Lecturer") = ComboBox2.SelectedItem Then 
                      If dr("Available") = "1" Then 
                       Label25.BackColor = Color.Red 

                      Else 
                       Label25.BackColor = Color.Lime 

                      End If 
                     ElseIf (i = 16) Then 
                      If dr("Lecturer") = ComboBox2.SelectedItem Then 
                       If dr("Available") = "1" Then 
                        Label26.BackColor = Color.Red 

                       Else 
                        Label26.BackColor = Color.Lime 
                       End If 
                      ElseIf (i = 17) Then 
                       If dr("Lecturer") = ComboBox2.SelectedItem Then 
                        If dr("Available") = "1" Then 
                         Label27.BackColor = Color.Red 

                        Else 
                         Label27.BackColor = Color.Lime 
                        End If 
                       ElseIf (i = 18) Then 
                        If dr("Lecturer") = ComboBox2.SelectedItem Then 
                         If dr("Available") = "1" Then 
                          Label28.BackColor = Color.Red 

                         Else 
                          Label28.BackColor = Color.Lime 
                         End If 
                        ElseIf (i = 19) Then 
                         If dr("Lecturer") = ComboBox2.SelectedItem Then 
                          If dr("Available") = "1" Then 
                           Label29.BackColor = Color.Red 

                          Else 
                           Label29.BackColor = Color.Lime 

                          End If 

                         ElseIf (i = 20) Then 
                          If dr("Lecturer") = ComboBox2.SelectedItem Then 
                           If dr("Available") = "1" Then 
                            Label30.BackColor = Color.Red 

                           Else 
                            Label30.BackColor = Color.Lime 
                           End If 
                          ElseIf (i = 21) Then 
                           If dr("Lecturer") = ComboBox2.SelectedItem Then 
                            If dr("Available") = "1" Then 
                             Label33.BackColor = Color.Red 

                            Else 
                             Label33.BackColor = Color.Lime 
                            End If 
                           ElseIf (i = 22) Then 
                            If dr("Lecturer") = ComboBox2.SelectedItem Then 
                             If dr("Available") = "1" Then 
                              Label34.BackColor = Color.Red 

                             Else 
                              Label34.BackColor = Color.Lime 
                             End If 
                            ElseIf (i = 23) Then 
                             If dr("Lecturer") = ComboBox2.SelectedItem Then 
                              If dr("Available") = "1" Then 
                               Label35.BackColor = Color.Red 

                              Else 
                               Label35.BackColor = Color.Lime 
                              End If 
                             ElseIf (i = 24) Then 
                              If dr("Lecturer") = ComboBox2.SelectedItem Then 
                               If dr("Available") = "1" Then 
                                Label36.BackColor = Color.Red 

                               Else 
                                Label36.BackColor = Color.Lime 

                               End If 
                              ElseIf (i = 25) Then 
                               If dr("Lecturer") = ComboBox2.SelectedItem Then 
                                If dr("Available") = "1" Then 
                                 Label37.BackColor = Color.Red 

                                Else 
                                 Label37.BackColor = Color.Lime 

                                End If 

                               End If 
                              End If 
                             End If 
                            End If 
                           End If 
                          End If 
                         End If 
                        End If 
                       End If 
                      End If 
                     End If 
                    End If 
                   End If 
                  End If 
                 End If 
                End If 
               End If 
              End If 
             End If 
            End If 
           End If 
          End If 
         End If 
        End If 
       End If 
      End If 
     Next 
    End If 
+0

您正在SQL查询中选择一个无名值:'选择COUNT(*)',然后尝试读取一个名为“Lecturer”的值:'dr(“Lecturer”)'。该SQL查询不返回名为“Lecturer”的值。因此该索引('“Lecturer”')超出了该查询结果的范围。 – David

+0

我明白了,你是否介意引导我一点,因为我不太确定要替换的内容:选择COUNT(*)语句。 – bwraths

回答

2

你从你的第一个SQL命令选择记录,但随后立即丢弃它们并与你的第二个SQL命令的结果替换它们:

dr = cmd.ExecuteReader 
dr = cmd2.ExecuteReader 

那第二个命令没有叫做的字段3210,这只是一个单一的COUNT()价值。

它看起来像你想要的是只删除完全此行:

dr = cmd2.ExecuteReader 

因为你已经执行cmd2以上,并存储在count变量单个值。


另外请注意,你的循环是没有必要的:

For i = 1 To count 
    If (i = 1) Then 
     '... 
    End If 
Next 

这个循环将按照设计,只重复一次。所以你首先不需要循环,只需要执行一次代码即可。

+0

好吧,现在我可以将数据查看到我的表单中,但现在它只显示第一行和第一列(1x1)是红色的,其他所有都停留在没有改变的状态,我刚刚编辑了代码。请检查我的帖子下。 – bwraths

相关问题