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 ExtrasStart 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.

Api-AufrufeVerwendete 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