vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Datenbanken · Sonstiges   |   VB-Versionen: VB4, VB5, VB614.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 BannertBewertung:  Views:  50.109 
ohne HomepageSystem:  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.
 



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.