Zugreifen auf Daten via DAO (Data Access Objects)

Zugreifen auf Daten via DAO (Data Access Objects)
DAO (Data Access Objects) ermöglicht das direkte Steuern von Datenbanken. Bevor Sie diese Prozeduren für Ihre eigenen Anwendungen durchführen, müssen Sie Verweise auf die Microsoft DAO Objekt-Bibliothek (Menü 'Extras', 'Verweise') in VBE herstellen. Weiterhin müssen Sie die entsprechenden ISAM- oder ODBC-Treiber installiert haben. Bedienen Sie sich der Hilfe für weitere Informationen zum Thema ODBC-Treiber sowie für die Installation zwecks Zugriff auf externe Daten. Sie finden in der Hilfe ebenfalls Anweisungen für die Installation von DAO oder ISAMs. Der Pfad in dem nachfolgenden Beispiel weist auf das während der Installation erstellte Standarddateiverzeichnis hin. Sofern Microsoft Office in ein anderes Verzeichnis installiert wurde, berichtigen Sie den entsprechenden Pfad in VBE vor der Programmausführung.
Nachfolgendes Beispiel ruft Daten von einer dBase-Datei über RDO ab und plaziert den Datenbereich in eine Abfragetabelle in ein neues Tabellenblatt. Verwenden Sie diese Methode für die Verbindung zu SQL-Datenbanken. RDO umgeht DAO, wodurch der verfügbare Arbeitsspeicher besser genutzt wird.
Sub RDOExample()
Dim ws As Workspace
Dim rs As Recordset
Dim qt As QueryTable
Dim c As Connection
Dim ConnectStr As String
Dim NewSheet As Object
'Falls Microsoft Office während der Installation nicht im vorgegebenen Standarddateiverzeichnis installiert
'wurde, müssen Sie den berichtigten Pfad vor Programmablauf eingeben:
ConnectStr = "odbc;Driver={Microsoft dBase-Treiber (*.dbf)};DBQ=c:\Programme\Microsoft Office\Office;"
'Stellt einen Arbeitsbereich her, der DAO umgeht
Set ws = CreateWorkspace("w1", "admin", "", dbUseODBC)
'Aktiviert die Verbindung zu der DBF-Datenbank
Set c = ws.OpenConnection("", 1, 0, ConnectStr)
'Greift auf alle Datensätze zu und gestattet nur Vorwärtsdurchlauf der Datenbank
Set rs = c.OpenRecordset("select * from Auftrag", dbOpenForwardOnly)
'Fügt eine neues Arbeitsblatt in die aktivierte Arbeitsmappe ein
Set NewSheet = Worksheets.Add
'Fügt eine neue Abfragetabelle basierend auf der Datenbank in das neue Arbeitsblatt ein
Set qt = NewSheet.QueryTables.Add(rs, Range("a1"))
'Führt eine synchronisierte Aktualisierung an der Abfragetabelle aus
qt.Refresh False
'Schließt die Datei
rs.Close
'Bricht die Verbindung ab
c.Close
End Sub
EINE DAO-DATEI ZURÜCKSETZEN
Dieses Beispiel verwendet das Microsoft Access Datenbankbeispiel Nordwind.mdb, um eine Abfragetabelle in einem neuen Arbeitsblatt zu erstellen, und liefert dann die Datei an eine andere Tabelle innerhalb der Datenbank.
Sub ResettingDAORecordset()
Dim db As Database
Dim rs As Recordset
Dim qt As QueryTable
Dim NewSheet As Object
Dim nwind As String
'Standardpfad für den Zugriff auf Datenbankbeispiel 'Nordwind.mdb'
nwind = "C:\Programme\Microsoft Office\Office\Beispiel\Nordwind.mdb"
'Öffnet die Datenbank 'Nordwind.mdb'
Set db = DBEngine.Workspaces(0).OpenDatabase(nwind)
'Öffnet Datenbank mit Kundendaten-Datensatzgruppe
Set rs = db.OpenRecordset("Kunden")
'Fügt ein neues Arbeitsblatt in die aktive Arbeitsmappe ein
Set NewSheet = Worksheets.Add
'Fügt eine Abfragetabelle mit den Dateiinformationen in das neue Arbeitsblatt ein
Set qt = NewSheet.QueryTables.Add(rs, Range("a1"))
'Führt eine synchronisierte Aktualisierung an der Abfragetabelle aus
qt.Refresh False
'Datensatzgruppe schließen
rs.Close
'Öffnet die Datensatzgruppe der Verkaufsdatentabelle
Set rs = db.OpenRecordset("Bestellungen")
'Tauscht die Datensatzgruppe gegen die bestehende Abfragetabelle aus
Set qt.Recordset = rs
'Führt eine synchronisierte Aktualisierung an der Abfragetabelle aus, um die Daten anzuzeigen
qt.Refresh False
'Datensatzgruppe schließen
rs.Close
'Datenbank schließen
db.Close
End Sub
DATEN VON MICROSOFT ACCESS ABRUFEN
Dieses Beispiel verwendet DAO, um eine Abfrage basierend auf zwei Tabellen der Nordwind.mdb-Beispieldatei zu erstellen. Sofern die Abfrage bereits existiert, wird diese durch die Problembehandlungsroutine gelöscht.
Sub RetrieveAccessData()
Dim Nsql As String, Ncriteria As String, Njoin As String
Dim nwind As String
Dim h As Integer
Dim db As Database, qry As Object
Dim rec As Recordset, NewSheet As Object
'Standardspeicherort des Nordwind.mdb-Datenbankbeispiels
nwind = "C:\Programme\Microsoft Office\Office\Beispiel\Nordwind.mdb"
'Sollte ein Fehler auftreten, Fehlerbehandlungsroutine ausführen:
On Error GoTo errorhandler
'Datenbank öffnen
Set db = DBEngine.Workspaces(0).OpenDatabase(nwind)
'SQL-Anweisung für Abfrage (kopiert von MS SQL-Abfrage)
Nsql = "SELECT DISTINCTROW Kategorien.Kategoriename, Artikel.Artikelname, Artikel.Liefereinheit, Artikel.Einzelpreis "
Njoin = "FROM Kategorien INNER JOIN Artikel ON Kategorien.[Kategorie-Nr] = Artikel.[Artikel-Nr] "
Ncriteria = "WHERE ((([Artikel].Auslaufartikel)=No) AND (([Artikel].Lagerbestand)>20));"
'Abfrage unter dem Namen TempQuery erstellen
Set qry = db.CreateQueryDef("TempQuery")
'SQL-Anweisung on TempQuery senden
qry.sql = Nsql & Njoin & Ncriteria
'Öffne resultierende Datensatzgruppe, erstellt durch TempQuery
Set rec = qry.OpenRecordset()
'Neues Tabellenblatt mit dem folgenden Code hinzufügen
Set NewSheet = ThisWorkbook.Sheets.Add(after:=Worksheets("Zugriff auf Daten"), Type:=xlWorksheet)
'Feldnamen in Zeile 1 des neuen Tabellenblatts einfügen
For h = 0 To rec.Fields.Count - 1
NewSheet.[a1].Offset(0, h).Value = rec.Fields(h).Name
Next h
'Dynaset in Excel einfügen
NewSheet.[a2].CopyFromRecordset rec
'Temporäre Abfrage löschen
db.QueryDefs.Delete "TempQuery"
'Datenbank schließen
db.Close
'Falls keine Fehler aufgetreten sind, Code-Ausführung abbrechen
Exit Sub
'Fehlerbehandlungsroutine löscht Abfrage, falls diese bereits existiert:
errorhandler:
If DBEngine.Errors(0).Number = 3012 Then
db.QueryDefs.Delete "TempQuery"
'Beginnt Code-Ausführung in der Zeile, die den Fehler verursachte
Resume
Else
MsgBox Error(Err)
End If
End Sub
DATEN ÜBER ISAM-TREIBER ABRUFEN
Dieses Beispiel ruft Daten von einer dBase-Datei ab und fügt diese in ein neues Tabellenblatt ein. Die notwendigen ISAM-Treiber müssen hierzu installiert sein.
Sub RetrieveISAMdata()
Dim db As Database, rec As Recordset
Dim dPath As String
Dim h As Integer, NewSheet As Worksheet
'Standardinstallationspfad für dbf-Dateien
dPath = "C:\Programme\Microsoft Office\Office"
'Datenbank öffnen
Set db = DBEngine.Workspaces(0).OpenDatabase(dPath, 0, 0, "dBase III")
'Öffnet eine Datensatzgruppe mit allen Datensätzen in Auftrag.dbf
Set rec = db.OpenRecordset("select * from Auftrag")
'Neues Tabellenblatt der Arbeitsmappe hinzufügen die diesen Code enthält
Set NewSheet = ThisWorkbook.Worksheets.Add(after:=Worksheets("Zugriff auf Daten"))
'Alle Felder mit Schleife durchsuchen und Feldnamen an Tabellenblatt zurückgeben
For h = 0 To rec.Fields.Count - 1
NewSheet.[a1].Offset(0, h).Value = rec.Fields(h).Name
Next h
'Dynaset nach Excel kopieren
NewSheet.[a2].CopyFromRecordset rec
'Datenbank schließen
db.Close
End Sub
TABELLEN IN DATENBANK AUFLISTEN
Dieses Beispiel führt die Tabellennamen des Microsoft Access-Datenbankbeispiels Nordwind.mdb auf.
HINWEIS: Microsoft Access muss für die Ausführung dieses Codes installiert sein.
Sub ListTables()
Dim db As Database, TableCount As Long, i As Long
Dim dPath As String
'Standardspeicherort für Nordwind.mdb
dPath = "C:\Programme\Microsoft Office\Office\Beispiel\Nordwind.mdb"
'nwind.mdb öffnen
Set db = DBEngine.Workspaces(0).OpenDatabase(dPath)
'Variable für die Anzahl der Tabellen festlegen
TableCount = db.TableDefs.Count
'Alle Tabellen mit Schleife durchsuchen
For i = 0 To TableCount - 1
'Tabellenname anzeigen
MsgBox db.TableDefs(i).Name
Next
'Datenbank schließen
db.Close
End Sub
DATENFELDER DER DATENBANK AUFLISTEN
In diesem Beispiel werden die Feldnamen der Kundentabelle aufgelistet. Falls Sie die Datei 'Kunden.dbf' nicht installiert haben, wenden Sie sich an das Hilfethema 'Laden oder Entfernen einzelner Komponenten in Microsoft Office oder Microsoft Excel'.
Sub List_Fields()
Dim db As Database, rec As Recordset
Dim fieldcount As Long, i As Long, dPath As String
'Standardspeicherort für dbf-Beispieldateien
dPath = "C:\Programme\Microsoft Office\Office"
'Datenbank öffnen
Set db = OpenDatabase(dPath, 0, 0, "dBase III")
'Alle Datensätze von Kunden.dbf öffnen
Set rec = db.OpenRecordset("SELECT * FROM Kunden")
'Datenfelder zählen
fieldcount = rec.Fields.Count
'Schleife entsprechend der Anzahl der Felder wiederholen
For i = 0 To fieldcount - 1
'Feldnamen anzeigen
MsgBox rec.Fields(i).Name
Next
'Datenbank schließen
db.Close
End Sub
VERBINDUNG ZUR SQL-DATENBANK HERSTELLEN
Dieses Beispiel liefert die Tabellennamen einer SQL-Datenbank. Sie müssen eine Verbindung zu der SQL-Datenbank hergestellt und eine gültige DSN (Data Source Name) erstellt haben. Klicken Sie das 32-Bit-ODBC-Symbol in der Windows-Systemsteuerung, um weitere Informationen über DSNs zu erhalten.
Sub ODBC_Connection()
Dim db As Database, i As Long
'DSN-Dialogfeld anzeigen um die DSN auszuwählen
'Eingabeaufforderungen für weitere Informationen folgen falls notwendig
Set db = DBEngine.Workspaces(0).OpenDatabase("", , , "ODBC;")
'Anzahl der Tabellen zählen
TableCount = db.TableDefs.Count
'Schleife durchlaufen um alle Tabellennamen anzuzeigen
For i = 0 To TableCount - 1
MsgBox db.TableDefs(i).Name
Next
'Datenbank schließen
db.Close
End Sub
DAO-FEHLERBEHANDLUNG
Das folgende Beispiel veranschaulicht das Auffangen von DAO-Fehlern. Das Anzeigen der Fehlermeldung bietet oftmals hilfreiche Informationen für den Benutzer. Hinweise auf die Fehlernummer bieten dem Programmierer die Möglichkeit, spezielle Fehler aufzufangen und zu behandeln.
Sub Trap_DAO_Error()
Dim d As Database, r As Recordset
'Tritt ein besonderer Fehler auf, greife auf 'errorhandler' zu:
On Error GoTo errorhandler
'Keine integrierten Fehlermeldungen anzeigen
Application.DisplayAlerts = False
'Versuch eine nicht vorhandene Datenbank zu öffnen
Set d = DBEngine.Workspaces(0).OpenDatabase("c:\xl95\db4.mdb")
Exit Sub 'Routine beenden falls keine Fehler aufgetreten sind:
errorhandler:
MsgBox DBEngine.Errors(0).Description 'Text der Fehlermeldung
MsgBox DBEngine.Errors(0).Number 'Fehlernummer
MsgBox DBEngine.Errors(0).Source 'Wo Fehler aufgetreten ist
MsgBox DBEngine.Errors(0).HelpContext
End Sub
TABELLE ERSTELLEN
Dieses Beispiel veranschaulicht das Erstellen einer neuen Tabelle innerhalb einer bestehenden Datenbank.
Sub Create_Table()
Dim t As Object, f As Object, d As Database
Dim dPath As String
'Tritt ein Fehler auf, greife auf 'errorhandler' zu:
On Error GoTo errorhandler
'Standarddateipfad der Nordwind.mdb-Beispieldatenbank
dPath = "C:\Programme\Microsoft Office\Office\Beispiel\Nordwind.mdb"
'Datenbank 'Nordwind' öffnen
Set d = DBEngine.Workspaces(0).OpenDatabase(dPath)
'Neue TableDef erstellen
Set t = d.CreateTableDef("NeueTabelle")
' Datenfelder zu NeueTabelle hinzufügen
Set f = t.CreateField("Feld1", dbDate)
t.Fields.Append f 'Feld der Datenfeldauflistung hinzufügen
Set f = t.CreateField("Feld2", dbText)
t.Fields.Append f
Set f = t.CreateField("Feld3", dbLong)
t.Fields.Append f
' TableDef-Definition durch Hinzufügen bei TableDefs-Auflistung speichern
d.TableDefs.Append t
'Datenbank schließen
d.Close
Exit Sub
errorhandler:
MsgBox DBEngine.Errors(0)
End Sub

Mehr Tipps: Word - Assistenz beim Schreiben

Sponsoren und Investoren

Sponsoren und Investoren sind jederzeit herzlich willkommen!
Wenn Sie die Information(en) auf dieser Seite interessant fanden, freuen wir uns über eine kleine Spende. Empfehlen Sie uns bitte auch in Ihren Netzwerken (z. B. Twitter, Facebook oder Google+). Herzlichen Dank!

Nach oben Sitemap
Impressum & Kontakt