none
bei der Abfrage index von Listbox steht Zeiger immer auf letzten eintrag RRS feed

  • Frage

  • bei meinem kleinen lernprogramm greife ich auf eine Acces(2000) Datenbank zu. Dabei
    versuche ich Daten einzufügen/zu ändern /löschen usw.
    nun habe ich das Problem das der Zeiger von ListBox immer außerhalb des Bereichs liegt außer wenn ich den ersten Datensatz anklicke . Die Grundzüge des Programms habe ich aus den Buch Visual Basic für Einsteiger da funktioniert es

    Public Class Lottogewinn
        Dim con As New OleDb.OleDbConnection
        Dim cmd As New OleDb.OleDbCommand
        Dim reader As OleDb.OleDbDataReader
        Dim ziehungsnummer As New ArrayList
        Dim gesamtziehung(2500) As Ziehung
    
    
        ' classe zum experementieren
    
        Public Class Ziehung
            Public ziehungszähler As Integer
            Public datum As String
            Public jahr As Integer
            Public woche As Integer
            Public ziehungstag As String
            Public zahl_1 As Integer
            Public zahl_2 As Integer
            Public zahl_3 As Integer
            Public zahl_4 As Integer
            Public zahl_5 As Integer
            Public zahl_6 As Integer
            Public zusatzzahl As Integer
        End Class
    
    
        Private Sub Lottogewinn_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            con.ConnectionString = _
                       "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                       "Data Source=C:\users\bernd\programmierung\übungen\Bernd_lotto1.mdb"
            cmd.Connection = con
        End Sub
    
        Private Sub einlesen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles einlesen.Click
            füllen()
    
        End Sub
    
        Private Sub füllen()
            'diese sub gibt es beim Bsp im Buch nicht  
            Dim con As New OleDb.OleDbConnection
            Dim cmd As New OleDb.OleDbCommand
            Dim reader As OleDb.OleDbDataReader
            Dim anzahl As Integer
            anzahl = 0
    
    
    
            con.ConnectionString = _
               "Provider=Microsoft.Jet.OLEDB.4.0;" & _
               "Data Source=C:\users\bernd\programmierung\übungen\Bernd_lotto1.mdb"
            cmd.Connection = con
            cmd.CommandText = "select * from Lotto_Zahlen_gesamt"
            con.Open()
            reader = cmd.ExecuteReader()
            anzahl = 0
            Try
    
                Do While reader.Read()
                    Dim einzelziehung As New Ziehung
                    einzelziehung.ziehungszähler = Convert.ToInt32(reader("Ziehungszähler"))
                    einzelziehung.datum = Convert.ToString(reader("Datum"))
                    einzelziehung.jahr = Convert.ToInt32(reader("Jahr"))
                    einzelziehung.woche = Convert.ToInt32(reader("Woche"))
                    einzelziehung.ziehungstag = reader("Ziehungstag")
                    einzelziehung.zahl_1 = Convert.ToInt32(reader("Zahl_1"))
                    einzelziehung.zahl_2 = Convert.ToInt32(reader("Zahl_2"))
                    einzelziehung.zahl_3 = Convert.ToInt32(reader("Zahl_3"))
                    einzelziehung.zahl_4 = Convert.ToInt32(reader("Zahl_4"))
                    einzelziehung.zahl_5 = Convert.ToInt32(reader("Zahl_5"))
                    einzelziehung.zahl_6 = Convert.ToInt32(reader("Zahl_6"))
                    einzelziehung.zusatzzahl = Convert.ToInt32(reader("Zusatzzahl"))
                    gesamtziehung(anzahl) = einzelziehung
                    anzahl = anzahl + 1
    
                Loop
    
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
    
            reader.Close()
            con.Close()
    
            MsgBox(" der Test" & gesamtziehung(100).ziehungszähler)
    
        End Sub
    
    
        
    
    
        Private Sub cdmSehen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cdmSehen.Click
            alleSehen()
        End Sub
    
        Sub alleSehen()
            Try
                con.Open()
    
                cmd.CommandText = "select * from Lotto_Zahlen_gesamt "
                Ausgabe()
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
            con.Close()
            txtZiehungszähler.Text = ""
            txtDatum.Text = ""
            txtJahr.Text = ""
            txtWoche.Text = ""
            txtZiehungstag.Text = ""
            txtZahl_1.Text = ""
            txtZahl_2.Text = ""
            txtZahl_3.Text = ""
            txtZahl_4.Text = ""
            txtZahl_5.Text = ""
            txtZahl_6.Text = ""
            txtZusatzzahl.Text = ""
    
        End Sub
        Sub Ausgabe()
    
            reader = cmd.ExecuteReader()
            ListBox1.Items.Clear()
            Do While reader.Read()
                ziehungsnummer.Clear()
                ListBox1.Items.Add(reader("Ziehungszähler") & "_____" & reader("Datum") & "______" _
               & reader("Jahr") & "______" & reader("Woche") & "_______" & reader("Ziehungstag") & "________" _
               & reader("Zahl_1") & "______" & reader("Zahl_2") & "______" & reader("Zahl_3") & "______" & reader("Zahl_4") & "______" _
               & reader("Zahl_5") & "______" & reader("Zahl_6") & "______" & reader("ZusatzZahl"))
                ziehungsnummer.Add(reader("Ziehungszähler"))
            Loop
            reader.Close()
    
        End Sub
    
        Private Sub einfügen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles einfügen.Click
            MsgBox(" der Test" & gesamtziehung(100).ziehungszähler)
            Dim anzahl As Integer
            If txtZiehungszähler.Text = "" Then
                MsgBox("Bitte mindestens eine " _
                   & "Ziehungsnummer eintragen")
                Exit Sub
            End If
    
            Try
                con.Open()
                cmd.CommandText = _
                   "insert into Lotto_Zahlen_gesamt " & _
                   "(Ziehungszähler, Datum, Jahr,Woche,Ziehungstag,Zahl_1,Zahl_2,Zahl_3,Zahl_4,Zahl_5,Zahl_6,ZusatzZahl) " & _
                   "values (" & _
                   txtZiehungszähler.Text & ", '" & CDate(txtDatum.Text) & "', " & txtJahr.Text & ", " & txtWoche.Text & ", '" & (txtZiehungstag.Text) & "', " & _
                   txtZahl_1.Text & ", " & txtZahl_2.Text & ", " & txtZahl_3.Text & ", " & txtZahl_4.Text & ", " & txtZahl_5.Text & ", " & txtZahl_6.Text & ", " & txtZusatzzahl.Text & " )"
    
                'MsgBox(cmd.CommandText) 
                anzahl = cmd.ExecuteNonQuery()
                If anzahl > 0 Then
                    MsgBox("Es wurde ein Datensatz eingefügt")
                End If
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
    
            con.Close()
            alleSehen()
    
        End Sub
    
    
        Private Sub ändern_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ändern.Click
    
        End Sub
    
       
        Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
            Try
                MsgBox("anfangswert" & ziehungsnummer(ListBox1.SelectedIndex))
                'wert Ziehungsnummer 2021 wenn man den 1. Listeneintrag auswählt
                'in der Datenbank 2021 Datensätz vorhanden
                'ansonsten Fehlermeldung
                con.Open()
                cmd.CommandText = _
                   "select * from Lotto_Zahlen_gesamt " _
                   & "where Ziehungszähler = " _
                   & ziehungsnummer(ListBox1.SelectedIndex)
                MsgBox("wert nach select" & ziehungsnummer(ListBox1.SelectedIndex))
                'letzte Datensatz wird ausgegeben
                reader = cmd.ExecuteReader()
                reader.Read()
                txtZiehungszähler.Text = reader("Ziehungszähler")
                ' txtDatum.Text = reader("Datum")
                txtJahr.Text = reader("Jahr")
                txtWoche.Text = reader("Woche")
                txtZiehungstag.Text = reader("Ziehungstag")
                txtZahl_1.Text = reader("Zahl_1")
                txtZahl_2.Text = reader("Zahl_2")
                txtZahl_3.Text = reader("Zahl_3")
                txtZahl_4.Text = reader("Zahl_4")
                txtZahl_5.Text = reader("Zahl_5")
                txtZahl_6.Text = reader("Zahl_6")
                txtZusatzzahl.Text = reader("ZusatzZahl")
                reader.Close()
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
            con.Close()
        End Sub
    End Class
    ich verwende Windows 7 Ultimat 64 bit
    ich weiß einfach nicht warum der Zeiger am Ende steht
    Donnerstag, 11. März 2010 19:38

Antworten

  • Hallo loewe_62,

    es wäre hilfreich gewesen uns mit zu teilen, an welcher Stelle der Fehler genau auftritt.

    Aber man kann es auch so finden; wenn Du bei Füllen von "ziehungsnummer" in jedem Schleifendurchlauf jedesmal die das Array zunächst löscht (Clear), darfst Du Dich anschließend auch nicht wundern, das hinterher maximal nur ein Eintrag im Array vorhanden ist; deshalb geht es auch nur mit dem ersten Eintrag.

    Setzt das Clear vor die Schleife.

    Do While reader.Read()
                ziehungsnummer.Clear()
                ListBox1.Items.Add(reader("Ziehungszähler") & "_____" & reader("Datum") & "______" _
               & reader("Jahr") & "______" & reader("Woche") & "_______" & reader("Ziehungstag") & "________" _
               & reader("Zahl_1") & "______" & reader("Zahl_2") & "______" & reader("Zahl_3") & "______" & reader("Zahl_4") & "______" _
               & reader("Zahl_5") & "______" & reader("Zahl_6") & "______" & reader("ZusatzZahl"))
                ziehungsnummer.Add(reader("Ziehungszähler"))
    Loop

    Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de
    Donnerstag, 11. März 2010 19:52

Alle Antworten

  • Hallo loewe_62,

    es wäre hilfreich gewesen uns mit zu teilen, an welcher Stelle der Fehler genau auftritt.

    Aber man kann es auch so finden; wenn Du bei Füllen von "ziehungsnummer" in jedem Schleifendurchlauf jedesmal die das Array zunächst löscht (Clear), darfst Du Dich anschließend auch nicht wundern, das hinterher maximal nur ein Eintrag im Array vorhanden ist; deshalb geht es auch nur mit dem ersten Eintrag.

    Setzt das Clear vor die Schleife.

    Do While reader.Read()
                ziehungsnummer.Clear()
                ListBox1.Items.Add(reader("Ziehungszähler") & "_____" & reader("Datum") & "______" _
               & reader("Jahr") & "______" & reader("Woche") & "_______" & reader("Ziehungstag") & "________" _
               & reader("Zahl_1") & "______" & reader("Zahl_2") & "______" & reader("Zahl_3") & "______" & reader("Zahl_4") & "______" _
               & reader("Zahl_5") & "______" & reader("Zahl_6") & "______" & reader("ZusatzZahl"))
                ziehungsnummer.Add(reader("Ziehungszähler"))
    Loop

    Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de
    Donnerstag, 11. März 2010 19:52
  • Hallo loewe_62,

    Hat Dir die Antwort geholfen?

    Grüße,
    Robert

    Mittwoch, 17. März 2010 08:11
    Moderator
  • Hallo loewe_62,

    Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert

    Donnerstag, 18. März 2010 09:29
    Moderator

  • Hallo Olaf

    es war eine freude zu sehen wie das Programm nach der kleinen Änderung "clear vor der Schleife"
    das macht wie ich es mir gedacht.

    besten Dank für den Tip denn manchmal ist der Wald voller Bäume und man sieht ihn trotzdem nicht

    Loewe_62
    Donnerstag, 18. März 2010 17:37