Zugreifen auf Daten

DAO
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 muß 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



 Ranking-Hits zurück Sitemap
Designed by www.wbrnet.info