2017-09-15 35 views
-2

この段階に入るたびに私のプログラムがこのエラーを実行しているのはなぜですか?データベースからレコードを取得し、コンボボックスに表示するだけです。コレクションが変更されました列挙操作で実行時にエラーが発生しない

私は2つのエラーを取得:

コレクションは、列挙操作が実行されないことがあり、修正されました。クエリ式「(Forename、姓<> 'ミスター')で

構文エラー(カンマ)。

以下に添付コード:ここにあなたのループでは

 Try 
      'Get REGISTRATION classes 
      Dim RD As OleDbDataReader 
      Dim con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\DATA.accdb") 
      Dim commStr As String = "Select Registration from students WHERE (Registration <> '" 
      Dim comm As OleDbCommand 

      con.Open() 
      If step4regcombobox.Items.Count = 0 Then 
       Dim cmd As New OleDbCommand("Select Registration from students", con) 
       RD = cmd.ExecuteReader() 
       While RD.Read 
        step4regcombobox.Items.Add(RD.GetString(0)) 
       End While 
      End If 
      For Each i As Object In step4regcombobox.Items 
       comm = New OleDbCommand(commStr & i & "')", con) 
       RD = comm.ExecuteReader 
       While RD.Read 
        step4regcombobox.Items.Add(RD.GetString(0)) 
        Exit While 
       End While 
      Next 
     Catch ex As Exception 
      MsgBox("Failure to return classes on Step 4." & vbNewLine & ex.Message) 
     End Try 
     Try 
      'Get TEACHERS 
      Dim RD2 As OleDbDataReader 
      Dim con2 As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\DATA.accdb") 
      Dim commStr2 As String = "Select Title , Forename , Surname from teachers WHERE (Forename , Surname <> '" 
      Dim comm2 As OleDbCommand 
      con2.Open() 
      If step4teachercombobox.Items.Count = 0 Then 
       Dim cmd2 As New OleDbCommand("Select Title , Forename , Surname from teachers", con2) 
       RD2 = cmd2.ExecuteReader() 
       While RD2.Read 
        step4teachercombobox.Items.Add(RD2.GetString(0)) 
       End While 
      End If 
      For Each i2 As Object In step4teachercombobox.Items 
       comm2 = New OleDbCommand(commStr2 & i2 & "')", con2) 
       RD2 = comm2.ExecuteReader 
       While RD2.Read 
        step4teachercombobox.Items.Add(RD2.GetString(0)) 
        Exit While 
       End While 
      Next 
     Catch ex As Exception 
      MsgBox("Failure to return teachers on Step 4." & vbNewLine & ex.Message) 
     End Try 
     step4.Visible = True 
+1

あなたはどこ私たちに伝えるためにわざわざdidntはコレクションのエラーが発生するので、 'For each i2 As Object in step4teachercombobox.Items'ブロック内で推測します。そのブロックの中で、あなたはできないアイテムコレクションに追加しています。コレクションを繰り返し処理したり、同時に変更することはできません。 CBTにDataTableをバインドする必要はありません。 [ask]を読んで[tour]を取ってください。投稿ごとに1つの質問 – Plutonix

+0

2番目のエラーはきれいにする必要があります - クエリー 'WHERE(Forename、Surname <> '')は意味をなさない – Filburt

+0

あなたのアプリはリソースとそのエラーメッセージをキャッチブロックはあなたを助けてくれません。[ループ内でのコレクションからのアイテムの削除](0120-336182/1070452) – Plutonix

答えて

0

 For Each i As Object In step4regcombobox.Items 
      comm = New OleDbCommand(commStr & i & "')", con) 
      RD = comm.ExecuteReader 
      While RD.Read 
       step4regcombobox.Items.Add(RD.GetString(0)) 
       Exit While 
      End While 
     Next 

あなたはそれを反復している間、あなたはstep4regcombobox.Itemsを変更しています。これは許可されていません。

ループ自体は非常に疑わしいと思われます。リストの後の項目は以前の項目から派生するのはなぜですか?

ロジックが正しいと仮定すると、Addを実行するには、For Eachループをリファクタリングする必要があります。

Dim itemsToAdd As New List(Of String) 

'Then, replace the addition to the combo item list with this: 
itemsToAdd.Add(RD.GetString(0)) 

'Then, after the loop is complete: 
step4regcombobox.Items.AddRange(itemsToAdd) 

(私はそれがない場合は、手動でitemsToAddにわたってループ処理を持ち、順番に各1を追加することができ、step4regcombobox.ItemsはAddRangeを実装することを想定しています。)

+0

これは私を助けました!ありがとうございます。 – calvearn

関連する問題