Access hütet so manche Quelle interessanter Funktionen. Darunter befindet sich etwa die wenig beachtete SysCmd-Anweisung, die eine Reihe cooler Features bereithält. Damit fragen Sie beispielsweise mal eben ab, ob gerade die Vollversion oder die Runtime-Version läuft, oder ermitteln die Access-Version. Dieser Beitrag stellt alle Möglichkeiten dieser Methode vor.
Die SysCmd-Methode gehört zum Application-Objekt. Genau genommen ist SysCmd gleichzeitig Methode und Funktion: Je nachdem, welche Parameter Sie angeben, liefert es Informationen zurück oder führt Aktionen aus. SysCmd kann einen bis drei Parameter verarbeiten, wobei die Anzahl der weiteren Parameter vom Wert des ersten Parameters abhängt. In den folgenden Abschnitten schauen wir uns an, welche Möglichkeiten SysCmd bietet.
Access-Verzeichnis ermitteln
Mit dem Wert acSysCmdAccessDir für den ersten Parameter verwenden Sie SysCmd als Funktion. Sie erhalten dann den Namen des Verzeichnisses zurück, in dem sich die aktuell verwendete Access-Instanz befindet (also die Datei MSAccess.exe). Das Formular aus Bild 1 zeigt Beispiele für die Anwendung der SysCmd-Funktionen. Das obere Textfeld txtAccessDir wird beispielsweise beim Öffnen des Formulars mit der folgenden Anweisung gefüllt:
Bild 1: Formular mit Beispielen für die Nutzung von SysCmd
Me!txtAccessDir = SysCmd(acSysCmdAccessDir)
Access-Version ermitteln
Auf ähnliche Weise arbeitet SysCmd mit dem Wert acSysCmdAccessVer. Die Funktion liefert dann die Access-Version der laufenden Instanz, also beispielsweise 11.0 für Access 2003, 12.0 für Access 2007 oder 14.0 für Access 2010. Im Beispielformular funktioniert dies so:
Me!txtAccessVer = SysCmd(acSysCmdAccessVer)
Arbeitsgruppendatei ermitteln
Mit dem Wert acSysCmdGetWorkgroupFile ermittelt SysCmd den Namen der Arbeitsgruppen-Informationsdatei, die das System aktuell verwendet:
Me!txtWorkgroupfile = SysCmd(acSysCmdGetWorkgroupFile)
Runtime oder Vollversion
Die vierte Information, an die Sie mit nur einem Parameter herankommen, erhalten Sie mit dem Wert acSysCmdRuntime. SysCmd liefert damit eine Information darüber zurück, ob die aktuelle Access-Version die Runtime-Version ist oder nicht – das Ergebnis ist entweder True oder False:
Me!txtRuntime = SysCmd(acSysCmdRuntime)
Zustand von Objekten ermitteln
Etwas aufwendiger ist die Ermittlung des Zustands eines bestimmten Objekts.
Allein der Aufruf erfordert die Angabe aller drei möglichen Parameter, in diesem Fall die folgenden:
- Aufrufart: acSysCmdGetObjectState
- Objektart (acTable, acQuery, acForm, acReport, acMacro, acModule)
- Objektname (also beispielsweise frmSysCmd)
Die Funktion liefert eine Kombination der folgenden Werte zurück:
- acObjStateOpen (1): Objekt geöffnet
- acObjStateDirty (2): Objekt geändert, aber nicht gespeichert
- acObjStateNew (4): Neu angelegtes Objekt
Im Beispielformular frmSysCmd wählen Sie mit einem Kombinationsfeld einen der Einträge der Systemtabelle MSysObjekts aus. Der Kombinationsfeldeintrag enthält den Namen sowie den in MSysObjects gespeicherten Typ des Objekts (etwa -32768 für Formulare). Die Prozedur aus Listing 1 ermittelt zunächst die Access-Konstante für den Objekttyp und ruft dann den Status des Objekts mit SysCmd ab.
Listing 1: Ermitteln des Zustands eines bestimmten Objekts
Private Sub cboObjekte_AfterUpdate() Dim intType As Integer Dim intStatus As Integer Select Case Me!cboObjekte.Column(0) Case 1 intType = acTable Case 5 intType = acQuery Case -32761 intType = acModule Case -32764 intType = acReport Case -32766 intType = acMacro Case -32768 intType = acForm End Select intStatus = SysCmd(acSysCmdGetObjectState, intType, Me!cboObjekte.Column(1)) Me!txtGetObjectState = Choose(intStatus + 1, "Undefiniert", "acObjStateOpen", _ "acObjStateDirty", "acObjStageOpen + acObjStateDirty", "acObjStateNew", _ "acobjStateOpen + acObjStateNew", "acObjStateDirty + acObjStateNew", _ "acObjStateOpen + acObjStateDirty + acObjStateNew") End Sub
Der Status kann einer der Werte 1, 2 oder 4 oder auch eine Kombination dieser Werte sein.
Wenn Sie beispielsweise eine Tabelle öffnen und diese dann im Kombinationsfeld des Beispielformulars auswählen, zeigt dieses den Status acObjStateOpen an.
ändern Sie dann eine Eigenschaft der Tabelle, indem Sie beispielsweise eine Spaltenbreite anpassen. Beim nächsten Auswählen dieses Objekts zeigt das Formular dann den Wert acObjStageOpen + acObjStateDirty an. Ein Wechsel zurück zur Tabelle und die Tastenkombination Strg + S speichern die änderungen. Anschließend liefert SysCmd wieder den Wert acObjStateOpen.
Gleiches funktioniert auch bei neu angelegten Objekten – diese können jedoch nicht mit dem Kombinationsfeld des Beispielformulars ausgewählt werden, da Objekte erst nach dem Speichern in der Tabelle MSysObjects vorliegen.
Statustext anzeigen
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
den kompletten Artikel im PDF-Format mit Beispieldatenbank
diesen und alle anderen Artikel mit dem Jahresabo