Rubrik: Datenbanken · Sonstiges | VB-Versionen: VB4, VB5, VB6 | 14.09.01 |
Datenbank-Viewer im ListView-Control Ein Beispiel, wie sich der gesamte Inhalt eines Recordsets in einem ListView-Control darstellen lässt. | ||
Autor: Thomas Bannert | Bewertung: | Views: 50.164 |
ohne Homepage | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Mit Hilfe des ListView-Controls und nachfolgendem Code lässt sich schnell und einfach ein kleiner Datenbank-Viewer realisieren. Zunächst wird ein Recordset über alle Datenbankfelder einer bestimmten Tabelle erzeugt. Die Feldnamen der Tabelle dienen dann gleichzeitig als Spalten-Überschriften im ListView-Control. Dann wird das Recordset vollständig durchlaufen, und alle Datensätze zeilenweise in das ListView übertragen.
Nachteil des ListView-Controls ist allerdings, dass sich einzelne Datensätze bzw. Datenfelder nicht so leicht ändern lassen, und sollte demnach auch vorrangig nur als Viewer (Betrachter) eingesetzt werden.
Im folgenden stellen wir Ihnen zwei Lösungen vor:
rsView_DOA, wenn Sie die DAO-Datenbankroutinen einsetzen, sowie
rsView_ADO, wenn Sie die ADO-Datenbankroutinen verwenden.
Beispiel für die Verwendung unter DAO
Private Sub rsView_DAO(ByVal dbFilename As String, _ ByVal dbTable As String) Dim Db As DAO.Database Dim oRecordset As DAO.Recordset Dim oField As DAO.Field Dim oItem As ListItem ' Datenbank öffnen Set Db = Workspaces(0).OpenDatabase(dbFilename, _ False, False) ' Ersteinmal brauche wir ein Recordset Set oRecordset = Db.OpenRecordset _ ("SELECT * FROM " & dbTable, dbOpenSnapshot, _ dbOpenForwardOnly) ' Sicherstellen, dass das ListView leer ist With ListView1 .ColumnHeaders.Clear .ListItems.Clear ' Report-Ansicht (Detail-Ansicht) .View = lvwReport ' Hier richten wir das ListView ein For Each oField In oRecordset.Fields ' jedes Feld aus dem Recordset als Überschrift ' in das ListView .ColumnHeaders.Add , oField.Name, oField.Name Next ' Sind überhaupt Datensätze vorhanden? If oRecordset.RecordCount > 0 Then ' Nun das Recordset durchlaufen und alle Daten in ' das ListView einfügen oRecordset.MoveFirst Do ' ein ListItem mit dem ersten Feld des aktuellen ' Recordset-Eintrags erzeugen For Each oField In oRecordset.Fields If oItem Is Nothing Then ' ein neues ListItem erzeugen Set oItem = .ListItems.Add(, , oField.Value) Else oItem.SubItems _ (.ColumnHeaders.Item(oField.Name).Index - 1) _ = IIf(Not IsNull(oField.Value), oField.Value, "") End If Next ' Unser ListItem wieder auf Nothing setzten Set oItem = Nothing ' nächsten Datensatz aus dem Recordset oRecordset.MoveNext Loop Until oRecordset.EOF End If End With oRecordset.Close Db.Close Set oField = Nothing Set oRecordset = Nothing Set Db = Nothing End Sub
Beispiel für die Verwendung unter ADO
Private Sub rsView_ADO(ByVal dbFilename As String, _ ByVal dbTable As String) Dim oCon As New ADODB.Connection Dim oRecordset As ADODB.Recordset Dim oField As ADODB.Field Dim oItem As ListItem With oCon ' Die Connection zur Datenbank .Provider = "Microsoft.Jet.OLEDB.3.51" ' Pfad & Name der Datenbank .Open dbFilename .CursorLocation = adUseClient End With ' Ersteinmal brauche wir ein Recordset Set oRecordset = New ADODB.Recordset oRecordset.Open "SELECT * FROM " & dbTable, _ oCon, adOpenForwardOnly, adLockReadOnly, 0 ' Sicherstellen, dass das ListView leer ist With ListView1 .ColumnHeaders.Clear .ListItems.Clear ' Report-Ansicht (Detail-Ansicht) .View = lvwReport ' Hier richten wir das ListView ein For Each oField In oRecordset.Fields ' jedes Feld aus dem Recordset als Überschrift ' in das ListView .ColumnHeaders.Add , oField.Name, oField.Name Next ' Sind überhaupt Datensätze vorhanden? If oRecordset.RecordCount > 0 Then ' Nun das Recordset durchlaufen und alle Daten in ' das ListView einfügen oRecordset.MoveFirst Do ' ein ListItem mit dem ersten Feld des aktuellen ' Recordset-Eintrags erzeugen For Each oField In oRecordset.Fields If oItem Is Nothing Then ' ein neues ListItem erzeugen Set oItem = .ListItems.Add(, , oField.Value) Else oItem.SubItems _ (.ColumnHeaders.Item(oField.Name).Index - 1) _ = IIf(Not IsNull(oField.Value), oField.Value, "") End If Next ' Unser ListItem wieder auf Nothing setzten Set oItem = Nothing ' nächsten Datensatz aus dem Recordset oRecordset.MoveNext Loop Until oRecordset.EOF End If End With Set oField = Nothing Set oCon = Nothing Set oRecordset = Nothing End Sub
Um nun das ListView-Control mit allen relevanten Daten zu füllen, rufen Sie einfach die entsprechende Prozedur auf: rsView_DAO oder rsView_ADO. Als Parameter wird der vollständige Pfad zu einer Access-Datenbank erwartet, sowie der Name der Tabelle, deren Struktur und Inhalt angezeigt werden soll.