Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0621: Access 2000-Datenbanken über ADO-Steuerelemente editieren

 von 

Beschreibung 

Das folgende Beispiel zeigt, wie man mit VB6 Datensätze einer Access 2000-Datenbank über ein ADO-Control abrufen, hinzufügen und editieren kann. Beim Aufrufen der Datensätze ist es möglich Filter zu setzen oder die Datensätze zu sortieren.

Um die Filter zu setzen, müssen die entsprechenden Schlüsselwörter in die Textfelder eingetragen werden.

Um nach Feldern zu sortieren, muss für ein Feld nur auf- oder abwärts angeklickt werden. (Um die SQL-Anweisung zu erstellen, ist eine kleine Funktion eingebaut.)

Damit ein Datensatz hinzugefügt werden kann, müssen die Daten in die Textfelder geschrieben, und der Hinzufügen-Button gedrückt werden. Um einen Datensatz zu editieren, muß zuerst einer aus der Liste ausgewählt werden. Anschließend werden die Werte in den Textfelder geändert. Mit dem Editieren-Button wird der Datensatz geändert.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

keine

Download:

Download des Beispielprojektes [14,59 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 Projekt1.vbp -------------
' Es muss ein Verweis auf 'Microsoft ActiveX Data Objects 2.1 Library' gesetzt werden.
' Die Komponente 'Microsoft Windows Common Controls 6.0 (SP6) (MSCOMCTL.OCX)' wird benötigt.

'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Rahmensteuerelement "fraDatensätze"
' Steuerelement: Listenanzeigesteuerungselement "ListView1" auf fraDatensätze
' Steuerelement: Beschriftungsfeld "lblAnzDatensätze" auf fraDatensätze
' Steuerelement: Beschriftungsfeld "lbl" (Index von 0 bis 12) auf fraDatensätze
' Steuerelement: Rahmensteuerelement "frmÖffnen"
' Steuerelement: Kontrollkästchen-Steuerelement "chkAb" (Index von 1 bis 3) auf frmÖffnen
' Steuerelement: Kontrollkästchen-Steuerelement "chkAuf" (Index von 1 bis 3) auf frmÖffnen
' Steuerelement: Schaltfläche "cmdÖffnen" auf frmÖffnen
' Steuerelement: Textfeld "txtFilter" (Index von 1 bis 3) auf frmÖffnen
' Steuerelement: Linien-Steuerelement "Line1" auf frmÖffnen
' Steuerelement: Rahmensteuerelement "fraSpeichern"
' Steuerelement: Schaltfläche "cmdHinzufügen" auf fraSpeichern
' Steuerelement: Schaltfläche "cmdEditieren" auf fraSpeichern
' Steuerelement: Textfeld "txtFeld" (Index von 1 bis 3) auf fraSpeichern
' Steuerelement: Beschriftungsfeld "lbllfdNr" auf fraSpeichern


'Autor: Oliver Herz
'Email: mail@ohz-edv.de

Option Explicit

Dim db As ADODB.Connection
Dim strdb  As String
Dim rst As ADODB.Recordset

Dim dsFilter(5)
Dim dsSortiere(5)
Dim dsTabelle

Dim i
Dim Datei

Private Sub SubÖffnen()
   
  Dim itmX As ListItem

    Datei = App.Path & "\db1.mdb"
      
    Set db = New ADODB.Connection
    strdb = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
             Datei
            
    db.Open strdb
   
    Set rst = New ADODB.Recordset
    rst.CursorType = adOpenStatic
    rst.LockType = adLockOptimistic
    rst.Open SQLAnweisung, db

    ListView1.ListItems.Clear
   
    Do While Not rst.EOF
      Set itmX = ListView1.ListItems.Add(, , rst!lfdnr)
      itmX.SubItems(1) = rst!feld1
      itmX.SubItems(2) = rst!feld2
      itmX.SubItems(3) = rst!feld3
      rst.MoveNext
    Loop

    lblAnzDatensätze = rst.RecordCount
End Sub

Private Sub subHinzufügen()
  
  Datei = App.Path & "\db1.mdb"
  
  Set db = New ADODB.Connection
  strdb = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _
          & Datei & ";"
          
  db.Open strdb
  
  Set rst = New ADODB.Recordset
  rst.CursorType = adOpenDynamic
  rst.LockType = adLockOptimistic
  rst.Open "Tabelle1", db
  
  With rst
    .AddNew
    !feld1 = txtFeld(1).Text
    !feld2 = txtFeld(2).Text
    !feld3 = txtFeld(3).Text
    .Update
  End With

  rst.Close
  db.Close
End Sub

Private Sub subEditieren()

  Datei = App.Path & "\db1.mdb"
  
  Set db = New ADODB.Connection
  strdb = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _
          & Datei & ";"
          
  db.Open strdb
  
  Set rst = New ADODB.Recordset
  rst.CursorType = adOpenDynamic
  rst.LockType = adLockOptimistic
  rst.Open SQLAnweisung, db    ' , , , adCmdTable
  
  With rst
    !feld1 = txtFeld(1).Text
    !feld2 = txtFeld(2).Text
    !feld3 = txtFeld(3).Text
    .Update
  End With

  rst.Close
  db.Close
End Sub

Private Sub chkAb_Click(Index As Integer)
  If chkAb(Index).Value = 1 Then chkAuf(Index).Value = 0
End Sub

Private Sub chkAuf_Click(Index As Integer)
  If chkAuf(Index).Value = 1 Then chkAb(Index).Value = 0
End Sub

Private Sub cmdEditieren_Click()

  If lbllfdNr.Caption = "" Then Exit Sub
   
  dsFilter(1) = "lfdNr = " & Val(lbllfdNr.Caption)
  dsTabelle = "Tabelle1"
   
  Call subEditieren
End Sub

Private Sub cmdHinzufügen_Click()

  Call subHinzufügen
   
  dsTabelle = "Tabelle1"
  Call SubÖffnen
End Sub

Private Sub cmdÖffnen_Click()

  Dim intFilter
  Dim intSortiere

    intFilter = 0
    intSortiere = 0

    'Eigenschaften für SQL-Anweisung
    For i = 1 To 3
      'Filter
      If txtFilter(i).Text <> "" Then
        intFilter = intFilter + 1
        dsFilter(intFilter) = "Feld" & i & " = '" _
                              & txtFilter(i) & "'"
                              
      End If

      'Sortiere Nach
      If chkAuf(i).Value = 1 Then
        intSortiere = intSortiere + 1
        dsSortiere(intSortiere) = "Feld" & i & " asc"
      End If
     
      If chkAb(i).Value = 1 Then
        intSortiere = intSortiere + 1
        dsSortiere(intSortiere) = "Feld" & i & " desc"
      End If
    Next i
   
    'Tabelle (gibt in diesem Beispiel nur eine)
    dsTabelle = "Tabelle1"
   
   Call SubÖffnen
End Sub

Private Sub Form_Load()

  Dim Breite
  Dim clmX As ColumnHeader

    With ListView1
      .View = lvwReport
      Breite = (.Width - 100) / 4
      
      Set clmX = .ColumnHeaders.Add(, , "lfdNr", Breite)
      Set clmX = .ColumnHeaders.Add(, , "Feld1", Breite)
      Set clmX = .ColumnHeaders.Add(, , "Feld2", Breite)
      Set clmX = .ColumnHeaders.Add(, , "Feld3", Breite)
    End With
End Sub

Public Function SQLAnweisung()

  SQLAnweisung = "SELECT * FROM "
   
  '************************************************
  '* Tabelle
  '************************************************
  SQLAnweisung = SQLAnweisung & dsTabelle
  
  '************************************************
  '* Filter
  '************************************************
  If Trim$(dsFilter(1)) <> "" Then
    SQLAnweisung = SQLAnweisung & " WHERE "
  End If
   
  For i = 1 To 10
    If dsFilter(i) = "" Then Exit For
    SQLAnweisung = SQLAnweisung & dsFilter(i)
    If dsFilter(i + 1) <> "" Then
      SQLAnweisung = SQLAnweisung & " and "
    End If
  Next i
   
  '************************************************
  '* sortiere nach
  '************************************************
  If dsSortiere(1) <> "" Then
    SQLAnweisung = SQLAnweisung & " ORDER BY "
  End If
  
  For i = 1 To 5
    If dsSortiere(i) = "" Then Exit For
    SQLAnweisung = SQLAnweisung & dsSortiere(i)
    If dsSortiere(i + 1) <> "" Then
      SQLAnweisung = SQLAnweisung & ", "
    Else
      SQLAnweisung = SQLAnweisung & ";"
    End If
  Next i
   
  '************************************************
  '* Eigenschaften löschen
  '************************************************
  For i = 1 To 5
    dsFilter(i) = ""
    dsSortiere(i) = ""
  Next i
  dsTabelle = ""
End Function

Private Sub ListView1_Click()
   
  If ListView1.ListItems.Count = 0 Then Exit Sub
   
  lbllfdNr.Caption = ListView1.SelectedItem.Text
  txtFeld(1).Text = ListView1.SelectedItem.SubItems(1)
  txtFeld(2).Text = ListView1.SelectedItem.SubItems(2)
  txtFeld(3).Text = ListView1.SelectedItem.SubItems(3)
End Sub
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei Projekt1.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 5 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 Reinhold Kellermann am 06.08.2009 um 19:48

Ich danke ihnen für diesen Beitrag und ich darf sie versichern, dass es nach vielen Suchen und Misserfolgen das erste sample war, das unter ACESS2000 funktionierte. Für meine private Anwendung habe ich das Programm schon adaptiert.
Als Anfänger in VB6 darf ich sie noch um einen Tipp bitten: Wie löscht man einen Datensatz aus der Datei?

Mit freundlichen Grüßen

Kommentar von Reinhold Kellermann am 06.08.2009 um 10:39

Gratuliere, sie haben alle großmäuligen Profis auf die hinteren Plätze verwiesen!
Das Programm funktioniert auf Anhieb und das findet man nicht so schnell, vor allem dann, wenn es sich um ACCESS 2000 handelt.

Danke für den source und weiterhin viel Erfolg

R. Kellermann

Kommentar von Thobias am 31.08.2006 um 10:06

Hallo,

habe den Code auch ausprobiert, funktioniert wunderbar. Allerdings habe ich ein kleines Problem. Ich habe Datensätze in der DB die mehr als 90 Spalten haben und da spielt vermutlich das Listview Element nicht mehr mit.

Weiss jemand eine Alternative für einen "Anfänger"???

Vielen Dank vorab...

Thobias

Kommentar von Chrischan am 18.12.2004 um 15:15

Hi!

Dankeschön!

Funzt wunderbar!

Es war eine Freude, das Bearbeiten von einer Datenbank von dir zu lernen!

Dankeschön!

Frohe Weihnachten!

Kommentar von Ulrich Ahlemeier am 19.05.2004 um 11:42

Tolles Programm als Grundlage für eigene Datenbankbearbeitungen.
Aber wie kann ich denn Datensätze löschen ???