Update Datensätze / Listbox MultiExtended

  • VB.NET

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von DavidS.

    Update Datensätze / Listbox MultiExtended

    Hallo Leute,

    folgendes Problem.

    Ich möchte ein bzw. mehrere Datensätze in meiner Tabelle der Access-Datenbank ändern.
    Die Auswahl der zuändernden Datensätze soll erfolgen über eine ListBox(Mehrfachauswah), dies funktioniert auch mit einem Datensatz.
    Wenn ich nun mehrere Datensätze auswähle wird nur ein Datensatz angepasst.

    Für einen Denkanstoß wäre ich Euch sehr dankbar.

    Gruß David

    VB.NET-Quellcode

    1. Private Sub btn_hinzufügen_Click(sender As Object, e As EventArgs) Handles btn_hinzufügen.Click
    2. Dim anzahl As Integer
    3. Dim anzahl2 As Integer
    4. Try
    5. con.Open()
    6. For anzahl2 = 0 To ListBox2.SelectedItems.Count
    7. cmd.CommandText = "UPDATE Fertigung set " &
    8. "Auftrags_ID = '" & Auftrags_ID & "' " &
    9. "where Fertigungs_ID = " &
    10. pnummer2(ListBox2.SelectedIndex)
    11. Next
    12. anzahl = cmd.ExecuteNonQuery()
    13. If anzahl > 0 Then
    14. MessageBox.Show("Messdaten dem Auftrag hinzugefügt.")
    15. End If
    16. Catch ex As Exception
    17. MessageBox.Show("Bitte Messdaten auswählen.")
    18. End Try
    19. con.Close()
    20. End Sub
    Ahoi,

    bei mehrfachauswahlen sollte es möglich sein, die Elemente der Listbox via schleife durchzugehen und abzufragen ob das Element selektiert ist.
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    @Manü
    Bei meinem Link steht:
    Wenn Sie eine Auflistung abrufen möchten, die die Indizes sämtlicher ausgewählter Elemente in einer ListBox mit Mehrfachauswahl enthält, verwenden Sie die SelectedIndices-Eigenschaft. Wenn Sie das derzeit in ListBox ausgewählte Element abrufen möchten, verwenden Sie die SelectedItem-Eigenschaft. Zusätzlich können Sie über die SelectedItems-Eigenschaft sämtliche ausgewählten Elemente in einer ListBox mit Mehrfachauswahl abrufen.
    leider komme ich nicht so recht weiter.

    .SelectedIndex nehme ich nur um den ersten Datensatz(ID) festzulegen, danach möchte ich die ID um jeweils +1 erhöhen bis Anzahl selektierter Datensätze erreicht wird.

    VB.NET-Quellcode

    1. For anzahl2 = 0 To ListBox2.SelectedItems.Count
    2. cmd.CommandText = "update Fertigung set Auftrags_ID = '" & Auftrags_ID & "' " &
    3. "where Fertigungs_ID = " & (pnummer2(ListBox2.SelectedIndex) + anzahl2)
    4. Next

    Im Anhang ein Beispiel wo ich 3 selektiert habe und der vierte Datensatz sich ändert.

    :?: :?: :?:
    Bilder
    • scr01.JPG

      29,39 kB, 123×271, 109 mal angesehen
    Hier steht es doch

    sonne75 schrieb:

    Wenn Sie eine Auflistung abrufen möchten, die die Indizes sämtlicher ausgewählter Elemente in einer ListBox mit Mehrfachauswahl enthält, verwenden Sie die SelectedIndices-Eigenschaft


    Wieso verwendest du das nicht (und in Klammern deine "anzahl2" als Index)? Wer weiß, was .NET mit .SelectedIndex bei MultiSelect anfängt.
    ... die Schleife war an der falschen Stelle

    VB.NET-Quellcode

    1. For anzahl2 = 0 To ListBox2.SelectedIndices.Count
    2. Try
    3. con.Open()
    4. cmd.CommandText = "update Fertigung set Auftrags_ID = '" & Auftrags_ID & "' " &
    5. "where Fertigungs_ID = " & pnummer2(ListBox2.SelectedIndices(anzahl2))
    6. anzahl = cmd.ExecuteNonQuery()
    7. Catch ex As Exception
    8. MsgBox("Messdaten dem Auftrag hinzugefügt.", vbInformation, "Information")
    9. End Try
    10. con.Close()
    11. Next
    Hast du denn bei der ersten Variante das durchgeführt?

    sonne75 schrieb:

    Setze Haltepunkt auf die For-Schleife und gehe Schritt für Schritt durch, dann siehst du, welcher Index geholt wird und wie dein Kommando zusammengestellt wird. Ich kann von hier nicht hellsehen.


    Mich würde schon interessieren, warum die Verbindung dauernd neu aufgebaut werden muss.
    Der Connection-Aufruf muss glaube ich nicht mit rein.
    Was ich jetzt erst sehe ist, dein Execute war immer außerhalb der Schleife ... da ist klar, dass immer nur der Letzte Command ausgeührt wird.
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    Also ich würde behaupten so sollte es laufen

    VB.NET-Quellcode

    1. Try
    2. con.Open()
    3. For anzahl2 = 0 To ListBox2.SelectedItems.Count
    4. cmd.CommandText = "UPDATE Fertigung set " &
    5. "Auftrags_ID = '" & Auftrags_ID & "' " &
    6. "where Fertigungs_ID = " &
    7. pnummer2(ListBox2.SelectedIndex)
    8. anzahl = cmd.ExecuteNonQuery()
    9. If anzahl > 0 Then
    10. MessageBox.Show("Messdaten dem Auftrag hinzugefügt.")
    11. End If
    12. Next
    13. con.Close()
    14. Catch ex As Exception
    15. MessageBox.Show("Bitte Messdaten auswählen.")
    16. End Try
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de

    Manü schrieb:

    Was ich jetzt erst sehe ist, dein Execute war immer außerhalb der Schleife ... da ist klar, dass immer nur der Letzte Command ausgeührt wird.

    Hast du auch das gelesen? Nimm Execute rein und Open/Close raus, dann wird es auch laufen.

    @Manü
    Nein, mit .SelectedIndex läuft es nicht, er braucht alle Indicies.