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.
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
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
- Imports System.Data.OleDb
- Module smec_funktionen
- Public currentYear As String
- Public connectString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=FINANZEN.MDB;Persist Security Info=True;Jet OLEDB:Database Password=1234"
- Dim con As New OleDbConnection
- Public Function openDatabaseTable_HANDKASSE_Read() As OleDbDataReader
- Dim cmd As New OleDbCommand
- cmd.Connection = openDatabase()
- cmd.CommandText = "select * from smec_handkasse where jahr='2010'"
- openDatabaseTable_HANDKASSE_Read = cmd.ExecuteReader
- End Function
- Private Function openDatabase() As OleDbConnection
- con.ConnectionString = connectString
- Try
- con.Open()
- 'MsgBox("State: " & con.State.ToString)
- Catch ex As Exception
- MessageBox.Show("openDatabase: " & ex.Message)
- con.Close()
- End Try
- openDatabase = con
- End Function
- Public Sub getListViewData_Handkasse(ByRef listViewName As ListView)
- With listViewName
- .Clear()
- .Columns.Clear()
- .Items.Clear()
- .FullRowSelect = True
- 'Column definition
- .View = View.Details ' IMPORTANT - Set the view to Details to allow tabulation (column mode)
- .GridLines = True
- .Columns.Add("Datum", 100, HorizontalAlignment.Left)
- .Columns.Add("Beleg-Nr.", 100, HorizontalAlignment.Left)
- .Columns.Add("Buchungstext", 300, HorizontalAlignment.Left)
- .Columns.Add("Einnahme", 100, HorizontalAlignment.Left)
- .Columns.Add("Ausgabe", 100, HorizontalAlignment.Left)
- .Columns.Add("Saldo", 100, HorizontalAlignment.Left)
- .Columns.Add("Position", 200, HorizontalAlignment.Left)
- End With
- Call loadListViewData(listViewName)
- End Sub
- Public Sub loadListViewData(ByRef listViewName As ListView)
- Dim oleReader As OleDbDataReader = openDatabaseTable_HANDKASSE_Read()
- Do While oleReader.Read()
- Dim LItem As New ListViewItem
- 'LItem.Text = (oleReader("Datum"))
- LItem.SubItems.Add(oleReader("Belegnummer"))
- LItem.SubItems.Add(oleReader("Buchungstext"))
- LItem.SubItems.Add(oleReader("Einnahme"))
- LItem.SubItems.Add(oleReader("Einnahme"))
- LItem.SubItems.Add(oleReader("Betrag"))
- LItem.SubItems.Add(oleReader("Positionsnummer"))
- listViewName.Items.AddRange(New ListViewItem() {LItem})
- Loop
- closeDatabase()
- 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