2017-03-05 3 views
0

Ich muss Daten aus einer Checklistenliste in eine Access-Datenbank einfügen. Die Elemente in den Checklistenboxen sind Fremdschlüssel und werden anhand ihrer Namen und nicht anhand ihrer IDs angezeigt. Was ich tun musste, ist, wenn ich auf die Schaltfläche "Hinzufügen" klicke, sollten die IDs der Elemente und ihre Namen als String (str) in die Services_Availed-Tabelle in der Datenbank eingefügt werden, aber die Namen werden nicht angezeigt, obwohl neue Daten eingefügt wurden (Fügt jedes Mal, wenn ich auf die Schaltfläche zum Hinzufügen klicke, eine weitere ServicesAvailed_ID hinzu).So fügen Sie Daten von CheckedListBox in die Datenbank ein

Hier ist, was ich versucht:

Private Sub btnAddService_Click(sender As Object, e As EventArgs) Handles btnAddService.Click 
Try 
    Dim con As New OleDb.OleDbConnection 
    Dim str As String = "" 
    Dim i As Integer 
    If chcklstbx1.CheckedItems.Count > 0 Then 
     For i = 0 To i < chcklstbx1.CheckedItems.Count 
      If str = "" Then 
       str = chcklstbx1.CheckedItems(i).ToString 
      Else 
       str += "," + chcklstbx1.CheckedItems(i).ToString 
      End If 
     Next 
     con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\rose&mike\Desktop\DbSysDel3\salondbaccess.accdb" 
     con.Open() 
     Dim cmd As New OleDb.OleDbCommand 
     cmd = New OleDbCommand("Insert Into Services_Availed(AvailedNames) Values(@ServiceType_Name)", con) 
     cmd.Parameters.AddWithValue("@ServiceType_Name", str) 
     cmd.ExecuteNonQuery() 
     MessageBox.Show("Data inserted successfully") 
     con.Close() 
    Else 
     MessageBox.Show("Please select at least one item") 
     While (chcklstbx1.CheckedItems.Count > 0) 
      chcklstbx1.SetItemChecked(chcklstbx1.CheckedIndices(0), False) 
     End While 
    End If 
Catch ex As Exception 

End Try 
End Sub 

Irgendwelche Vorschläge sehr geschätzt würden.

+0

Ist Ihre Absicht, eine neue Zeile für jedes Element hinzuzufügen, die überprüft wird, oder eine Zeile für alle jsut hinzufügen? Ihr Code fügt nur eine Zeile hinzu. Wie Sie auf Namen und IDs referenzieren, erfahren Sie unter: https://msdn.microsoft.com/en-us/library/system.windows.forms.checkedlistbox.checkeditems(v=vs.110).aspx –

+0

@WayneG .Dunn ja Ich wollte eine Zeile hinzufügen, aber für jedes Element, das überprüft wird, sollte es in 'String' konvertiert werden, getrennt durch ein Komma, und in der Tabelle * AvailedNames * gespeichert werden. Der Code funktioniert, aber es scheint ein Problem mit den Werten zu geben, die ich als Referenz verwende. Die Elemente in der Checklistenbox stammen aus einer Tabelle mit dem Namen * Service_Types *. Bitte weisen Sie darauf hin, wo ich es falsch gemacht habe. – luca

+0

In Ihrem Code für das 'Click'-Ereignis überprüfen Sie, ob Elemente überprüft werden (Ihre erste IF-Anweisung), dann durchlaufen Sie alle markierten Elemente, aber Ihr Code zum Einfügen eines neuen Datensatzes ist AUSSERHALB davon Schleife, daher wird es nur einmal ausgeführt. Sie sollten Ihre 'con.conn ..', 'con.open', direkt nach Ihrem 'IF' verschieben, dann bewegen Sie Ihre 'Next' zu kurz vor 'con.close'. Hast du dir den Artikel angesehen, wie man Artikel referenziert? –

Antwort

0

Können Sie Ihre FOR-Anweisung reduzieren bis auf:

For i = 0 to chcklstbx1.CheckedItems.Count - 1 
Verwandte Themen