Einer für drei: Der Befehl SysCmd

Status ermitteln

Die dritte Funktionalität von SysCmd besteht darin, den Status von Objekten der Datenbank zu ermitteln. So können Sie prüfen, ob ein Formular ganz neu, geöffnet oder noch ungespeichert ist. Auch diese Funktionalität sollten Sie wegen der enthaltenen Binärcodierung kapseln, wie in Listing 5 demonstriert wird.

Function IstFormularOffen(strFormularName As String) As Boolean
Dim intStatus As Long
intStatus = Application.SysCmd(acSysCmdGetObjectState, acForm, strFormularName)
IstFormularOffen = ((intStatus Or 1) = intStatus)
End Function
Function IstFormularUngespeichert(strFormularName As String) As Boolean
Dim intStatus As Long
intStatus = Application.SysCmd(acSysCmdGetObjectState, acForm, strFormularName)
IstFormularUngespeichert = ((intStatus Or 2) = intStatus)
End Function
Function IstFormularNeu(strFormularName As String) As Boolean
Dim intStatus As Long
intStatus = Application.SysCmd(acSysCmdGetObjectState, acForm, strFormularName)
IstFormularNeu = ((intStatus Or 4) = intStatus)
End Function

Die Stati geöffnet, ungespeichert und neu werden mit den Zahlen 1, 2 und 4 angegeben und können natürlich auch gleichzeitig vorhanden sein. Ob ein Gesamtstatus vorhanden ist, lässt sich prüfen, indem Sie mit einer OR-Verknüpfung vergleichen, ob das Ergebnis mit dem Gesamtstatus identisch ist. Dann war der jeweilige Status bereits darin enthalten.

In Listing 6 sehen Sie, wie sich für ein Formular seine verschiedenen Stati ermitteln und als Meldung anzeigen lassen.

Sub TestFormulare()
Dim strMeldung As String
Const conName = "Formular1"
If IstFormularOffen(conName) Then
strMeldung = "offen"
Else
strMeldung = "geschlossen"
End If
If IstFormularNeu(conName) Then
strMeldung = strMeldung & " und neu"
Else
strMeldung = strMeldung & " und alt"
End If
If IstFormularUngespeichert(conName) Then
strMeldung = strMeldung & " und ungespeichert"
Else
strMeldung = strMeldung & " und schon gespeichert"
End If
MsgBox "'" & conName & "' ist " & strMeldung
End Sub