Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0440: ADO Zugriff auf Access 97 DB und Darstellung in ListView + DataGrid

 von 

Beschreibung 

Öffnet die Nordwind-Datenbank und zeigt deren Inhalt in ListView oder DataGrid an. Gutes Beispiel für Anfänger.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

keine

Download:

Download des Beispielprojektes [4,32 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------ Anfang Projektdatei ADO_Listview_Datagrid.vbp  ------
' Es muss ein Verweis auf 'Microsoft ActiveX Data Objects 2.5 Library' gesetzt werden.
' Es muss ein Verweis auf 'Microsoft ADO Ext. 2.5 for DDL and Security' gesetzt werden.
' Die Komponente 'Microsoft Windows Common Controls 6.0 (SP6) (MsComCtl.ocx)' wird benötigt.
' Die Komponente 'Microsoft DataGrid Control 6.0 (OLEDB) (MSDATGRD.OCX)' wird benötigt.

'--- Anfang Formular "Testbereich" alias Testbereich.frm  ---
' Steuerelement: Schaltfläche "Command2"
' Steuerelement: DataGrid "DataGrid1"
' Steuerelement: Textfeld "Text1"
' Steuerelement: Schaltfläche "Command1"
' Steuerelement: Listenanzeigesteuerungselement "ListView1"
' Steuerelement: Beschriftungsfeld "Label1"

'###########################################################################
' ADO Zugriff auf Datenbank Access 97 und Darstellung in ListView + DataGrid
'
' peter.k.sauer@web.de  12.2001
'
' einbinden über Projekt ... Verweise....
' Microsoft ActiveX Data Object 2.x Library
' Microsoft ADO Ext. 2.5 for DDL and Security
'
' 1 Form, 1 Listview, 1 Datagrid, 1 Textbox, 1 Label, 2 Commandbutton
'
' verwendet wird die Nordwind.mdb aus Access
'
'############################################################################

Option Explicit

Private CnA As New ADODB.Connection
Private RsA As New ADODB.Recordset

Private Sub Command1_Click()
    
    Dim sSql As String
    Dim li As ListItem
    
    Me.MousePointer = vbHourglass
    
    'SQL-String aufbauen
    sSql = "Select * From Kunden Where Firma Like '" & _
           Trim(Text1.Text) & "%' Order by Firma"
    
    With RsA
        'Recordset bei Wiederholung schliessen
        If .State = adStateOpen Then
            'Recordset abhängen
            Set DataGrid1.DataSource = Nothing
            'schliessen
            .Close
        End If
        .CursorType = adOpenKeyset
        .LockType = adLockPessimistic
        .Open sSql, CnA
        
        If .RecordCount = 0 Then
            MsgBox "nix gefunden"
            .Close
            Me.MousePointer = vbDefault
            Exit Sub
        End If
        .MoveFirst
    End With
    
    'Listview füllen
    With ListView1
        .ListItems.Clear
        Do While Not RsA.EOF
            Set li = .ListItems.Add(, , GetFld(RsA.Fields("Kunden-Code")))
            li.SubItems(1) = GetFld(RsA!Firma)
            li.SubItems(2) = GetFld(RsA!Kontaktperson)
            li.SubItems(3) = GetFld(RsA!Land)
            li.SubItems(4) = GetFld(RsA!Plz)
            li.SubItems(5) = GetFld(RsA!Ort)
            li.SubItems(6) = GetFld(RsA!Strasse)
            RsA.MoveNext
        Loop
        If .Visible Then
            .SetFocus
        End If
    End With
    
    'Recordset an Datagrid binden
    With DataGrid1
        Set .DataSource = RsA
        RsA.MoveFirst
    End With
    
    Me.MousePointer = vbDefault
End Sub

Private Sub Command2_Click()
    'wechseln zwischen ListView und Datagrid
    
    If DataGrid1.Visible = False Then
        ListView1.Visible = False
        DataGrid1.Visible = True
        Command2.Caption = "zeigen ListView"
        DataGrid1.SetFocus
    Else
        ListView1.Visible = True
        DataGrid1.Visible = False
        Command2.Caption = "zeigen DataGrid"
        ListView1.SetFocus
    End If
End Sub

Private Sub DataGrid1_HeadClick(ByVal ColIndex As Integer)
    'Sortieren Datagrid
    
    Static Sorter As String
    
    With RsA
        If Sorter = "Desc" Then
            .Sort = .Fields(ColIndex).Name & " Asc"
            Sorter = "Asc"
        Else
            .Sort = .Fields(ColIndex).Name & " Desc"
            Sorter = "Desc"
        End If
    End With
End Sub

Private Sub Form_Load()
    
    Dim myPath As String
    
    Me.Height = (600 - 30) * Screen.TwipsPerPixelY
    Me.Width = 800 * Screen.TwipsPerPixelX
    
    myPath = App.Path
    If Right(myPath, 1) <> "\" Then
        myPath = myPath & "\"
    End If
    
    With ListView1
        .Left = 0
        .Top = 3000
        .View = lvwReport
        .FullRowSelect = True
        .LabelEdit = lvwManual
        .ColumnHeaders.Clear
        .ColumnHeaders.Add , , "Code", 800
        .ColumnHeaders.Add , , "Firma", 2400
        .ColumnHeaders.Add , , "Kontaktperson", 2400
        .ColumnHeaders.Add , , "Land", 600
        .ColumnHeaders.Add , , "Plz", 700
        .ColumnHeaders.Add , , "Ort", 2400
        .ColumnHeaders.Add , , "Strasse", 2400
    End With
    
    With DataGrid1
        .Left = 0
        .Top = ListView1.Top
        .Visible = False
    End With
    
    With Text1
        .Width = 1500
        .Height = 315
        .Left = 300
        .Top = 2400
        .Text = "A"
    End With
    
    With Label1
        .Top = 2100
        .Left = 300
        .Height = 210
        .Width = 1500
        .Caption = " Firma"
    End With
    
    With Command1
        .Width = 1500
        .Height = 375
        .Left = 2100
        .Top = 2400
        .Caption = "Daten lesen"
    End With
    
    With Command2
        .Width = 1500
        .Height = 375
        .Left = 3900
        .Top = 2400
        .Caption = "zeigen Datagrid"
    End With
    
    Me.Show
    
    'Connection zur Nordwind.mdb im Applikationspfad
    With CnA
        .CursorLocation = adUseClient
        .Mode = adModeShareDenyNone
        ' für Access 97: 3.51  für 2000: 4.0
        .Provider = "Microsoft.Jet.OLEDB.3.51"
        .ConnectionString = "Data Source=" & myPath & "NWIND.MDB"
        Debug.Print .ConnectionString
        .Open
    End With
    
End Sub

Private Sub Form_Resize()
    'Listview und Datagrid dynamisch anpassen
    
    With ListView1
        .Width = Me.ScaleWidth
        .Height = Me.ScaleHeight - .Top
    End With
    With DataGrid1
        .Width = Me.ScaleWidth
        .Height = Me.ScaleHeight - .Top
    End With
    
End Sub

Private Sub Form_Unload(Cancel As Integer)
    
    If RsA.State = adStateOpen Then
        'Recordset abhängen
        Set DataGrid1.DataSource = Nothing
        'schliessen
        RsA.Close
        'Object zerstören
        Set RsA = Nothing
    End If
    
    'Connection schliessen
    CnA.Close
End Sub

Private Function GetFld(Field As Variant) As String
    'Check dB-Field auf NullString
    
    If IsNull(Field) Then
        GetFld = ""
    Else
        GetFld = Field
    End If
End Function

Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
    ' sortieren Listview
    
    With ListView1
        .SortKey = ColumnHeader.Index - 1
        If .SortOrder = lvwAscending Then
            .SortOrder = lvwDescending
        Else
            .SortOrder = lvwAscending
        End If
        .Sorted = True
        .ListItems(1).Selected = True
    End With
End Sub
'---- Ende Formular "Testbereich" alias Testbereich.frm  ----
'------- Ende Projektdatei ADO_Listview_Datagrid.vbp  -------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 14 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Jürgen Böhmler am 22.04.2009 um 14:30

Hallo, ich habe auf einem anderen Rechner die Routine kopiert - läuft. Dann mitgenommen und auf meinem Rechner versucht - nix. Mein grundlegendes Problem als "Jungprogrammierer" ist: die Nachladung von Verweisen.
Ich benötige die Installation der genannten Dateien, da in meinem Verweiskatalog die benötigten Eintragungen fehlen.
Ich habe zwar Service Pack 6 installiert, aber das hat nichts genützt - wer kann mir helfen ???

mfg Jürgen Böhmler

Kommentar von am 02.01.2007 um 05:29

hi, ich habe access2003
brauche ich die nordwinddatenbank im 97 format ?

oder wie kann ich das beispiel starten?
die connection ...open..geht nicht

danke
roland_k

Kommentar von Bernd Ellermann am 19.10.2006 um 21:33

Hallo,

kann ich mit dem Program auch eine dBase Datei öffnen?

.Provider = "Microsoft.Jet.OLEDB.3.51" scheint nicht zu funktioniern.

Welchen Provider muss ich eingeben?

Mit frundlichem Gruß

Bernd

Kommentar von Gerhard am 02.06.2006 um 15:02

hallo,
ich hab ein paar fragen die mich beschäftigen.

Was bedeutet Recordset?
Wie binde ich die datenbank unter Adodb ein ?

Kommentar von am 22.02.2006 um 09:54

Hallo,
ich verwende xp und VB6 inkl allem was benötigt wird.

wenn man bei der exe-Datei auf die "Minimieren-Schaltfläche" klickt und danach wieder auf in der Taskleiste auf die exe dann kommt folgende Fehlermeldung:
Run-time errror 380
Invalid property value

was könnte das Problem sein?

Mfg
Meier

Kommentar von Stefan R am 24.03.2005 um 12:54

An Peter Schmid:

Dazu muss man auf Projekt/Komponenten gehen und die Komponente Microsoft Windows Common Controls 6.0" ins Projekt aufnehmen. Dann findet man auch ein ListView.

Kommentar von aaaaa am 05.01.2005 um 21:14

i want download ADO Data Control

Kommentar von am 23.04.2003 um 16:17

Wie kann ich, wenn ich zwei gleiche Zeilen im DataGrid habe, diese nur einmal anzeigen lassen?

Kommentar von Christoph Rall am 27.03.2003 um 09:57

Funktioniert sehr gut, musste nur die Zeile:
.FullRowSelect = True
deaktivieren

Kommentar von slainte am 13.03.2003 um 11:54

das prinzip habe ich verstanden. meine frage ist, wie lese ich die markierten zeilen des listview aus und füge sie formatiert in ein word-dokument? wahrscheinlich geht das über einen string. aber wie mache ich das (mit welcher methode)?
für schnelle hilfe wäre ich dankbar...
ciao, slainte

Kommentar von Janusz am 28.09.2002 um 00:02

Good

Kommentar von Marc Michalak am 14.05.2002 um 15:45

Das Steuerelement Listview ist nicht die Listbox.
Einstellung in VBA: als "Zusätzliche Steuerelement" (rechter Mausklick in der "Werkzeugsammlung") es heisst u. a.:
Microsoft ListView Control 6.0 Sp(4).
- - -
Einstellung in VB 6.0:
als Steuerelement in der "Werkzeugsammlung"es heisst: Microsoft Windows Common Controls 6.9 (SP4)
Viel Erfolg

Kommentar von Bernd Kistenmacher am 30.04.2002 um 14:33

Hallo,
vielen Dank für die nützlichen Tipps. Mich beschäftigt folgendes Problem. In Access 97 habe ich eine Tabelle angelegt, die neben "normaler" Strings auch ein OLE-Feld enthält, an das ich Bitmaps gebunden habe (CD-Verwaltung). Nun habe ich über Data-Environment eine Verbindung hergestellt. Der SQL-Code wird auch korrekt erzeugt. Wenn ich aber nun die Daten in einem Formlar sichtbar machen will, kommt eine Fehlermeldung bzgl. der Anbindung genau dieses OLE-Feldes. Er findet die Daten nicht und kann folglich auch kein Bild darstellen. Ich wüßte jetzt auch nicht, wie ich später ein Bitmap aus der VB-Anwendung heraus in genau diese Tabelle ablegen könnte. Haben Sie eine Idee und können Sie mir weiterhelfen?
Vielen Dank im Voraus.
Mit freundlichen Grüßen
Bernd Kistenmacher

Kommentar von Peter Schmid am 11.03.2002 um 10:39

Ich kann in VB6 kein Steuerelement Listview finden. Wie bekomme ich es? Ist evtl. die Listbox gemeint?