VB 5/6-Tipp 0621: Access 2000-Datenbanken über ADO-Steuerelemente editieren
von Oliver Herz
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: | Verwendete API-Aufrufe: keine | Download: |
'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-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | |||||||
VB5 | |||||||
VB6 |
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 ???