Eine Datenbank mit Access 2013 richtig entwickeln

Zugriffe auf Benutzerdaten in Funktionen kapseln

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Verschiedene Funktionen ersparen Ihnen nicht nur den wiederholten Zugriff auf die Details einer globalen Variablen, sondern ermöglichen auch die Nutzung innerhalb von Abfragen.

Transkript

Jetzt habe ich hier eine sehr schöne Prozedur, die am Anfang typischerweise einer Sitzung den Benutzer erkennt und in diesen Variablen, in den globalen Variablen ablegt. Aber ich muss ihn natürlich auch irgendwann einmal aufrufen. Und zwar sinnvollerweise da, wo sowieso am Anfang der Datenbank einmal ausgeführt wird, was so zu tun ist. Das ist ja lästigerweise eine function und zwar dieses "StarteDB". Und bevor irgendwas losgeht, werde ich als erstes hingehen und "LadeUser" aufrufen. Das bedeutet, wenn ich das ausgeführt habe, dann weiß ich, wer der Benutzer ist. Ich könnte das zur Not noch in diesem Steuerungsformular anzeigen. Das möchte ich einmal testen. Sie können sogar schlicht hierhin gehen, mit F5, bevor Sie die Datenbank jetzt wieder schließen müssen, mit F5 die function ausführen. Das kurze Blitzen hat mir gezeigt, das Formular ist geöffnet mit "MoveSize" verschoben worden. Und jetzt mit Strg + "G" frage ich mal einfach ab. Nicht das environ, sondern ich frage mal den Benutzer ab. Hat er mich erkannt? Also die Variable "p_user" irgendwas, Punkt, und die hat eine "Name"-Eigenschaft. Und dann mit dem Return sagt er mir: Aha, ich heiße Lorenz Hölscher. Und das hat er sich offensichtlich aus der Tabelle geholt. Es funktioniert also, aber das Abfragen mit der Variablen und diesem angehängten Punkt, "Name" oder was da sonst als Untervariable dranhängt, ist nicht immer praktisch. Deswegen baue ich mir direkt passend dazu Ich kann das hier schon mal schließen, ein paar kleine Hilfsfunktionen. Die müssen dann natürlich auch hier stehen. Mir ein wenig Abstand hier. Zum Beispiel eine function "UserIstAdmin" - das werde ich häufiger fragen - und die gibt ein Boolean zurück. Und ist im einfachsten Fall so gestrickt, dass ich sage "UserIstAdmin" ist diese globale Variable "p_user" irgendwas, Punkt, "IstAdmin" und reicht das sozusagen nur über eine function nach draußen. Soweit alles perfekt. Ich kann das unten abfragen: Bin ich ein Admin? "UserIstAdmin". Anständigerweise Klammern, denn es ist eine function. Ud er sagt mir "Wahr", ja, bin ich. Allerdings gibt es häufiger Gelegenheiten, wo ich den User darüber informieren sollte. Wenn er versucht irgendetwas auzuführen, würde ich gerne ohne weiteren Aufwand dafür sorgen, dass er eine Rückmeldung kriegt: Das darf ich nicht, weil ich kein Admin bin. Deswegen möchte ich einen Parameter übergeben können. Also zum Beispiel - das würde ich dann aber saubererweise so "booMitMeldung As Boolean" - dass ich sagen kann, möchte ich denn eine Meldung vergeben? Ich möchte jetzt also hier einfach eine Meldung machen. "if" der kein Admin ist, also "if not UserIstAdmin", "And MitMeldung", also nur dann wenn er einen Fehler gemacht hat, - er versucht was auszuführen aber ist kein Admin - und trotzdem eine Meldung erhalten soll, dann mache ich auch die Meldung. Die ist ganz banal eine Messagebox: "Sie haben leider keine Admin-Rechte". Dann muss ich das nicht jedes Mal einzeln vereinbaren. mit einem "vbCritical" und das soll soweit erstmal reichen. Das Ärgerliche dabei ist nur... Soweit ist das erstmal in Ordnung, das will ich kurz testen. Also jetzt ein "false". Gibt keine Meldung. In "true" allerdings auch keine. Und zwar einfach deswegen, weil ich Admin bin. Aber ich möchte die Meldung unterdrücken können. Aber ich möchte nicht jedes Mal das "false" und "true" schreiben müssen. Deswegen gebe ich jetzt einen optionalen Parameter mit. "optional BooMitMeldung As Boolean" und vergebe direkt einen Wert, nämlich "As true". Wenn ich nichts dagegen tue, wird immer eine Meldung kommen, jedenfalls wenn es mir an einem Recht mangelt. Das Recht muss ich mir kurz entziehen, also mit Alt + F11 auf kein Admin. Das reicht aber noch nicht, denn das steht ja in einer Variablen. Ich muss also nicht nur den Datensatz ändern, sondern auch das "LadeUser" ausführen. Ich starte einfach hier die Prozedur nochmal. Und jetzt kann ich mich fragen: Bin ich Admin? Da kommt die Meldung, denn ich bin kein Admin mehr. Und ich habe gesagt "true", ich möchte eine Warnung haben. Die stelle ich jetzt auf "false". Und ich bin immer noch falsch. kein Admin, das ist hier zu sehen, aber es gab keine Meldung. Es funktioniert also. Und dieses Konzept will ich für alle drei Rechte machen. Das heißt, ich kann das schlicht kopieren. und statt "UserIstAdmin" - mit Strg + "H" werde ich jetzt hier austauschen - "UserDarfLoeschen". Alles innerhalb der Prozedur austauschen. Und dann natürlich auch an dieser Stelle ein "DarfLoeschen" einsetzen. Und "Sie haben leider keine Loeschen-Rechte". Und das noch ein zweites Mal einfügen. und dieses mal wird "UserIstAdmin" auf "UserDarfNeu" geändert. Wieder aktuelle Prozedur, Alle ersetzen. Nach dem OK können wir hier schließen. Und "Sie haben leider keine "Datensatz", oder vielleicht allgemeiner, "NeuEinfuegen-Rechte". Das können Sie eleganter formulieren, wenn Sie gelegentlich wollen. Und hier natürlich auch abfragen auf "DarfNeu". Also Sie sehen jetzt schon, wenn das einmal funktioniert, - einmal testen reicht im Moment - dann kann ich das für alle Übrigen entsprechend prüfen. Und später, in einer Abfrage zum Beispiel, direkt dafür sorgen, dass ich das als Filter nutzen kann und dort ist es natürlich erst recht wichtig, dass ich so eine Meldung unterdrücken kann mit "false". Jetzt muss ich vor allem daran denken, dass ich mich wieder zum Admin mache. und nicht nur den Datensatz speichere, sondern auch in diesem Fall das "LadeUser" nochmal ausführe. Das werden Sie beim Testen immer wieder vergessen. So dass ich jetzt also, wenn ich mich prüfe, "UserIstADmin(true)", - es ist optional, Sie können es also auch weglassen - dann in ich zwar Admin, aber es gibt keine Meldung. Also einmal Return. "Wahr" ich bin Admin, aber ich habe keine Meldung gekriegt. Damit ist auch dieser Bereich abgedeckt. Ich kann also bestimmte Sachen an meinen Benutzer direkt in der function fragen, ohne über diese globale Variable gehen zu müssen. Aber die globale Variable hat all das zwischengespeichert, was ich sonst aus einer Tabelle abfragen müsste.

Eine Datenbank mit Access 2013 richtig entwickeln

Sehen Sie einem erfahrenen Datenbankentwickler über die Schulter und lernen Sie dabei, wie Sie in Access 2013 optimale und perfekt skalierbare Datenbank anlegen und pflegen.

5 Std. 18 min (53 Videos)
Derzeit sind keine Feedbacks vorhanden...

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!