Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Navigationsformular: Registerkarten via VBA erstellen

Begonnen von datekk, April 08, 2016, 14:48:51

⏪ vorheriges - nächstes ⏩

datekk

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
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps

Beaker s.a.

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
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

MzKlMu

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 ?
Gruß Klaus

datekk

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
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps

MaggieMay

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.
Freundliche Grüße
MaggieMay

datekk

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 wobei ich allerdings anstatt der farbigen Kreise im Moment dies mit den Zahlen des Sicherheitsleves abdecke.

LG
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps

MzKlMu

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.
Gruß Klaus

datekk

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.
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps

MzKlMu

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.
Gruß Klaus

datekk

Gruppierung nach tblElemente.Formular  ;)

Rolle = Verwaltung

frmPersonal
       Steuerelement_1, nicht anzeigen
       Steuerelement_2, nicht anzeigen

frmVertrieb
       Steuerelement_1, Vollzugriff
       Steuerelement_2, nicht anzeigen

usw.
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps

DF6GL

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




Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

MaggieMay

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.
Freundliche Grüße
MaggieMay

datekk

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?
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps

MaggieMay

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.
Freundliche Grüße
MaggieMay

Beaker s.a.

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
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)