Tipp 1.25 - Datenbankfenster
Wie kann ich überprüfen, ob das Datenbankfenster ausgeblendet ist?
Wenn Sie die Menübefehle Fenster- Ausblenden bzw. Einblenden anwenden, wird im laufenden Betrieb, das Datenbankfenster aus- bzw. eingeblendet. Alternativ können Sie auch eine kleine VBA-Prozedur für das Ein- bzw. Ausblenden des Datenbankfensters schreiben:
Beispiel:
Public Sub SetDatabaseWindow(pbVisible As Boolean) '// ===================================================== '// Methode | Blendet das Datenbankfenster ein/aus '// ----------------------------------------------------- '// Parameter | pbVisible = Einblenden = True ' Ausblenden = False '// ----------------------------------------------------- '// Erstellt | Manuela Kulpa '// | EDV Innovation & Consulting - Dormagen '// ----------------------------------------------------- '// Beispielaufruf: '// SetDatabaseWindow False '// ===================================================== On Error GoTo SetDatabaseWindow_Err If pbVisible = True Then ' Datenbankfenster einblenden DoCmd.SelectObject acTable, , True Else ' Datenbankfenster ausblenden DoCmd.SelectObject acTable, , True RunCommand acCmdWindowHide End If SetDatabaseWindow_Exit: On Error GoTo 0 Exit Sub SetDatabaseWindow_Err: MsgBox "Fehler " & Err.Number & ": " & _ Err.Description, vbCritical, _ "modDiv.SetDatabaseWindow" Resume SetDatabaseWindow_Exit End Sub
Um das Datenbankfenster beim Öffnen einer Datenbank generell nicht anzeigen zu lassen, wählen Sie einfach die Menübefehle Extras – Start und deaktivieren Sie das Kontrollkästchen Datenbankfenster anzeigen. Natürlich können Sie auf demselben Weg diese Starteinstellung wieder zurücknehmen. Grundsätzlich ist aber das Ausblenden des Datenbankfenster kein echter Schutzmechanismus, da man diesen relativ schnell aushebeln kann (z.B. durch drücken der [Umschalt]-Taste beim Öffnen der Datenbank), kann aber das unbeabsichtigte Öffnen z.B. einer Löschabfrage verhindern etc.
Möchten Sie später innerhalb Ihrer Anwendung überprüfen, ob das Datenbankfenster aus- bzw. eingeblendet ist, müssen Sie leider auf API-Befehle zurückgreifen. Das Ermitteln dieser Ansicht ist leider nicht mit den Standardbefehlen zu realisieren ist. Kopieren Sie einfach nachfolgenden Quellcode in die Zwischenablage und fügen Sie anschließend den Inhalt der Zwischenablage in ein neues Modul ein. Die Aufrufparameter finden Sie im Quellcode beschrieben.
Verwendete Win32-Api-Aufrufe und Typen: GetNextWindow, GetClassName, IsWindowVisible
Beispiel:
Public Const GW_CHILD = 5 Public Const GW_HWNDNEXT = 2 Declare Function GetNextWindow Lib "user32" Alias "GetWindow" _ (ByVal hWnd As Long, ByVal wFlag As Long) As Long Declare Function GetClassName Lib "user32" Alias "GetClassNameA" _ (ByVal hWnd As Long, ByVal lpClassName As String, _ ByVal nMaxCount As Long) As Long Declare Function IsWindowVisible Lib "user32" (ByVal hWnd As Long) As Long Public Function IsDatabaseWindowVisible() As Boolean '// ===================================================== '// Methode | Überprüft, ob das Datenbankfenster ' aus- bzw. eingeblendet ist '// ----------------------------------------------------- '// Rückgabe | Boolean - True = eingebledet ' False = ausgeblendet '// ----------------------------------------------------- '// Erstellt | Manuela Kulpa '// | EDV Innovation & Consulting - Dormagen '// ----------------------------------------------------- '// Beispielaufruf: '// Im Direktfenster: ?IsDatabaseWindowVisible() '// ===================================================== Dim lTmp As Long Dim lHwnd As Long Dim sClassName As String Dim lClassLen As Long On Error GoTo IsDatabaseWindowVisible_Err lHwnd = GetNextWindow(hWndAccessApp, GW_CHILD) sClassName = String$(32, 0) lClassLen = Len(sClassName) lTmp = GetClassName(lHwnd, sClassName, lClassLen) sClassName = Left(sClassName, lTmp) Do Until sClassName = "MDIClient" lHwnd = GetNextWindow(lHwnd, GW_HWNDNEXT) sClassName = String$(32, 0) lClassLen = Len(sClassName) lTmp = GetClassName(lHwnd, sClassName, lClassLen) sClassName = Left(sClassName, lTmp) Loop lHwnd = GetNextWindow(lHwnd, GW_CHILD) sClassName = String$(32, 0) lClassLen = Len(sClassName) lTmp = GetClassName(lHwnd, sClassName, lClassLen) sClassName = Left(sClassName, lTmp) Do Until sClassName = "ODb" lHwnd = GetNextWindow(lHwnd, GW_HWNDNEXT) sClassName = String$(32, 0) lClassLen = Len(sClassName) lTmp = GetClassName(lHwnd, sClassName, lClassLen) sClassName = Left(sClassName, lTmp) Loop IsDatabaseWindowVisible = (IsWindowVisible(lHwnd) And 1) IsDatabaseWindowVisible_Exit: On Error GoTo 0 Exit Function IsDatabaseWindowVisible_Err: MsgBox "Fehler " & Err.Number & ": " & _ Err.Description, vbCritical, _ "modAPI.IsDatabaseWindowVisible" Resume IsDatabaseWindowVisible_Exit End Function