Dynamische Layouts

Layouts unterscheiden

Da allgemeine und persönliche Layouts getrennt behandelt werden sollen, werden zwei Abfragen vorbereitet. Sie finden den SQL-Text in den Listings 1 und 2.

SELECT LID, LObjektname, LName, LHashwert
FROM tblLayouts
WHERE (((LBenutzer) Is Null))
ORDER BY LObjektname, LName;

SELECT LID, LObjektname, LName, LHashwert, LBenutzer
FROM tblLayouts
WHERE (((LBenutzer)=CurrentUser()))
ORDER BY LObjektname, LName;

Die Abfragen unterscheiden sich nur darin, dass entweder der Eintrag in LBenutzer leer sein oder dem aktuell angemeldeten Benutzer entsprechen muss.

Der Rückgriff auf CurrentUser() bedeutet natürlich, dass eine gesicherte Anmeldung mit Zugriffsrechten stattgefunden hat. Bei einer Mehrbenutzerumgebung ist dies aber ohnehin zu empfehlen.

Viele Stolpersteine

Bei der Entwicklung dieser Layout-Verwaltung sind übrigens wieder einige VBA-Merkwürdigkeiten Tabelle offenbar intern ein Formular in der Datenblatt-Ansicht aufmacht.

Dazu passt nicht nur die Tatsache, dass die gleichen Eigenschaften im Überwachungsfenster des VBA-Editors einschließlich Formname vorhanden sind, sondern auch, dass eine Typüberprüfung mit If TypeOf Screen .ActiveDatasheet Is Form Then zum Ergebnis True kommt.

Im Widerspruch dazu steht jedoch, dass eine geöffnete Tabelle nicht als Screen.ActiveForm ansprechbar ist und zu einem Laufzeitfehler führt. Ärgerlicherweise fehlt das hier offenbar benötigte Screen.ActiveTable-Objekt sogar ganz.