Arraylist

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von conhold.

    hallo experts...
    ich möchte (als Übung für meinen Job) ein kleines Verwaltungsprogramm für meine Filmesammlung in VB schreiben.
    Dazu habe ich eine im VB2008 eine lokale Datenbank (MovieDB.mdf) angelegt.
    Dann habe ich ein ListboxControl-Element auf meinem Formular welches mir die Daten aus der Tabelle anzeigt.
    Desweiteren gibt es ein Paar Textfelder für die Tabellenwerte und und ein paar Buttons. Die ersten Funktionen (anzeigen und hinzufügen) funktionieren einwandfrei.
    So weit so gut. Nun zu meinem Problem:
    für die Funktion Ändern soll/muss vorher ein Datensatz im Listenfeld (lstTab2) ausgewählt werden. Die Daten des Feldes sollen dann wieder in den Textboxen erscheinen.
    Dazu habe ich eine Funktion gefunden die aber ein Paar fehler aufweist. Irgendwie gibt es da eine Arraylist (Myal) aber die ist nirgens deklariert. Was muss ich tun?
    anbei mein Code...

    ich hoffe mir kann jem. helfen. Danke im Voraus

    VB.NET-Quellcode

    1. Imports System.Data.SqlClient
    2. Imports System.Collections.ArrayList
    3. Public Class Bearbeiten
    4. Private Sub Spezial_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    5. Übersicht()
    6. End Sub
    7. Private Sub btnHinzufügen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHinzufügen.Click
    8. Dim anzahl As Integer
    9. Dim con As New SqlClient.SqlConnection
    10. Dim cmd As New SqlClient.SqlCommand
    11. If txtName.Text = "" Then
    12. MsgBox("Bitte mindestens einen Namen eintragen")
    13. Exit Sub
    14. End If
    15. Try
    16. con.ConnectionString = _
    17. "Data Source=.\SQLEXPRESS;AttachDbFilename=E:\VB Projects\Movies\Movies\MovieDB.mdf;Integrated Security=True;User Instance=True"
    18. cmd.Connection = con
    19. con.Open()
    20. cmd.CommandText = _
    21. "insert into Movie " & _
    22. "(ID, Name, Erscheinungsjahr, Genre, Schauspieler, Auszeichnungen, Bewertung, Sonstiges) " & _
    23. "values ('" & _
    24. txtID.Text & "', '" & _
    25. txtName.Text & "', '" & _
    26. txtJahr.Text & "', '" & _
    27. txtGenre.Text & "', '" & _
    28. txtActors.Text & "', '" & _
    29. txtAuszeichnungen.Text & "', '" & _
    30. txtBewertungen.Text & "', '" & _
    31. txtSonstiges.Text & "')"
    32. 'MsgBox(cmd.CommandText)
    33. anzahl = cmd.ExecuteNonQuery()
    34. If anzahl > 0 Then
    35. MsgBox("Es wurde ein Datensatz eingefügt")
    36. End If
    37. Catch ex As Exception
    38. MsgBox(ex.Message)
    39. End Try
    40. con.Close()
    41. Übersicht() ' Aufruf der Funktion Übersicht
    42. End Sub
    43. Private Sub SimpleButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSchliessen.Click
    44. Me.Hide() ' Schliessen des aktuellen Formulars
    45. End Sub
    46. Private Sub lstTab2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstTab2.SelectedIndexChanged
    47. Dim con As New SqlClient.SqlConnection
    48. Dim cmd As New SqlClient.SqlCommand
    49. Dim reader As SqlClient.SqlDataReader
    50. Try
    51. con.ConnectionString = _
    52. "Data Source=.\SQLEXPRESS;AttachDbFilename=E:\VB Projects\Movies\Movies\MovieDB.mdf;Integrated Security=True;User Instance=True"
    53. cmd.Connection = con
    54. con.Open()
    55. cmd.CommandText = _
    56. "select * from Movie " _
    57. & "where Name = " & Myal(lstTab2.SelectedIndex)
    58. reader = cmd.ExecuteReader()
    59. reader.Read()
    60. txtID.Text = reader("ID")
    61. txtName.Text = reader("Name")
    62. txtJahr.Text = reader("Erscheinungsjahr")
    63. txtGenre.Text = reader("Genre")
    64. txtActors.Text = reader("Schauspieler")
    65. txtAuszeichnungen.Text = reader("Auszeichnungen")
    66. txtBewertungen.Text = reader("Bewertung")
    67. txtSonstiges.Text = reader("Sonstiges")
    68. reader.Close()
    69. Catch ex As Exception
    70. MsgBox(ex.Message)
    71. End Try
    72. con.Close()
    73. End Sub
    74. Private Sub btnÄndern_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnÄndern.Click
    75. Dim anzahl As Integer
    76. Dim con As New SqlClient.SqlConnection
    77. Dim cmd As New SqlClient.SqlCommand
    78. If txtName.Text = "" Then
    79. MsgBox("Bitte einen Datensatz auswählen und mindestens einen Namen eintragen")
    80. Exit Sub
    81. End If
    82. Try
    83. con.ConnectionString = _
    84. "Data Source=.\SQLEXPRESS;AttachDbFilename=E:\VB Projects\Movies\Movies\MovieDB.mdf;Integrated Security=True;User Instance=True"
    85. cmd.Connection = con
    86. con.Open()
    87. cmd.CommandText = _
    88. "update movie set " & _
    89. "ID = '" & txtID.Text & "', " & _
    90. "name = '" & txtName.Text & "', " & _
    91. "Erscheinungsjahr = '" & txtJahr.Text & "', " & _
    92. "genre = '" & txtGenre.Text & "', " & _
    93. "Schauspieler = " & txtActors.Text & ", " & _
    94. "Auszeichnungen = " & txtAuszeichnungen.Text & ", " & _
    95. "Bewertung = " & txtBewertungen.Text & ", " & _
    96. "sonstiges = '" & txtSonstiges.Text & "' " & _
    97. "where name = " & Myal(lstTab2.SelectedIndex)
    98. 'MsgBox(cmd.CommandText)
    99. anzahl = cmd.ExecuteNonQuery()
    100. If anzahl > 0 Then
    101. MsgBox("Es wurde ein Datensatz geändert")
    102. End If
    103. Catch ex As Exception
    104. MsgBox(ex.Message)
    105. End Try
    106. con.Close()
    107. End Sub
    108. Private Sub Übersicht()
    109. Dim con As New SqlClient.SqlConnection
    110. Dim cmd As New SqlClient.SqlCommand
    111. Dim reader As SqlClient.SqlDataReader
    112. Try
    113. con.ConnectionString = _
    114. "Data Source=.\SQLEXPRESS;AttachDbFilename=E:\VB Projects\Movies\Movies\MovieDB.mdf;Integrated Security=True;User Instance=True"
    115. cmd.Connection = con
    116. cmd.CommandText = "select * from Movie"
    117. con.Open()
    118. reader = cmd.ExecuteReader()
    119. lstTab2.Items.Clear()
    120. Do While reader.Read()
    121. lstTab2.Items.Add(reader("ID") & " , " _
    122. & reader("Name") & " , " _
    123. & reader("Erscheinungsjahr") & " , " _
    124. & reader("Genre") & " , " _
    125. & reader("Schauspieler") & " , " _
    126. & reader("Auszeichnungen") & " , " _
    127. & reader("Bewertung") & " , " _
    128. & reader("Sonstiges"))
    129. Loop
    130. reader.Close()
    131. con.Close()
    132. Catch ex As Exception
    133. MsgBox(ex.Message)
    134. End Try
    135. End Sub
    136. End Class
    Tja leider zeigt mir Visual Basic die Zeile nicht an... Die Meldung taucht nur im laufenden Programm auf.
    Bei einem Einzelschritt-Debug springt er in der Funktion lstTab2_SelectedIndexChanged im Bereich der unten stehenden Zeilen beim Sprung zu reader zur Exception-Msg.

    cmd.CommandText = _
    "select * from Movie " _
    & "where Name = " & lstTab2.SelectedItem

    reader = cmd.ExecuteReader()

    Gruss
    Name ist wahrscheinlich ein als Text formatiert also musst du das in ein Hochkomma setzten, die anweisung

    cmd.CommandText = "select * from Movie where Name = '" & lstTab2.SelectedItem & "'"

    PS: benenne bitte deine Steuerelemente, dadurch blickst du und wir besser durch.



    Edit

    Warum weißest du den Pfad der DB x mal zu mach das einmal im Form load Event und gut ist.