Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: datekk am April 08, 2016, 14:48:51

Titel: Navigationsformular: Registerkarten via VBA erstellen
Beitrag von: datekk am April 08, 2016, 14:48:51
Hallo,

ist es möglich, die Registerkarten eines Navigationsformulares via VBA Code zu erstellen, Formulare auf die neu erstellten Registerkarten zuzuweisen und die jeweiligen Filter zu setzen? Das ganze sollte im Ereignis "Beim Laden" passieren. Ich möchte gern die Anzahl an Registerkarten in Abhängigkeit mit der Anzahl von Einträgen in einer Tabelle flexibel und automatisch anpassen. Die Tabelle gibt dann auch die Filter vor.

Man kann es sich auch so vorstellen, dass das Formular nicht unten die Datensatzschaltfläche hat, sondern für jeden Datensatz eine Registerkarte anlegt.

LG
datekk
Titel: Re: Navigationsformular: Registerkarten via VBA erstellen
Beitrag von: Beaker s.a. am April 08, 2016, 16:57:25
Hallo datekk,
Abgesehen vom, eher fragwürdigen, Vorgaben; -
das geht nur in der Entwurfsansicht.
Du müsstest also zur Laufzeit das NaviForm auf die Entwurfsansicht
umschalten, dann die UFo (Register) per VBA erstellen (CreateControl)
und dann zurück zur Formularansicht wechseln. Das geht zwar auch
"unvisible", aber nur mit einer Accessvollversion und .accdb.
In einer Runtime-Umgebung oder mit einer .accde geht es gar nicht.
ZitatFormulare auf die neu erstellten Registerkarten
Das ist bei einem Navi-Form dasselbe; - jede Karte ist bereits ein Form.
In diesem Falle ein UFo des Navi-Forms.
gruss ekkehard
Titel: Re: Navigationsformular: Registerkarten via VBA erstellen
Beitrag von: MzKlMu am April 08, 2016, 19:42:39
Hallo,
bei einem solchen Vorhaben würde ich eher das Datenmodell anzweifeln.
Wer zur Laufzeit Steuerelemente anlegen muss, hat meist ein verbesserungsbedürftiges Datenmodell.

Wie bereits gesagt, erfordern solche Sachen die Umschaltung in den Entwurfsmodus und anschließendes explizites Speichern des Entwurfs.

Wenn man seine Anwendung absichern will und einem ACCDE erzeugen will, so ist das nicht möglich, weil eine ACCDE keine Änderungen am Entwurf zulässt.
Eine derartige DB läuft auch nicht mit einer Runtime.

Warum musst Du während der Laufzeit Elemente anlegen ?
Titel: Re: Navigationsformular: Registerkarten via VBA erstellen
Beitrag von: datekk am April 11, 2016, 09:25:55
Nicht immer gleich das Datenbankmodell anzweifeln  :o :o :o

Ich konnte mir halt eine optimale Darstellung eines Sachverhalts genau so vorstellen. Wenn es nicht sinnvoll machbar ist, dann geht das halt nicht. Die Registerkarten sollten sich nach der Anzahl von Formularen aus einer Tabelle richten. Die Registerkarten sollten darauf hin alle das gleiche UFO anzeigen, welches die jeweiligen Steuerelemente des ausgewählten Formulars enthält, gefiltert auf das jeweils ausgewählte Formular.

Ich könnte das auch über einen Bericht darstellen, da dieser eine Gruppierung ermöglicht. Hier kann ich aber wieder keine Daten ändern. Über ein klassisches Formular fehlt mir wieder die Gruppierung. Also dachte ich, die Gruppierung via Registerkarten hinzubekommen. Das wäre schön übersichtlich gewesen.


LG
Titel: Re: Navigationsformular: Registerkarten via VBA erstellen
Beitrag von: MaggieMay am April 11, 2016, 10:35:12
Hallo,

wenn du dein Vorhaben etwas ausführlicher schildern könntest, käme man vielleicht auf Lösungsansätze, allerdings habe ich noch nicht verstanden worum es geht. Eine Möglichkeit wäre ja auch, vorhandene Registerkarten je nach Bedarf ein- und auszublenden. Und ob es unbedingt ein Navigationsformular sein muss, würde ich auch infrage stellen wollen.
Titel: Re: Navigationsformular: Registerkarten via VBA erstellen
Beitrag von: datekk am April 11, 2016, 11:40:15
Ok, ich versuchs.... Aus einem anderen Tread konntet ihr entnehmen, dass ich an einem Rollensystem zur Sicherheit der Datenbank arbeite. Hierbei bin ich schon ganz gut voran gekommen. Sicherheitsrelevante Formulare erhalten einen einzeiligen Verweis auf eine Modul Sub. Damit werden alle (das werde ich zu einem späteren Zeitpunkt noch genauer Filtern) Steuerelemente des Formulars mit einer Tabelle abgeglichen, falls nicht vorhanden, wird der Name des Steuerelements zugefügt mit dem Namen des Formulars. Dies geschieht pro Rolle für jedes Feld. Weiterhin erhält jedes Steuerelement ein Feld für den Sicherheitslevel (1 = Vollzugriff, 2 = nur lesen, 3 = nicht anzeigen).

Nun Habe ich ein (Ober)Formular, welches die Rolle anzeigt. Darunter soll nun jedes relevante Formular mit seinen jeweiligen Schaltflächen dargestellt werden, damit ich je nach Rolle für jedes einzelne Feld das Sicherheitslevel bearbeiten kann. Und genau hier dachte ich, dass die Darstellung über die Registerkarten ganz nett wäre. Die sicherheitsrelevanten Formulare sind ca. 10-15 Stück. Das ganze hat auch den Hintergrund, dass ich die Rollenvergabe dynamisch halten möchte. Also nicht für jede Rolle, für neue Formulare, neue Steuerelemente an den Code ran muss. Es soll selbst mit der Datenbank wachsen.

Vorbild hier ist für mich die Rolleneinstellung von Dynamics CRM wie in diesem Bild: https://carstengroth.files.wordpress.com/2012/03/minimum_security_role_2.png (https://carstengroth.files.wordpress.com/2012/03/minimum_security_role_2.png) wobei ich allerdings anstatt der farbigen Kreise im Moment dies mit den Zahlen des Sicherheitsleves abdecke.

LG
Titel: Re: Navigationsformular: Registerkarten via VBA erstellen
Beitrag von: MzKlMu am April 11, 2016, 18:35:09
Hallo,
wenn Du gestattest, werde ich nach deinen neueren Ausführungen das Datenmodell erneut anzweifeln (wenn Du nicht gestattest auch  ;D ).
Die Rollen/Rechte sollten keine Feldnamen sein, sondern Feldinhalte.
Hier liegt eine n:m Beziehung vor zwischen Nutzer und Rollen/Recht.
Dadurch sind niemals neue Felder erforderlich, sondern nur neue Datensätze, was diese DB dann automatisch dynamisch und flexibel macht.
Dass Du dann noch Register brauchst glaube ich eher nicht, denn es wird einfach nur gefiltert.

Das Bild im obigen Beitrag bestätigt mich in meiner Auffassung.
Titel: Re: Navigationsformular: Registerkarten via VBA erstellen
Beitrag von: datekk am April 11, 2016, 19:30:10
Die Rollen sind doch Feldinhalte (in RollenID). Meine Tabelle sieht z.B. so Aus

tblElemente
IdElemente, Formular, Steuerelement, RollenID, RechteID
1, frmPersonal, Steuerelement_1,1,1
2, frmPersonal, Steuerelement_1,2,3
3, frmPersonal, Steuerelement_1,3,3
4, frmPersonal, Steuerelement_2,1,1
5, frmPersonal, Steuerelement_2,2,2
6, frmPersonal, Steuerelement_2,3,2
7, frmVertrieb, Steuerelement_1,1,1
8, frmVertrieb, Steuerelement_1,2,1
9, frmVertrieb, Steuerelement_1,3,3
10, frmVertrieb, Steuerelement_2,1,1
11, frmVertrieb, Steuerelement_2,2,1
12, frmVertrieb, Steuerelement_2,3,2

tblRolle
IdRolle, NameRolle
1, Admin
2, User
3, Verwaltung

tblRechte
IdRechte, NameRechte
1, Vollzugriff
2, nur lesen
3, nicht anzeigen

1:n tblElemente.RollenID:tblRollen.IdRolle
1:n tblElemente.RechteID:tblRechte.IdRechte

Nun erstelle ich ein Formular auf tblRollen. Und ein UFO auf tblElemente. Da ich aber gern die Steuerelemente nach Formularen Gruppiert hätte, kam mir die Idee diese auf Registerkarten zu gruppieren und das UFO entsprechend danach zu filtern. Bin auch offen für andere Ideen. Bericht bietet Gruppierung, aber keine Datenbearbeitung. Ich will bloß pro Rolle keine Mega Liste abarbeiten.
Titel: Re: Navigationsformular: Registerkarten via VBA erstellen
Beitrag von: MzKlMu am April 11, 2016, 19:45:03
Hallo,
ah, jetzt habe ich wenigstens den Aufbau verstanden. So ist das auch OK. Ich bin aus Deiner bisherigen Darstellung nicht schlau geworden.

Allerdings, habe ich jetzt immer noch nicht verstanden, was Du jetzt gruppieren willst.
Titel: Re: Navigationsformular: Registerkarten via VBA erstellen
Beitrag von: datekk am April 11, 2016, 19:56:05
Gruppierung nach tblElemente.Formular  ;)

Rolle = Verwaltung

frmPersonal
       Steuerelement_1, nicht anzeigen
       Steuerelement_2, nicht anzeigen

frmVertrieb
       Steuerelement_1, Vollzugriff
       Steuerelement_2, nicht anzeigen

usw.
Titel: Re: Navigationsformular: Registerkarten via VBA erstellen
Beitrag von: DF6GL am April 12, 2016, 09:03:22
Hallo,

also, ich versteh immer noch nicht, was denn im Grunde gemacht werden soll.


Wenn ich es nach den letzten Beitrag interpretiere, soll einfach  tblElemente bearbeitet werden..  Also den (vorhandenen) Steuerelementen je eine Rolle und ein Recht zugeordnet werden.

Eine "Gruppierung" löst aber nicht dieses Problem:
"Ich will bloß pro Rolle keine Mega Liste abarbeiten."

M. E. läuft das Ganze auf eine einfache (Vor-)Filterung nach Formular und Sortierung nach Steuerelement, RollenID und RechteID hinaus..




Titel: Re: Navigationsformular: Registerkarten via VBA erstellen
Beitrag von: MaggieMay am April 12, 2016, 09:32:14
Hi,

du kannst ja Registerkarten für die verschiedenen Formulare vorsehen, die Daten aber lediglich in einem über das Registersteuerelement gelegten Ufo anzeigen, der Aufbau scheint ja immer gleich zu sein. Bei Registerkartenwechsel wird dann jeweils die Datenquelle geändert.

Da das aber nicht flexibel genug ist (Stichwort: "Registerkarten per VBA erstellen"), kannst du das zu bearbeitende Formular auch ganz einfach per Kombifeld auswählen und auf die Register gänzlich verzichten.
Titel: Re: Navigationsformular: Registerkarten via VBA erstellen
Beitrag von: datekk am April 12, 2016, 14:48:34
DF6GL: genau :)
MaggieMay: ja kann ich machen, die Lösung mit den Registerkarten fänd ich nur recht schick, aber draufgesch.... :D

Nebenbei: Ich erstelle ja die tblElemente selbst... Gibt es eine Systemtabelle, die diese Infos (Formularnamen / Steuerelementnamen) schon enthält und kann man darauf zugreifen und Spalten anfügen für die Rechte und Rollen?
Titel: Re: Navigationsformular: Registerkarten via VBA erstellen
Beitrag von: MaggieMay am April 12, 2016, 15:10:34
Du kannst die Objekte aus der Systemtabelle MSysObjects auslesen, den Typ kannst du der Spalte "Type" entnehmen. Ändern kannst du dort nichts.

Ebenso kannst du die Forms-Auflistung auslesen, an die Steuerelemente kommst du nur indem du die Formulare im Entwurf öffnest.
Titel: Re: Navigationsformular: Registerkarten via VBA erstellen
Beitrag von: Beaker s.a. am April 12, 2016, 16:11:06
Moin,
Was ich immer noch nicht verstehe, ist dies:
ZitatAlso nicht für jede Rolle, für neue Formulare, neue Steuerelemente an den Code ran muss. Es soll selbst mit der Datenbank wachsen.
O.K., das es evtl. Mal eine neue Rolle geben könnte, kommt noch an.
Obwohl nach eingehender Analyse der Firmenstruktur sollten die
eigentlich auch klar sein.
Aber IMO hat eine "fertige" Anwendung eine endliche Zahl an Forms
und Controls. D.h. für mich, dass nur die Anzahl der Rollen sich ändern
könnte. Und das zu skalieren ist dann wohl, wie von Maggie angemerkt,
mit einem Kombi am einfachsten zu lösen. Und für die Forms/Controls-
Auflistung hast Du ein Register mit Reitern für jedes vorhandene Form.
gruss ekkehard
Titel: Re: Navigationsformular: Registerkarten via VBA erstellen
Beitrag von: datekk am April 12, 2016, 16:59:55
Ja, Rollen gibt es nicht viele. Derzeit 3 , aber die Datenbank wächst ja auch noch. Und je einfacher das mit den Rollen ist, um so schneller erstellt man dann mal individuellere Rollen.
Titel: Re: Navigationsformular: Registerkarten via VBA erstellen
Beitrag von: Beaker s.a. am April 12, 2016, 17:13:03
Hallo datekk,
Wie gesagt, dann ist ein Kombi zur Auswahl der Rolle das Einfachste. Und nur die Forms auf ein Register-Control.
gruss ekkehard