none
Daten werden nur einmal eingelesen (OleDBDataAdapter) RRS feed

  • Frage

  • Hallo Leute,

    auch wenn ihr mich für bekloppt erklärt, ich muss doch noch eine Frage loswerden.

    Ich habe festgestellt, dass die Datensätze aus nachfolgendem Code nur einmal gefiltert werden. Danach passiert einfach nichts mehr.

    Im Formularkopf:

    Public Class frmSBS
    Dim cnLohn As New OleDb.OleDbConnection Dim DS As System.Data.DataSet Dim DT As System.Data.DataTable Dim DR As System.Data.DataRow Dim DA As System.Data.OleDb.OleDbCommand

    [...]


    Im Form_Load:

       Private Sub frmSBS_Load(ByVal sender As System.Object, ByVal e As  _
            System.EventArgs) Handles MyBase.Load
            Dim i As Integer = 0
     
            cnLohn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=""" & sDatabasepfad & "\" & MdDB & """"
    
            'erstmaliges Einlesen der gesamten Tabelle, Filterung erst in Sub Read_LuG
            Dim Sql As String = "SELECT MdNr, " & _
                                        "Lohnmonat, " & _
                                        "LuGAbrg, " & _
                                        "LuGAbrg_Korrektur, " & _
                                        "PSD, " & _
                                        "MSD, " & _
                                        "Anmeldungen, " & _
                                        "Abmeldungen, " & _
                                        "Ummeldungen " & _
                                        "FROM Lohnabrechnungen WHERE MdNr = ? ORDER BY MdNr, Lohnmonat;"
    
            DA = New OleDbCommand(Sql, cnLohn)
            Try
                cnLohn.Open()
            Catch ex As Exception
                MessageBox.Show(ex.Message, _
                    "Beim Öffnen der Datenbank ist ein Fehler aufgetreten.")
            End Try
     
        End Sub

    Datenbank-Funktion:

    Private Sub Read_LuG(ByVal lMandant As Long) Dim dLohnmonat As Date Dim adapter As OleDbDataAdapter = New OleDbDataAdapter DS = New System.Data.DataSet() adapter.SelectCommand = DA 'Where-Klausel DA.Parameters.Add("@MdNr", OleDbType.Integer).Value = lMandant adapter.Fill(DS, "Lohnabrechnungen") ' --- Zugriff auf Tabelle DT = DS.Tables("Lohnabrechnungen") Dim r As Long = DT.Rows.Count - 1 dLohnmonat = DT.Rows(r)("Lohnmonat") DateTimePicker1.Value = dLohnmonat End Sub

        Private Sub Find_LuG(ByVal dMonat As Date)
            Dim ci As New System.Globalization.CultureInfo("de-DE")

            Dim foundRows() As Data.DataRow
            Dim sSelect As String = "Lohnmonat='" & dMonat.ToString("d", ci) & "'"
            'Dim sSelect As String = "Lohnmonat='01.05.2012'"
            foundRows = DT.Select(sSelect)
            If foundRows.Length > 0 Then
                With foundRows(0)
                    txtLuG1.Text = .Item("LuGAbrg").ToString
                    txtLuG2.Text = .Item("LuGAbrg_Korrektur").ToString
                    txtLuG3.Text = .Item("PSD").ToString
                    txtLuG4.Text = .Item("MSD").ToString
                    txtLuG5.Text = .Item("Anmeldungen").ToString
                    txtLuG6.Text = .Item("Abmeldungen").ToString
                    txtLuG7.Text = .Item("Ummeldungen").ToString
                End With
            Else
                Call Clear_Text()
                Exit Sub
            End If

        End Sub


    Die Daten werden in der Read_LuG()-Funktion nur einmal richtig gefiltert. Danach nicht mehr.

    Ausführen der Funktion:

        Private Sub lvwMandanten_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lvwMandanten.Click
            Dim lMandant As Long
            lMandant = lvwMandanten.SelectedItems(0).Text
            Read_LuG(lMandant)
            Find_LuG(DateTimePicker1.Value)
        End Sub

    Ich begreife einfach nicht, warum ich mich immer nur in dem gleichen Datenbereich bewege.

    Kann mir einer vielleicht helfen, wo ich den Denkfehler habe?

    Vielen Dank im voraus.

    Gruß Ahmed

    Montag, 18. Juni 2012 11:07

Antworten

  • Ich sag ja, ich bin einfach zu doof.

    Ein einfacher Clear-Befehl und schon funktionierts.

    Hier die Lösung:

        Private Sub Read_LuG(ByVal lMandant As Long)
            Dim dLohnmonat As Date
            Dim adapter As OleDbDataAdapter = New OleDbDataAdapter
    
            DS = New System.Data.DataSet()
    
            adapter.SelectCommand = DA
            DA.Parameters.Clear()
            'Where-Klausel
            DA.Parameters.Add("@MdNr", OleDbType.Integer).Value = lMandant
    
            adapter.Fill(DS, "Lohnabrechnungen")                     ' --- Zugriff auf Tabelle
            DT = DS.Tables("Lohnabrechnungen")
    
            Dim r As Long = DT.Rows.Count - 1
            dLohnmonat = DT.Rows(r)("Lohnmonat")
    
            DateTimePicker1.Value = dLohnmonat
    
        End Sub

    Gruß Ahmed

    Montag, 18. Juni 2012 12:38