2017-04-24 60 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

相關問題