Tabellen auslesen funktioniert nicht

  • VB.NET

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von fichz.

    Tabellen auslesen funktioniert nicht

    Hallo Zusammen,

    ich bin Umsteiger von VB6 auf VB2010 und versuche, ein von mir vor vielen Jahren in VB6 programmiertes Verwaltungsprogramm in den wichtigsten Funktionen in VB2010 Express zu implementieren. Leider scheitert es beim Auslesen von Daten.
    Ziel ist, den Inhalt einer MS-Access Datei in einem ListView darzustellen (ich habe gelesen, dass die Anbindung mittels DataGrid und Assistent ziemlich einfach ist - habe es auch schon probiert und es funktionierte. Allerdings ist das DataGrid nicht die gewünschte/geforderte Ausgabedarstellung. Es muss ein ListView sein.
    Jetzt habe ich ja den Code schon, und dachte mir, da etwas abzukupfern. Im einfachsten Fall per Copy&Paste. Die Verbindung zur Datenbank wird aufgebaut, allerdings klappt das mit dem Auslesen der Tabellen nicht. Die Fehlermeldung lautet: "Data type mismatch in criteria expression."
    Hier, ausschnittsweise der Quellcode, den ich in ein Modul gepackt habe:
    Der Debugger steigt aus in Funktion "openDatabaseTable_HANDKASSE_Read" bei cmd.ExecuteReader mit der oben genannten Meldung.

    VB.NET-Quellcode

    1. Imports System.Data.OleDb
    2. Module smec_funktionen
    3. Public currentYear As String
    4. Public connectString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=FINANZEN.MDB;Persist Security Info=True;Jet OLEDB:Database Password=1234"
    5. Dim con As New OleDbConnection
    6. Public Function openDatabaseTable_HANDKASSE_Read() As OleDbDataReader
    7. Dim cmd As New OleDbCommand
    8. cmd.Connection = openDatabase()
    9. cmd.CommandText = "select * from smec_handkasse where jahr='2010'"
    10. openDatabaseTable_HANDKASSE_Read = cmd.ExecuteReader
    11. End Function
    12. Private Function openDatabase() As OleDbConnection
    13. con.ConnectionString = connectString
    14. Try
    15. con.Open()
    16. 'MsgBox("State: " & con.State.ToString)
    17. Catch ex As Exception
    18. MessageBox.Show("openDatabase: " & ex.Message)
    19. con.Close()
    20. End Try
    21. openDatabase = con
    22. End Function
    23. Public Sub getListViewData_Handkasse(ByRef listViewName As ListView)
    24. With listViewName
    25. .Clear()
    26. .Columns.Clear()
    27. .Items.Clear()
    28. .FullRowSelect = True
    29. 'Column definition
    30. .View = View.Details ' IMPORTANT - Set the view to Details to allow tabulation (column mode)
    31. .GridLines = True
    32. .Columns.Add("Datum", 100, HorizontalAlignment.Left)
    33. .Columns.Add("Beleg-Nr.", 100, HorizontalAlignment.Left)
    34. .Columns.Add("Buchungstext", 300, HorizontalAlignment.Left)
    35. .Columns.Add("Einnahme", 100, HorizontalAlignment.Left)
    36. .Columns.Add("Ausgabe", 100, HorizontalAlignment.Left)
    37. .Columns.Add("Saldo", 100, HorizontalAlignment.Left)
    38. .Columns.Add("Position", 200, HorizontalAlignment.Left)
    39. End With
    40. Call loadListViewData(listViewName)
    41. End Sub
    42. Public Sub loadListViewData(ByRef listViewName As ListView)
    43. Dim oleReader As OleDbDataReader = openDatabaseTable_HANDKASSE_Read()
    44. Do While oleReader.Read()
    45. Dim LItem As New ListViewItem
    46. 'LItem.Text = (oleReader("Datum"))
    47. LItem.SubItems.Add(oleReader("Belegnummer"))
    48. LItem.SubItems.Add(oleReader("Buchungstext"))
    49. LItem.SubItems.Add(oleReader("Einnahme"))
    50. LItem.SubItems.Add(oleReader("Einnahme"))
    51. LItem.SubItems.Add(oleReader("Betrag"))
    52. LItem.SubItems.Add(oleReader("Positionsnummer"))
    53. listViewName.Items.AddRange(New ListViewItem() {LItem})
    54. Loop
    55. closeDatabase()
    56. End Sub


    Eigentlich ist mein Ziel, ein DataSet oder eine DataTable(?) mit den Datensätzen zu füllen, sodass ich nur einmal beim Aufruf in die Datenbank gucke, mir alles hole, die Verbindung wieder schließe und dann für die Anzeige im ListView mir die Daten aus dem DataSet hole.

    Viele Grüße & ein gesundes Jahr 2011 an alle :)
    wenn ich das richtig sehe versucht du in einer funktion die gleiche funktion wieder aufzurufen:

    VB.NET-Quellcode

    1. Public Function openDatabaseTable_HANDKASSE_Read() As OleDbDataReader
    2. Dim cmd As New OleDbCommand
    3. cmd.Connection = openDatabase()
    4. cmd.CommandText = "select * from smec_handkasse where jahr='2010'"
    5. openDatabaseTable_HANDKASSE_Read = cmd.ExecuteReader 'hier rifst du die aktion wieder auf
    6. End Function


    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten