Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Eine Datenbank mit Access 2013 richtig entwickeln

Benutzerdaten in globaler Variable speichern

Testen Sie unsere 2015 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Die Informationen zum Benutzer legen Sie am besten in einem speziellen Datentyp an, der die Zusammenfassung der Daten erleichtert.

Transkript

In der Tabelle "tblUser" sind zwar jetzt alle User enthalten, aber es ist nicht besonders praktisch jedes Mal in voller Ausführlichkeit in dieser Tabelle nachfragen zu müssen, wer da gerade vor dem Bildschirm sitzt. Im Gegenteil. Eigentlich kann das im Laufe der Arbeit nicht wechseln. Sie können beim Öffnen der Datenbank - das heißt mehr oder weniger von diesem Formular aus, denn das wird beim Öffnen der Datenbank geöffnet, oder sagen wir besser in diesem Zusammenhang - können Sie einmal in der Tabelle nachgucken und sich die Werte in einer Variablen zwischenspeichern. Das werde ich jetzt vorbereiten, also mit Alt + F11 geht es zuerst mal in das Modul "modVarKonstDLL". Dort brauche ich jetzt eine Variable. Und zwar eine Variable, die all dieses Wissen enthalten kann. Deswegen nehme ich keinen normalen Datentyp, der da heißen könnte, String, Integer, Long oder sonst was, sondern ich erfinde erstmal einen neuen Typ. Genauer gesagt ist es kein neuer Typ, auch wenn das so heißt, sondern es ist eigentlich ein zusammengesetzter Typ. Trotzdem heißt das Schlüsselwort "type". Und ich benenne das Objekt dahinter als "typUser" sozusagen. Und "End Type" Das bedeutet hinter dem Datentyp "TypUser" verstecken sich eigentlich ein ganzes Bündel von Untervariablen. Zum Beispiel seine ID. Ein Long-Wert, weil es aus einer AutoWert-Spalte kommt die immer im Long denkt. Dann sein Name "As String". Da nehmen wir dann den kompletten zusammengesetzten Namen. Wenn Sie es mal einzeln brauchen, Vor und Nachname, kann man das hier auch noch erweitern. Sein Login, das ist auch ein String, vielleicht will ich das später nochmal wissen. Und vor allem seine Rechte. "DarfLoeschen As Boolean" "DarfNeu" - und auch gerne Großgeschrieben, das ist ansonsten aber unerheblich - und schließlich "IstAdmin". Das bedeutet, wenn Sie später in der Tabelle ein neues Recht erfinden, müssen Sie daran denken, hier im "Type" eine neue Zeile dazuzuschreiben. Das ist nur ein Type, das heißt, der erfindet einen neuen Datentyp. Und jetzt - das ist wegen der Größe, der fühlt sich größer an als die anderen; schreibe ich es davor - Jetzt muss ich daraus eine Variable machen. zum Beispiel eine allgemeine globale Variable natürlich ein "p_" - public, "user" und ich nenne den einfach "Dieser", dieser Benutzer, "As" und jetzt nenne ich diesen Datentyp "As typUser". Das ist bisher noch recht abstrakt, wenn Sie damit noch nicht gearbeitet haben. Ich will Ihnen ganz kurz hier zeigen, was das für Konsequenzen hat. In einer völlig unerheblichen Prozedur. Ich kann jetzt direkt aufrufen "p_user" irgendwas, und wenn ich jetzt den Punkt mache, kommen genau diese Untervariablen im Angebot. Ich kann also später schreiben "p_userDieser.Name" ist gleich irgendwas. Und das macht es viel eleganter, mit so einem Datentyp umzugehen, - das brauche ich hier in diesem Modul natürlich nicht - so dass Sie nicht jeweils immer den Namen des Benutzers und seine Rechte alle einzeln transportieren müssen. Die sind in Gesamtheit in dieser Variablen enthalten. selbst wenn Sie nur genau eine Ausprägung dieser Variablen für diesen einen Benutzer haben. Also anstatt die Tabelle immer wieder neu zu fragen, sorgen Sie dafür, dass sie einmal gefragt wird und dann deren Wissen in diesen Variablen enthalten ist. Dann muss ich einmal dafür sorgen, dass das aufgerufen wird. Das heißt, eine Prozedur - ich schreibe das mal oben dran - die diesen Benutzer einmal ausliest. Also eine Sub-Prozedur, denn die gibt keinen Wert zurück. Bestenfalls könnte man sagen, vor dem Bildschirm sitzt niemand. Aber das ist mir jetzt zu kompliziert, darauf auch noch zu reagieren. Ich werde also dafür sorgen, dass immer einer gefühlt davor sitzt, schlechtestensfalls ein Gast. Also "Sub LadeUser". Das wird genau einmal später aufgerufen. Dann brauche ich den "Recordset". Ich nenne den einfach nur mal "rcsU", also der User-Recordset. "As DAO Recordset". Und dann öffne ich diese Tabelle, das muss ich nur einmal hier machen. Das ist also von der "currentdb.OpenRecordset" derjenige, der dazu passt. Also "SELECT * FROM" "tblUser WHERE" und jetzt frage ich das User-Login ab. Das soll sein, - Achtung, das ist eine Zeichenkette, deswegen hier mit dem Hochkomma - das soll so sein wie "environ" - das hatten Sie vorhin schon mal gesehen - "Username" Und da muss ich natürlich das Hochkomma wieder zu machen. Semikolon für die Verdeutlichung. Und dann "dbOpenDynaset" als Parameter. Das ist aber nicht so kritisch, denn es kommt eh einer zurück. Und jetzt kann ich mit diesem Recordset arbeiten. Zum Beispiel könnte es sein, dass ich keinen gefunden habe. Also "If" das Ding ein "EOF" zurückliefert, also ich bin "end of file". Ich bin über die letzten Datensätze hinaus, und es war leider keiner dabei. Wenn, habe ich ein Problem, "Else" ist alles in Ordnung. Erstmal so ins Blaue hinein gesprochen. Ich mache erstmal den positiven Fall. Ich habe also einen gefunden. Dann kann ich jetzt also hier hingehen und sagen, für meine Variable "p_user.Dieses" gebe ich zurück deren - fangen wir vielleicht an mit der ID - ist genau das, was in den Fields von dem Recordset in "userID" steht. und deren Value. Also ich speichere in der Untervariablen "ID" das, was beim User-Recordset in dem Feld steht. Und das Muster wird jetzt immer wiederholt. Ich hole mir die einzeln raus. Hier zum Beispiel die "Name"-Eigenschaft ist das, was in "userNameAnzeigen" enthalten ist. Muss ich jetzt einfach nachgucken, mit Strg + Leertaste können Sie hier ausklappen. Dann muss man gucken, dass es ein bisschen sinnvoll ist. ID und Name habe ich. Login zum Beispiel kann ich jetzt abfragen. Login könnte in "Login" stehen, "UserLogin". Es ist ansonsten zwangsläufig identisch mit dem, was ich hier rausbekommen habe. Also es wäre egal, was ich dort ermittle. Dann nicht die ID, sondern jetzt kommen diese Rechte, "DarfLoeschen" "User" - Wenn Sie es gleichnamig machen, können Sie hier ohne viel Nachdenken immer das gleiche reinschreiben. Also der Nächste ist ein "DarfNeu". Auch das. Und es gab noch ein "IstAdmin". Und damit ist der Normalbenutzer sozusagen mit allem ausgestattet. Für den Fall, dass es schiefgegangen ist, kopiere ich mir das jetzt einfach dorthin. Mache zuerst mal eine Meldung. Die sagt so was: "Benutzer mit Login"... Nein, nicht das Login, weil man vielleicht nicht weiß, als was man angemeldet ist. Muss dann natürlich auf diese Funktion verweisen, denn das wird hier alles gleich wegfallen. Der Benutzer mit diesem Login existiert nicht. Das ist mindestens ein "vbCritical"-Wert. Und dann muss ich hier alle Werte mit irgendwelchen Hilfswerten versehen, zum Beispiel die ID ist "0". Wir können auch "-1" sgaen, dann passt das zu den Unternehmen. Der Name ist "Gast". Sein Login können wir übernehmen. Das zumindest weiß ich ja von ihm. Und hier machen wir Nägel mit Köpfen: Der darf nichts. Der wird also konsequent auf "False" gesetzt. Aber im Ergebnis habe ich auf jeden Fall eine Variable mit Inhalten, die immer belegt sind. Schlechtestenfalls mit einem Filter, der mit nicht weiterhilft. Aber ich kann ab jetzt immer anfragen, was dahinter steckt. Hier muss ich jetzt erstmal alles speichern, weil ich an vielen Stellen gearbeitet habe. Das ist die Idee, warum ich die Tabelle übersetze in eine Variable. Die Tabelle könnte ja mit "end of file" sagen: Den habe ich nicht gefunden. Und die Variable behebt dieses Problem, Und ich kann, wenn ich jetzt auf die Variable zugreife erstens immer schneller darauf zugreifen - die ändert sich ja im Laufe der Sitzung nicht - ich bin also viel schneller mit einer einfachen Funktion. Nebenbei werde ich dafür sorgen, dass sie auch noch in Abfragen nutzbar ist, und vor allem, ich kriege garantiert Werte zurück.

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!