HINWEIS
HINWEIS
Von Visual Basic 2005 per OLE-Automation auf Access zugreifen
OLE-Automation; ADO.NET; Visual Studio 2005; Visual Basic 2005;
Da VBA nach wie vor auch für Microsoft Access 2007 als Programmiersprache eingesetzt wird, muss man
leider auch in Kauf nehmen, dass die VBA-Fähigkeiten im Vergleich zu den Möglichkeiten der modernen
.NET-Programmiersprachen wie Visual Basic 2005 oder Visual C# doch ziemlich beschränkt sind. Insbe-
sondere trifft dies auf verteilte Umgebungen zu, d.h., Intranet- und Internet-Applikationen lassen sich mit
VBA – wenn überhaupt nur sehr umständlich entwickeln. Auf der anderen Seite stellt das zukunftsorien-
tierte Microsoft Visual Studio 2005 zahlreiche Klassen und Tools zur Verfügung, mit denen Sie leistungs-
fähige lokale und Web-Anwendungen auch für Access-Datenbanken erstellen können.
Automation versus ADO.NET
Um von Visual Basic 2005 (.NET) aus auf Access Datenbanken zugreifen zu können, gibt es hauptsächlich
zwei Alternativen:
Automation und
ADO.NET
Automation erlaubt bekanntlich die quasi »Fernsteuerung« einer Anwendung von einer anderen Anwen-
dung aus. Man sollte Automation dann benutzen, wenn man an Access-spezifischen Features interessiert
ist, wie z.B. die Druck- oder Vorschau-Funktionen für Access-Reports, das Anzeigen und Manipulieren
eines Access-Formulars oder der Aufruf eines Makros.
Das ADO.NET-Objektmodell hingegen kapselt als wesentlicher Bestandteil des .NET Frameworks den uni-
versellen Datenzugriff. ADO.NET sollte man immer dann verwenden, wenn man direkt auf Access-Objekte
zugreifen möchte, z.B. auf Tabellen oder Abfragen.
ADO.NET ist ein völlig neues Objektmodell und nicht mit dem auf der ActiveX-Technologie basierenden ADO
zu verwechseln, wie es in Kapitel 7 dieses Buchs beschrieben wurde!
Im vorliegenden Praxisbeispiel werden wir auf ADO.NET nicht eingehen, sondern lediglich die zweite
Alternative demonstrieren, nämlich wie – ausgehend von einem Visual Basic-Projekt – die Automatisierung
von Access funktionieren könnte.
Für das Nachvollziehen dieses Beispiels muss Ihnen Microsoft Visual Studio 2005 zur Verfügung stehen!
Vorbereitungen
Starten Sie Visual Studio 2005 und wählen Sie Neues Projekt.
Wählen Sie als Projekttyp Visual Basic-Projekte und als Vorlage Windows-Anwendung.
Geben Sie Speicherort und Namen an (z.B. AccessDemo) und klicken Sie auf die »OK«-Schaltfläche.
891
Praxisbeispiele
Kapitel 13: Programmschnittstellen
Abbildung 13.40 Neues Projekt erzeugen
Über das Menü Projekt|Verweis hinzufügen ... öffnen Sie den entsprechenden Dialog, wo Sie auf der COM-
Seite einen Verweis auf die Microsoft Access 12.0 Object Library einrichten:
Abbildung 13.41 Einrichten eines Verweises auf die
Microsoft Access 12.0 Object Library
Wählen Sie die Toolbox und platzieren Sie zwei Schaltflächen (Button1 und Button2) auf dem Formular
Form1.
892
Abbildung 13.42 as Formular in der Entwurfsansicht unter Visual Studio 2005
Über das Menü Ansicht/Code wechseln Sie zur Codeansicht, um mit der eigentlichen Visual Basic-Program-
mierung zu beginnen, die natürlich viele Ähnlichkeiten zu VBA hat.
Quelltext
Imports Microsoft.Office.Interop
Imports System.Runtime.InteropServices
Public Class Form1
Die Schaltfläche »Access aufrufen« :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Button1.Click
On Error GoTo ErrorHandler
Unsere Hauptroutine hat die Aufgabe, die Datenbank
Test.mdb
aufzurufen und dort das Formular
Bericht
aufrufen
anzuzeigen. Demonstriert wird außerdem die Manipulation von Steuerelementen:
Dim oAccess As Access.Application
Dim oForm As Access.Form
Dim oCtls As Access.Controls
Dim oCtl As Access.Control
Dim dbPath As String ' Datenbankpfad zu Test.mdb
Eine neue Access-Instanz für die Automation starten:
oAccess = New Access.ApplicationClass()
Dafür sorgen, dass Access sichtbar ist:
If Not oAccess.Visible Then oAccess.Visible = True
893
Praxisbeispiele
Kapitel 13: Programmschnittstellen
Datenbankpfad ermitteln (die Datenbank befindet sich hier der Einfachheit wegen im Anwendungsver-
zeichnis!):
dbPath = Application.StartupPath & "\Test.mdb"
Datenbank öffnen (im Shared Mode):
oAccess.OpenCurrentDatabase(filepath:=dbPath, Exclusive:=False)
Eventuell geöffnete Formulare schließen:
For Each oForm In oAccess.Forms
oAccess.DoCmd.Close(ObjectType:=Access.AcObjectType.acForm, _
ObjectName:=oForm.Name, Save:=Access.AcCloseSave.acSaveNo)
Next
If oForm IsNot Nothing Then Marshal.ReleaseComObject(oForm)
oForm = Nothing
Das Formular im Datenbankfenster auswählen und den Fokus erteilen:
oAccess.DoCmd.SelectObject(ObjectType:=Access.AcObjectType.acForm, _
ObjectName:="Bericht aufrufen", InDatabaseWindow:=True)
Das Formular anzeigen und seine Beschriftung editieren:
oAccess.DoCmd.OpenForm(FormName:="Bericht aufrufen", View:=Access.AcFormView.acNormal)
oForm = oAccess.Forms("Bericht aufrufen")
oForm.Caption = "Access-Automation mit Visual Basic 2005"
Die Controls-Auflistung benutzen, um die Beschriftung der Schaltfläche
Befehl1
zu editieren:
oCtls = oForm.Controls
oCtl = oCtls.Item("Befehl1")
oCtl.Caption = "Report aufrufen"
Marshal.ReleaseComObject(oCtl)
oCtl = Nothing
oForm.SetFocus()
Objekte(freigeben):
Marshal.ReleaseComObject(oCtls)
oCtls = Nothing
Marshal.ReleaseComObject(oForm)
oForm = Nothing
Application-Objekt freigeben und erlauben, dass Access durch den Anwender geschlossen wird:
If Not oAccess.UserControl Then oAccess.UserControl = True
Marshal.ReleaseComObject(oAccess)
oAccess = Nothing
Exit Sub
Diverse Fehlerbehandlungen (bei einem unerwarteten Fehlern wird versucht, Access zu schließen):
ErrorCleanup:
On Error Resume Next
Marshal.ReleaseComObject(oCtl)
894

Get Microsoft Office Access 2007-Programmierung - Das Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.