BEISPIEL
HINWEIS
BEISPIEL
HINWEIS
BEISPIEL
Kapitel 5: Programmieren mit Objekten
Erstellen einer neuen Instanz von Access über die COM-Schnittstelle von Visual Basic. Abschließend wird die
Instanz wieder zerstört.
Dim appAccess As Access.Application
Set appAccess = New Access.Application
appAccess.Visible = True
' ... Arbeiten mit den Access-Objekten
Set appAccess = Nothing
Sie können auch über die klassische OLE-Automatisierung auf Access-Objekte zugreifen, z.B. aus älteren
Anwendungen heraus, die nicht als COM-Komponenten fungieren können. Referenzieren Sie eine allge-
meine Object-Variable und setzen Sie anstatt des New-Operators zur Instanzenbildung die CreateObject-
Funktion ein.
Ein Verweis auf die Microsoft Access 12.0 Object Library ist hier nicht erforderlich.
Erstellen einer neuen Instanz der Klasse
Application
ohne COM:
Dim appAccess As Object
Set appAccess = CreateObject("Access.Application")
appAccess.Visible = True
' ... Arbeiten mit den Access-Objekten
Set appAccess = Nothing
Die gezeigte Art der Instanzenbildung aufgrund einer allgemeinen Object-Referenzierung ist mit erheblichen
Performance-Einbußen verbunden (Late Binding). Auch die IntelliSense funktioniert aufgrund der fehlenden Referenzierung der
Typbibliothek natürlich nicht mehr!
Eigenschaften und Methoden des Application-Objekts
Hier wollen wir uns nur auf einige wichtige Eigenschaften und Methoden beschnken und im Übrigen auf
die Online-Dokumentation verweisen.
Application-Eigenschaft
Jedes Microsoft Access-Objekt verfügt über eine schreibgeschützte Eigenschaft Application, die das aktuelle
Application-Objekt zurückgibt. Sie können diese Eigenschaft einsetzen, um auf alle Eigenschaften des Appli-
cation-Objekts zuzugreifen.
So könnten Sie vom aktuellen Formular aus die Menüleiste des
Application
-Objekts neu zuweisen:
Me.Application.MenuBar = "Menü1"
266
BEISPIEL
BEISPIEL
HINWEIS
Einsatz der Eigenschaften
Application
und
DBEngine
, um die Werte der Eigenschaft
DBEngine
in einem
Meldungsfeld anzuzeigen:
Sub infoAnzeigen(obj As Object)
Dim apl As Object, i As Integer, str As String
On Error Resume Next
Set apl = obj.Application
MsgBox "Visible-Eigenschaft = " & apl.Visible
If apl.UserControl = True Then
For i = 0 To apl.DBEngine.Properties.Count – 1
str = str & apl.DBEngine.Properties(i).Name & ", "
Next i
End If
MsgBox Left(str, Len(str) – 2) & ".", vbOK, "DBEngine-Eigenschaften"
End Sub
Der Aufruf:
Private Sub Befehl1_Click()
infoAnzeigen Me
End Sub
Das Ergebnis zeigt die folgende Abbildung:
Abbildung 5.9 Meldungsfenster mit den Ergebnissen des Beispiels
CurrentObjectName-/CurrentObjectType-Eigenschaft
Beide Eigenschaften verwenden Sie, um den Typ bzw. Namen des gerade aktiven Datenbankobjekts
(Tabelle, Abfrage, Formular, Bericht, Makro, Modul, Serversicht, Datenbankdiagramm, Gespeicherte Pro-
zedur) zu ermitteln. Das aktive Datenbankobjekt ist das Objekt mit dem Fokus bzw. das Objekt, in dem
Code ausgeführt wird.
Im Codefenster von
Formular1
werden folgende Anweisungen ausgeführt:
Debug.Print Application.CurrentObjectName ' Formular1
Debug.Print Application.CurrentObjectType ' 2 => acForm (Formular)
Eine Zusammenstellung aller möglichen Rückgabewerte von CurrentObjectType finden Sie im Übersichtsteil
dieses Kapitels (Seite 276).
267
Die Access-Objekthierarchie
BEISPIEL
BEISPIEL
Kapitel 5: Programmieren mit Objekten
BrokenReference-Eigenschaft
Mit dieser ab Access 2002 neu eingeführten Eigenschaft lässt sich überprüfen, ob alle Verweise auf Klassen-
bibliotheken gültig sind. Falls die Anwendung ungültige Verweise enthält, kann die References-Auflistung
(siehe Seite 261) durchlaufen werden, um nähere Informationen zu gewinnen.
Der Code testet auf ungültige Verweise und listet diese in einem Dialogfeld auf.
Dim ref As Reference
Dim st As String
If Application.BrokenReference Then
st = "Folgende Verweise sind ungültig:" & vbCrLf
For Each ref In Application.References
If ref.IsBroken Then st = st & " " & ref.Name & vbCrLf
Next ref
Else
st = "Alle Verweise sind gültig!"
End If
MsgBox st
SysCmd-Funktion
Eine sinnvolle Anwendung von CurrentObjectType und CurrentObjectName ergibt sich in Zusammenarbeit
mit der SysCmd-Funktion.
Falls das aktive Objekt
Formular1
ist und geöffnet, geändert, aber nicht gespeichert wurde, wird das Formular
gespeichert und dann geschlossen.
Sub formTesten()
Dim z As Integer
Dim aTyp As Integer
Dim aName As String
aTyp = Application.CurrentObjectType
aName = Application.CurrentObjectName
If aTyp = acForm And aName = " Formular1 " Then
z = SysCmd(acSysCmdGetObjectState, aTyp, aName) ' Zustand ermitteln
If z = acObjStateDirty + acObjStateOpen Then ' geändert, aber nicht gespeichert
DoCmd.Close aTyp, aName, acSaveYes ' speichern und schließen
End If
End If
End Sub
TempVars-Collection
In älteren Access-Versionen wurden globale Variablen als Public deklariert und in einem öffentlichen
Modul zur allgemeinen Verfügung gestellt. Dies hat jedoch einen gravierenden Nachteil: Tritt in der
Anwendung ein Fehler auf, werden die Werte aller globalen Variablen von Access gelöscht.
Ein neues Feature von Access 2007, die TempVars-Collection des Application-Objekts, schafft hier Abhilfe.
268

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.