{"id":55000047,"date":"2002-02-01T00:00:00","date_gmt":"2021-02-10T20:05:03","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=47"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Mitarbeiterverwaltung_mit_der_MSDE_Teil_2","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Mitarbeiterverwaltung_mit_der_MSDE_Teil_2\/","title":{"rendered":"Mitarbeiterverwaltung mit der MSDE (Teil 2)"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg04.met.vgwort.de\/na\/d85c7cf552ad48268e94403e516f8389\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Autor: Andr&eacute; Minhorst und Michael Kessel, Duisburg<\/p>\n<p><\/b><\/p>\n<p><b>Eine Datenbank ist pr&auml;destiniert f&uuml;r die Pflege der Informationen &uuml;ber Ihre Mitarbeiter. Sie dient der Speicherung der Mitarbeiterdaten sowie der Daten &uuml;ber deren Besch&auml;ftigungsverh&auml;ltnisse und weiterer Informationen &#8211; wie z. B. der Projekte, an denen sie beteiligt sind. In der Ausgabe 7\/2001 haben Sie im ersten Teil des vorliegenden Beitrags erfahren, wie Sie mit Access Tabellen und deren Beziehungen auf der Basis der MSDE aufbauen k&ouml;nnen, und einige Beispiele f&uuml;r gespeicherte Prozeduren und Trigger kennen gelernt. Nun geht es an das Frontend &#8211; und damit an die Programmierung der Formulare und Berichte.<\/b><\/p>\n<h3>Hinweis<\/h3>\n<p>Der vorliegende Beitrag setzt das Vorhandensein von Access 2000 sowie die Installation der MSDE bzw. des SQL Servers voraus. Wie das funktioniert, erfahren Sie im Beitrag Die Microsoft Data Engine der Ausgabe 1\/2000 von Access im Unternehmen. Sie finden den Beitrag im PDF-Format auf der Heft-CD. <\/p>\n<p>Die Mitarbeiterverwaltung ben&ouml;tigt f&uuml;nf Formulare, von denen zwei allerdings Unterformulare eines weiteren Formulars sind.<\/p>\n<p>Das erste Formular namens frmMitarbeiterAuswahl (siehe Bild 1) dient zur Auswahl des anzuzeigenden Mitarbeiters aus einem Listenfeld. Dabei gibt es noch einige Optionen, mit denen die Auswahl der angezeigten Mitarbeiter eingeschr&auml;nkt werden kann. Von diesem Formular aus kann man Detailinformationen zu dem ausgew&auml;hlten Mitarbeiter aufrufen.<\/p>\n<p>Die Detailinformationen werden in dem Formular frmMitarbeiterDetail angezeigt (siehe Bild 8). Das Formular ist gleichzeitig Hauptformular f&uuml;r zwei Unterformulare.<\/p>\n<p>Das Unterformular sfmMitarbeiterBeschaeftigungen zeigt das aktuelle und ggf. vorherige Besch&auml;ftigungsverh&auml;ltnis des jeweiligen Mitarbeiters an. Das Unterformular namens sfmMitarbeiterProjekte zeigt die aktuellen Projekte eines Mitarbeiters.<\/p>\n<h3>Hinweis<\/h3>\n<p>Regelm&auml;&szlig;igen Lesern von Access im Unternehmen und des Praxishandbuchs Access sind die meisten der nachfolgend beschriebenen Techniken zur Erstellung von Formularen, Unterformularen und deren Steuerelementen bekannt. Daher wird verst&auml;rkt auf solche Techniken eingegangen, bei denen es Unterschiede zwischen herk&ouml;mmlichen Access-Datenbanken und Access-Projekten gibt. <\/p>\n<p>Das Formular zur Anzeige der Mitarbeiterdetails soll wie in Bild 1 aussehen. Es beinhaltet vier Schaltfl&auml;chen, ein Kontrollk&auml;stchen, zwei Textfelder und ein Listenfeld.<\/p>\n<p>Legen Sie am besten zun&auml;chst ein neues Formular mit den entsprechenden Steuerelementen an und bezeichnen Sie die Steuerelemente wie in Tab. 1 angegeben. Speichern Sie es anschlie&szlig;end unter dem Namen frmMitarbeiterAuswahl.<\/p>\n<p><IMG height=\"357\" src=\"..\/fileadmin\/_temp_\/{E7582F63-C97C-484C-A33D-41471748A31A}\/pic001.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1:  Das fertige Formular zur Verwaltung der Mitarbeiter<\/span><\/b><\/p>\n<table border=1>\n<tr>\n<td>\n<p><b>Steuerelementname<\/b><\/p>\n<\/td>\n<td>\n<p><b>Steuerelement bezeichnung<\/b><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>cmdNeuerMitarbeiter<\/p>\n<\/td>\n<td>\n<p>Neuer Mitarbeiter<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>cmdMitarbeiterLoeschen<\/p>\n<\/td>\n<td>\n<p>Mitarbeiter l&ouml;schen<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>cmdBeschaeftigungLoeschen<\/p>\n<\/td>\n<td>\n<p>Besch&auml;ftigung l&ouml;schen<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>cmdListeDrucken<\/p>\n<\/td>\n<td>\n<p>Aktuelle Liste drucken<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>ctlAlle<\/p>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>txtEintrittVon<\/p>\n<\/td>\n<td>\n<p>Eintritt von:<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>txtEintrittBis<\/p>\n<\/td>\n<td>\n<p>Eintritt bis:<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>lstMitarbeiter<\/p>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<\/table>\n<p><b>Tab. 1: Steuerelemente des Formulars frmMitarbeiterAuswahl<\/b><\/p>\n<p><b>Die Steuerelemente zur Filterung der Datensatzherkunft des Listenfeldes<\/b><\/p>\n<p>Um den Rahmen des vorliegenden Beitrags nicht zu sprengen, soll der Inhalt des Listenfeldes nur nach zwei Kriterien gefiltert werden. Das erste Argument liefert das Kontrollk&auml;stchen ctlAlle. Es soll festlegen, ob alle Besch&auml;ftigungsverh&auml;ltnisse aller Mitarbeiter oder nur aktuelle Besch&auml;ftigungsverh&auml;ltnisse angezeigt werden sollen. <\/p>\n<p>Au&szlig;erdem soll der Benutzer den Zeitraum des Starts des Besch&auml;ftigungsverh&auml;ltnisses eingeben k&ouml;nnen. Dazu dienen die beiden Textfelder txtEintrittVon und txtEintrittBis.<\/p>\n<p><b>Die Schaltfl&auml;chen zum Ausl&ouml;sen weiterer Aktionen<\/b><\/p>\n<p>Das Formular enth&auml;lt vier Schaltfl&auml;chen. Die Schaltfl&auml;chen dienen zum Anlegen eines neuen Mitarbeiters, zum L&ouml;schen eines Mitarbeiters oder eines Besch&auml;ftigungsverh&auml;ltnisses sowie zum Drucken einer Liste mit den aktuell ausgew&auml;hlten Mitarbeitern bzw. Besch&auml;ftigungsverh&auml;ltnissen.<\/p>\n<p>Die Beschreibung der Funktionalit&auml;t der Schaltfl&auml;chen folgt im Anschluss an die Beschreibung des Listenfeldes. <\/p>\n<p><b>Das Listenfeld lstMitarbeiter<\/b><\/p>\n<p>Kernst&uuml;ck des Formulars ist das Listenfeld. Es dient prim&auml;r zur Anzeige der Mitarbeiter. Au&szlig;erdem kann der Benutzer per Doppelklick auf einen Eintrag des Listenfeldes die Detailinformationen eines Mitarbeiters in einem weiteren Formular anzeigen.<\/p>\n<p>W&auml;hrend es bei Access-Datenbanken leicht ist, den Inhalt eines Listenfeldes entsprechend bestimmter Auswahlkriterien zu filtern, ist dies bei Access-Projekten in Zusammenarbeit mit der MSDE oder dem SQL Server etwas komplizierter.<\/p>\n<p>Sie k&ouml;nnen zwar einfach eine entsprechende SQL-Anweisung zusammensetzen und als Datensatzherkunft des Listenfeldes angeben. Dies geht allerdings zu Lasten der Performance, da die Abfrage jedes Mal neu kompiliert und an den SQL Server geschickt werden muss.<\/p>\n<p>Um die Performance bei der Abfrage der gew&uuml;nschten Daten zu erh&ouml;hen, sollten Sie die Abfrage m&ouml;glichst auf dem SQL Server ausf&uuml;hren. F&uuml;r einfache Abfragen verwenden Sie einfach eine Sicht. Diese hilft aber nicht mehr weiter, wenn die Abfrage die Verwendung von Parametern erfordert. Daher verwenden Sie eine gespeicherte Prozedur.<\/p>\n<p><IMG height=\"530\" src=\"..\/fileadmin\/_temp_\/{E7582F63-C97C-484C-A33D-41471748A31A}\/pic002.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2:  Die gespeicherte Prozedur procLstMitarbeiter<\/span><\/b><\/p>\n<p><IMG height=\"146\" src=\"..\/fileadmin\/_temp_\/{E7582F63-C97C-484C-A33D-41471748A31A}\/pic003.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3:  Ergebnis einer gespeicherten Prozedur<\/span><\/b><\/p>\n<h3>Datensatzherkunft des Listenfeldes<\/h3>\n<p>An das Listenfeld sollen drei Parameter &uuml;bergeben werden: Der Wert des Kontrollk&auml;stchens ctlAlle sowie die Inhalte der beiden Textfelder txtEintrittVon und txtEintrittBis.<\/p>\n<p>Eine gespeicherte Prozedur (siehe Bild 2) soll die &uuml;bergebenen Parameter auswerten und das Ergebnis als Datensatzherkunft des Listenfeldes zur&uuml;ckgeben.<\/p>\n<p>Die gespeicherte Prozedur verwendet drei Parameter. Der Parameter @Alle hat den Datentyp Integer. Der Hintergrund ist die unterschiedliche Anwendung von Ja\/Nein-Werten in Access-Datenbanken und im SQL Server. W&auml;hrend es in Access-Datenbanken die Werte 0 (Falsch), -1 (Wahr) und NULL gibt, verwendet der Datentyp BIT des SQL Servers lediglich die Werte 1 (Wahr) und 0 (Falsch). <\/p>\n<p>Die gespeicherte Prozedur besteht aus einer IF-Abfrage, die den Inhalt der Variablen @Alle &uuml;berpr&uuml;ft. Falls vom Formular der Wert 0 &uuml;bergeben wird, sollen nur diejenigen Besch&auml;ftigungsverh&auml;ltnisse zur&uuml;ckgegeben werden, deren Austrittsdatum den Wert NULL hat.<\/p>\n<p>Die beiden Parameter @EintrittVon und @EintrittBis dienen der Einschr&auml;nkung der Datens&auml;tze nach dem Eintrittsdatum.<\/p>\n<p>Sie enthalten jeweils einen Standardwert. Die Standardwerte kommen zum Einsatz, falls die entsprechenden Textfelder keinen Inhalt haben und damit keine Parameter &uuml;bergeben werden.<\/p>\n<h3>Testen der Datensatzherkunft<\/h3>\n<p>Nachdem Sie die gespeicherte Prozedur eingegeben haben, k&ouml;nnen Sie direkt mit einem Test beginnen (vorausgesetzt, Sie haben bereits einige Daten f&uuml;r die beiden Tabellen tblMitarbeiter und tblBeschaeftigungen eingegeben): Starten Sie einfach einmal die Prozedur per Doppelklick auf ihren Namen im Datenbankfenster.<\/p>\n<p>Daraufhin erscheinen nacheinander drei Eingabefenster, die zur Abfrage der drei Parameter dienen. Nach der Eingabe der Parameter erscheint das Ergebnis der Abfrage (siehe Bild 3).<\/p>\n<pre>Sub ListeAktualisieren()\r\n    Dim Parameter As String\r\n    Parameter = \"@Alle = \" & Me.ctlAlle\r\n    Parameter = Parameter & IIf(IsNull(Me.txtEintrittVon), \"\", \", @EintrittVon = ''\" _        & Me.txtEintrittVon & \"''\")\r\n    Parameter = Parameter & IIf(IsNull(Me.txtEintrittBis), \"\", \", @EintrittBis = ''\" _        & Me.txtEintrittBis & \"''\")\r\n    Me.lstMitarbeiter.RowSource = \"EXEC procLstMitarbeiter \" & Parameter\r\n    Me.lstMitarbeiter.Requery\r\nEnd Sub<\/pre>\n<p><b>Quellcode 1<\/b><\/p>\n<p><b>Funktionalit&auml;t der Steuerelemente<\/b><\/p>\n<p>In den n&auml;chsten Abschnitten erfahren Sie, wie Sie das Listenfeld mit den Ergebnissen der gespeicherten Prozedur f&uuml;llen und wie Sie der gespeicherten Prozedur die erforderlichen Parameter &uuml;bergeben.<\/p>\n<h3>Die Prozedur ListeAktualisieren<\/h3>\n<p>Die Prozedur aus Quellcode 1 dient der Aktualisierung des Listenfeldes. Sie setzt einen String zusammen, der den Namen der gespeicherten Prozedur procLstMitarbeiter sowie die entsprechenden Parameter enth&auml;lt.<\/p>\n<p>Die Parameter enthalten die Werte der Steuerelemente ctlAlle, txtEintrittVon und txtEintrittBis. Die Parameter @EintrittVon und @EintrittBis fallen weg, wenn die entsprechenden Textfelder leer sind. In dem Fall verwendet die gespeicherte Prozedur die im Deklarationsteil angegebenen Standardwerte (siehe Bild 2).<\/p>\n<p>Die Prozedur legen Sie im Modul des Formulars frmMitarbeiterAuswahl an. Um das Modul zu &ouml;ffnen, aktivieren Sie die Entwurfsansicht des Formulars und verwenden den Men&uuml;befehl Ansicht\/Code. Daraufhin &ouml;ffnet sich das entsprechende Modul.<\/p>\n<p>Anschlie&szlig;end m&uuml;ssen Sie daf&uuml;r sorgen, dass diese Prozedur auch ausgel&ouml;st wird. Das soll beim &ouml;ffnen des Formulars sowie nach der Aktualisierung der drei Steuerelemente ctlAlle, txtEintrittVon und txtEintrittBis passieren.<\/p>\n<p>Dazu legen Sie jeweils eine neue Prozedur f&uuml;r das Ereignis Beim &ouml;ffnen des Formulars sowie f&uuml;r das Ereignis Nach Aktualisierung der drei anderen Steuerelemente an und geben als einzigen Befehl den folgenden Ausdruck an:<\/p>\n<pre>ListeAktualisieren<\/pre>\n<p>Weitere Informationen zum Anlegen einer Ereignisprozedur finden Sie im Beitrag Anlegen von Ereignisprozeduren im vorliegenden Heft. <\/p>\n<p>Geben Sie au&szlig;erdem f&uuml;r die Eigenschaft Standardwert des Kontrollk&auml;stchens den Wert 0 an.<\/p>\n<p>Anschlie&szlig;end k&ouml;nnen Sie direkt die neuen Funktionen ausprobieren, indem Sie das Formular speichern und anschlie&szlig;end in der Formularansicht &ouml;ffnen. Das Ergebnis sieht nun wie in Bild 4 aus. Leider entspricht dies aber nicht dem gew&uuml;nschten Ergebnis.<\/p>\n<p>Sie k&ouml;nnen jedoch mit drei kleinen &auml;nderungen am Listenfeld nachhelfen:<\/p>\n<li>Geben Sie f&uuml;r die Eigenschaft Spaltenanzahl den Wert 8 ein.<\/li>\n<li>Stellen Sie in der Eigenschaft Spaltenbreiten die gew&uuml;nschte Breite der Spalten ein, z. B. auf den Wert 1cm; 2cm; 2cm; 2cm; 2cm; 2cm; 2cm; 0cm.<\/li>\n<li>Setzen Sie die Eigenschaft Spalten&uuml;berschriften auf den Wert Ja.<\/li>\n<p>Ein erneuter Wechsel in die Formularansicht l&auml;sst das Ergebnis direkt freundlicher aussehen (siehe Bild 5).<\/p>\n<p><b>Funktionalit&auml;t der Schaltfl&auml;chen<\/b><\/p>\n<p><IMG height=\"340\" src=\"..\/fileadmin\/_temp_\/{E7582F63-C97C-484C-A33D-41471748A31A}\/pic004.png\" width=\"484\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4:  Das Listenfeld zeigt nicht die erwarteten Daten an.<\/span><\/b><\/p>\n<p><IMG height=\"324\" src=\"..\/fileadmin\/_temp_\/{E7582F63-C97C-484C-A33D-41471748A31A}\/pic005.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5:  Das Listenfeld mit funktionierender Anzeige<\/span><\/b><\/p>\n<p>Nun widmen Sie sich der Funktionalit&auml;t der Schaltfl&auml;chen. Dazu legen Sie f&uuml;r jede Schaltfl&auml;che eine eigene Ereignisprozedur an, die in den folgenden Abschnitten beschrieben wird.<\/p>\n<pre>Private Sub cmdNeuerMitarbeiter_Click()\r\n    DoCmd.OpenForm \"frmMitarbeiterDetail\", , , , acFormAdd, acDialog\r\n    Me.lstMitarbeiter.Requery\r\nEnd Sub<\/pre>\n<p><b>Quellcode 2<\/b><\/p>\n<h3>Neuer Mitarbeiter<\/h3>\n<p>Die Schaltfl&auml;che cmdNeuerMitarbeiter soll das Formular frmMitarbeiterDetail &ouml;ffnen, das weiter unten beschrieben wird. In Quellcode 2 finden Sie die dazu notwendige Ereignisprozedur.<\/p>\n<p>Sie verwenden in der Prozedur die Konstante acFormAdd f&uuml;r den Parameter DataMode, damit das aufgerufene Formular nur zur Eingabe verwendet werden kann.<\/p>\n<p>Der Wert acDialog f&uuml;r den Parameter WindowMode bewirkt, dass die Ausf&uuml;hrung aller anderen Aktivit&auml;ten unterbrochen wird, bis der Anwender das aufgerufene Formular wieder schlie&szlig;t.<\/p>\n<p>Um die Schaltfl&auml;che zu testen, k&ouml;nnen Sie auf die Schnelle ein leeres Formular namens frmMitarbeiterDetail erstellen.<\/p>\n<p>Durch Bet&auml;tigen der Schaltfl&auml;che k&ouml;nnen Sie das neue Formular &ouml;ffnen. Nach dem Schlie&szlig;en des Formulars kehren Sie automatisch wieder zum aufrufenden Formular zur&uuml;ck.<\/p>\n<h3>Mitarbeiter l&ouml;schen<\/h3>\n<p>Die Schaltfl&auml;che cmdMitarbeiterLoeschen soll das L&ouml;schen des aktuell im Listenfeld markierten Mitarbeiters bewirken. Dazu legen Sie f&uuml;r die Ereigniseigenschaft Beim Klicken die Prozedur aus Quellcode 3 an.<\/p>\n<pre>Private Sub cmdMitarbeiterLoeschen_Click()\r\n    If MsgBox(\"Mitarbeiter und verkn&uuml;pfte Besch&auml;ftigungen l&ouml;schen\", _\r\n        vbExclamation + vbOKCancel, \"Mitarbeiter l&ouml;schen\") = vbOK Then\r\n        Dim con As ADODB.Connection\r\n        Set con = CurrentProject.Connection\r\n        con.Execute \"procMitarbeiterLoeschen \" & Me.lstMitarbeiter\r\n        Set con = Nothing\r\n        Me.lstMitarbeiter.Requery\r\n    Else\r\n        Exit Sub\r\n    End If\r\nEnd Sub<\/pre>\n<p><b>Quellcode 3<\/b><\/p>\n<p>Die Prozedur fragt zun&auml;chst ab, ob der ausgew&auml;hlte Datensatz auch tats&auml;chlich gel&ouml;scht werden soll. Falls ja, f&uuml;hrt die Abfrage eine gespeicherte Prozedur zum L&ouml;schen des Datensatzes durch. Der Text der gespeicherten Prozedur zum L&ouml;schen des gew&uuml;nschten Datensatzes ist in Quellcode 4 enthalten.<\/p>\n<pre>Alter Procedure procMitarbeiterLoeschen (@Mitarbeiternummer INT)\r\nAs\r\n    set nocount on\r\n    DELETE FROM dbo.tblMitarbeiter\r\n    WHERE MitarbeiterID =         @Mitarbeiternummer\r\n    return<\/pre>\n<p><!--30percent--><\/p>\n<p><b>Quellcode 4<\/b><\/p>\n<p>Die VBA-Prozedur &uuml;bergibt dabei die Datensatznummer des entsprechenden Mitarbeiters an die gespeicherte Prozedur.<\/p>\n<p>M&ouml;glicherweise fragen Sie sich, was mit den Eintr&auml;gen der Tabelle tblBeschaeftigungen passiert, die mit dem gel&ouml;schten Mitarbeiter verkn&uuml;pft sind. Diese k&ouml;nnen ja eigentlich ebenfalls entfernt werden, da keine passenden Mitarbeiterdaten mehr vorhanden sind.<\/p>\n<p>Im ersten Teil des vorliegenden Beitrags in Ausgabe 7\/2001 haben Sie bereits einen Trigger erstellt, der dieses Problem l&ouml;st. Dieser Trigger l&ouml;scht alle Datens&auml;tze der Tabelle tblBeschaeftigungen, die zum gel&ouml;schten Mitarbeiter geh&ouml;ren.<\/p>\n<h3>Besch&auml;ftigung l&ouml;schen<\/h3>\n<p>M&ouml;glicherweise m&ouml;chten Sie einmal nicht die kompletten Mitarbeiterdaten, sondern nur die Daten zu einem Besch&auml;ftigungsverh&auml;ltnis l&ouml;schen. In dem Fall verwenden Sie die Schaltfl&auml;che mit der Beschriftung Besch&auml;ftigung l&ouml;schen.<\/p>\n<p>Die Vorgehensweise ist prinzipiell mit der beim L&ouml;schen eines Mitarbeiters vergleichbar. Allerdings kann es vorkommen, dass Sie auf diese Weise alle Besch&auml;ftigungsverh&auml;ltnisse eines Mitarbeiters l&ouml;schen und dieser dann nicht mehr im Listenfeld angezeigt wird.<\/p>\n<p>Daher soll die Anwendung &#8211; falls nur ein Besch&auml;ftigungsverh&auml;ltnis f&uuml;r den Mitarbeiter vorhanden ist &#8211; den Benutzer fragen, ob der Mitarbeiter direkt mitgel&ouml;scht werden soll.<\/p>\n<p>Der Nebeneffekt dieser Mehrarbeit ist, dass Sie direkt lernen, eine gespeicherte Prozedur mit R&uuml;ckgabeparameter zu erstellen.<\/p>\n<p>Der Ablauf beim L&ouml;schen der Besch&auml;ftigung sieht folgenderma&szlig;en aus: Zun&auml;chst w&auml;hlt der Benutzer das zu l&ouml;schende Besch&auml;ftigungsverh&auml;ltnis aus und bet&auml;tigt die entsprechende Schaltfl&auml;che.<\/p>\n<p>Die dadurch ausgel&ouml;ste Prozedur &uuml;berpr&uuml;ft, ob es noch weitere Besch&auml;ftigungsverh&auml;ltnisse zu dem  entsprechenden Mitarbeiter gibt. Falls ja, fragt sie den Benutzer, ob direkt der komplette Mitarbeiterdatensatz gel&ouml;scht werden soll.<\/p>\n<h3>Gespeicherte Prozedur mit R&uuml;ckgabeparameter<\/h3>\n<pre>Alter Procedure procBeschaeftigungenZaehlen (@BeschaeftigungID INT, \r\n@AnzahlBeschaeftigungen INT OUTPUT)\r\nAs\r\nDECLARE @MitarbeiterID INT\r\nSELECT @MitarbeiterID = MitarbeiterID \r\nFROM tblBeschaeftigungen \r\nWHERE BeschaeftigungID = @BeschaeftigungID\r\nSELECT * \r\nFROM tblBeschaeftigungen \r\nWHERE MitarbeiterID = @MitarbeiterID\r\nSELECT @AnzahlBeschaeftigungen = @@ROWCOUNT\r\nreturn <\/pre>\n<p><b>Quellcode 5<\/b><\/p>\n<pre>Public Function AnzahlBeschaeftigungen _    (BeschaeftigungID As Integer)\r\n    Dim cnn As ADODB.Connection\r\n    Dim cmd As ADODB.Command\r\n    Dim prm As ADODB.Parameter\r\n    Set cnn = CurrentProject.Connection\r\n    Set cmd = New ADODB.Command\r\n    cmd.CommandText = \"procBeschaeftigungenZaehlen\"\r\n    cmd.CommandType = adCmdStoredProc\r\n    cmd.ActiveConnection = cnn\r\n    Set prm = cmd.CreateParameter(\"@BeschaeftigungID\", _        adInteger, adParamInput)\r\n    prm.Value = BeschaeftigungID\r\n    cmd.Parameters.Append prm\r\n    Set prm = cmd.CreateParameter _        (\"@AnzahlBeschaeftigungen\", adInteger, _        adParamOutput)\r\n    cmd.Parameters.Append prm\r\n    cmd.Execute\r\n    AnzahlBeschaeftigungen = _        cmd.Parameters(\"@AnzahlBeschaeftigungen\")\r\nEnd Function<\/pre>\n<p><b>Quellcode 6<\/b><\/p>\n<p>Sie ben&ouml;tigen eine gespeicherte Prozedur zur Ermittlung der Anzahl der Besch&auml;ftigungen des Mitarbeiters (s. Quellcode 5). Die Prozedur enth&auml;lt die zwei Parameter @Beschaeftigung und @AnzahlBeschaeftigungen. Der zweite Parameter wird durch das angeh&auml;ngte Schl&uuml;sselwort OUTPUT als R&uuml;ckgabeparameter deklariert.<\/p>\n<p>Nach der Deklaration des Hilfsparameters @MitarbeiterID wird diesem in einer Abfrage die MitarbeiterID des Mitarbeiters zugewiesen, zu dem das zu l&ouml;schende Besch&auml;ftigungsverh&auml;ltnis geh&ouml;rt.<\/p>\n<p>In einer zweiten Abfrage werden alle Datens&auml;tze der Tabelle tblBeschaeftigungen ermittelt, die zu diesem Mitarbeiter geh&ouml;ren. Hinter dem Ausdruck @@ROWCOUNT verbirgt sich eine der vielen eingebauten SQL-Funktionen. Diese ermittelt die Anzahl der Datens&auml;tze des aktuellen Abfrageergebnisses und weist sie dem R&uuml;ckgabeparameter @AnzahlBeschaeftigungen zu.<\/p>\n<h3>Aufruf einer gespeicherten Prozedur mitR&uuml;ckgabeparametern<\/h3>\n<p>Die Funktion zum Aufruf der gespeicherten Prozedur und zum Auslesen des R&uuml;ckgabeparameters finden Sie in Quellcode 6.<\/p>\n<p>Um der gespeicherten Prozedur den Eingabeparameter zu &uuml;bergeben und den R&uuml;ckgabeparameter zu ermitteln, verwenden Sie ein Command-Objekt mit einer Parameters-Auflistung.<\/p>\n<p>Nach der Deklaration und dem Erstellen der Objekte werden zun&auml;chst die Eigenschaften des Command-Objektes wie die auszuf&uuml;hrende Prozedur und ihre Art festgelegt. Anschlie&szlig;end erstellt man die zwei ben&ouml;tigten Parameter und f&uuml;gt sie der Parameters-Auflistung des Command-Objektes zu. Nach der Ausf&uuml;hrung des Command-Objektes kann der R&uuml;ckgabeparameter leicht aus der Parameters-Auflistung ausgelesen werden.<\/p>\n<pre>Private Sub cmdBeschaeftigungLoeschen_Click()\r\n    If MsgBox(\"L&ouml;schen best&auml;tigen mit OK.\", vbExclamation + vbOKCancel, _        \"Besch&auml;ftigung l&ouml;schen\") = vbOK Then\r\n        Dim con As ADODB.Connection\r\n        Set con = CurrentProject.Connection\r\n        If AnzahlBeschaeftigungen(Me.lstMitarbeiter.Column(7)) = 1 Then\r\n            If MsgBox(\"Es gibt keine weiteren Besch&auml;ftigungsverh&auml;ltnisse. \" _            & \"M&ouml;chten Sie, dass auch die Mitarbeiterdaten gel&ouml;scht werden\", _            vbExclamation + vbOKCancel, \"Mitarbeiter l&ouml;schen\") = vbOK Then\r\n                con.Execute \"procMitarbeiterLoeschen \" & Me.lstMitarbeiter\r\n                Set con = Nothing\r\n                Me.lstMitarbeiter.Requery\r\n            Else\r\n                con.Execute \"procBeschaeftigungLoeschen \" & _                    Me.lstMitarbeiter.Column(7)\r\n                Set con = Nothing\r\n                Me.lstMitarbeiter.Requery\r\n            End If\r\n        Else\r\n            con.Execute \"procBeschaeftigungLoeschen \" & Me.lstMitarbeiter.Column(7)\r\n            Set con = Nothing\r\n            Me.lstMitarbeiter.Requery\r\n        End If\r\n    Else\r\n        Exit Sub\r\n    End If\r\nEnd Sub<\/pre>\n<p><b>Quellcode 7<\/b><\/p>\n<pre>Private Sub cmdMitarbeiterliste_Click()\r\n    DoCmd.OpenReport \"repMitarbeiterliste\", acViewPreview\r\nEnd Sub<\/pre>\n<p><b>Quellcode 8<\/b><\/p>\n<p>Schlie&szlig;lich fehlt noch die Ereignisprozedur f&uuml;r die Schaltfl&auml;che cmbBeschaeftigungLoeschen (s. Quellcode 7). Die Prozedur fragt zun&auml;chst, ob die Besch&auml;ftigung auch wirklich gel&ouml;scht werden soll. Falls ja, &uuml;berpr&uuml;ft sie die Anzahl der vorhandenen Besch&auml;ftigungen f&uuml;r den aktuellen Mitarbeiter. Falls es nur eine Besch&auml;ftigung gibt, fragt die Prozedur zus&auml;tzlich, ob der komplette Mitarbeiterdatensatz gel&ouml;scht werden soll, und f&uuml;hrt die gew&uuml;nschte Aktion durch.<\/p>\n<h3>Mitarbeiterliste drucken<\/h3>\n<p>Das Drucken der Mitarbeiterliste soll durch Bet&auml;tigung der Schaltfl&auml;che cmdListeDrucken ausgel&ouml;st werden. Dazu ist die Ereignisprozedur aus Quellcode 8 erforderlich.<\/p>\n<pre>Private Sub lstMitarbeiter_DblClick(Cancel As Integer)\r\n    DoCmd.OpenForm \"frmMitarbeiterDetail\", acNormal, , \"[MitarbeiterID] = \" _        & Me.lstMitarbeiter, acFormEdit\r\n    Me.lstMitarbeiter.Requery\r\nEnd Sub<\/pre>\n<p><b>Quellcode 9<\/b><\/p>\n<h3>Hinweis<\/h3>\n<p>Die Erstellung eines entsprechenden Berichts erfolgt erst in einer der folgenden Ausgaben von Access im Unternehmen. Sie sollten die Schaltfl&auml;che trotzdem schon erstellen, um zu gegebener Zeit den entsprechenden Bericht anzeigen zu k&ouml;nnen. <\/p>\n<p><b>Anzeigen der Mitarbeiterdetails<\/b><\/p>\n<p>Eine der wichtigsten Funktionen ist die Anzeige der Details des ausgew&auml;hlten Mitarbeiters. Die Anzeige soll durch einen Doppelklick auf den gew&uuml;nschten Mitarbeiter im Listenfeld erfolgen. Dazu hinterlegen Sie die Prozedur aus Quellcode 9 f&uuml;r die Ereigniseigenschaft Beim Doppelklicken des Listenfeldes. Die Anzeige erfolgt in einem weiteren Formular namens frmMitarbeiterDetail. Damit das Formular den richtigen Datensatz anzeigt, &uuml;bergeben Sie als Filterkriterium die Mitarbeiternummer des im Listenfeld ausgew&auml;hlten Mitarbeiters.<\/p>\n<p><b>Alternative zum Listenfeld:Mitarbeiter per Unterformular<\/b><\/p>\n<p>Bei fast allen Dingen, die Sie mit Access erledigen k&ouml;nnen, gibt es unterschiedliche Vorgehensweisen. F&uuml;r die Anzeige und Auswahl der Mitarbeiter haben Sie in den vorhergehenden Abschnitten mit dem Listenfeld sicher eine recht komplizierte Methode kennen gelernt. Die Aktualisierung des Inhalts eines Listenfeldes ist auch keinesfalls trivial &#8211; zumindest nicht in einem Access-Projekt und mit einer gespeicherten Prozedur als Datensatzherkunft.<\/p>\n<p>Technisch ist es einfacher, wenn Sie statt eines Listenfeldes ein Unterformular verwenden w&uuml;rden. Allerdings verzichten Sie damit auf einige Vorteile des Listenfeldes:<\/p>\n<p>Es verleitet den Benutzer z. B. nicht dazu, direkt an Ort und Stelle Daten ver&auml;ndern zu wollen, anstatt den Datensatz im Detailformular anzuzeigen. Das ist n&auml;mlich in Access-Projekten nicht so einfach m&ouml;glich &#8211; zumindest, wenn die Datenherkunft aus mehr als einer Tabelle besteht. Au&szlig;erdem erm&ouml;glicht es die einfache Anzeige der Datens&auml;tze im Detailformular per Doppelklick und es sieht in vielen F&auml;llen &uuml;bersichtlicher aus.<\/p>\n<p>Dennoch soll hier kurz die alternative Verwendung eines Unterformulars beschrieben werden. Dazu erstellen Sie zun&auml;chst unter dem Namen frmMitarbeiterAuswahl2 eine Kopie des Formulars frmMitarbeiterAuswahl. L&ouml;schen Sie anschlie&szlig;end das Listenfeld aus dem Formular.<\/p>\n<p>Erstellen Sie ein neues Unterformular namens sfmMitarbeiterAuswahl2. Legen Sie als Datenherkunft genau wie beim Listenfeld die gespeicherte Prozedur procLstMitarbeiter fest.<\/p>\n<p>Das Formular soll als Standardansicht den Wert Datenblatt erhalten. Ziehen Sie die Felder wie in Bild 6 in den Detailbereich des Formulars. <\/p>\n<p><IMG height=\"279\" src=\"..\/fileadmin\/_temp_\/{E7582F63-C97C-484C-A33D-41471748A31A}\/pic006.png\" width=\"298\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6:  Das Unterformular sfmMitarbeiterAuswahl2<\/span><\/b><\/p>\n<p>Der wichtigste Schritt steht allerdings noch bevor: Sie m&uuml;ssen festlegen, woher die gespeicherte Prozedur ihre Parameter bezieht. Im Falle des Listenfeldes haben Sie die gespeicherte Prozedur direkt mit angeh&auml;ngten Parametern aufgerufen.<\/p>\n<pre>@Alle =forms!frmMitarbeiterAuswahl2!ctlAlle,\r\n@EintrittVon = IIf(IsNull(Forms!frmMitarbeiterAuswahl2!txtEinstellungVon);''1.1.1950'';Forms!frmMitarbeiterAuswahl2!txtEinstellungVon),\r\n@EintrittBis = IIf(Isnull(Forms!frmMitarbeiterAuswahl2!txtEinstellungBis);''1.1.2050'';Forms!frmMitarbeiterAuswahl2!txtEinstellungBis)<\/pre>\n<p><b>Quellcode 10<\/b><\/p>\n<p>Wenn Sie eine gespeicherte Prozedur als Datenherkunft eines Formulars oder Berichtes verwenden, geht dies noch einfacher: Benutzen Sie einfach die Eigenschaft Eingabeparameter des Formulars. Hier k&ouml;nnen Sie den Parametern die entsprechenden Steuerelemente des Hauptformulars zuweisen, aus denen die ben&ouml;tigten Werte zu entnehmen sind. Im vorliegenden Fall sieht das beispielsweise wie in Quellcode 10 aus.<\/p>\n<p>Wie Sie sehen, erfolgt an einigen Stellen eine Abfrage, ob die Steuerelemente den Wert NULL haben. Ist das der Fall, wird statt des Steuerelementinhalts ein alternatives Datum &uuml;bergeben, z. B. 01.01.1950 als @EintrittVon.<\/p>\n<p><IMG height=\"352\" src=\"..\/fileadmin\/_temp_\/{E7582F63-C97C-484C-A33D-41471748A31A}\/pic007.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 7:  Die Mitarbeiterauswahl per Unterformular <\/span><\/b><\/p>\n<p>Damit &uuml;bergehen Sie die in der gespeicherten Prozedur angegebenen Standardwerte. Diese werden n&auml;mlich nur verwendet, wenn die entsprechenden Parameter nicht im Aufruf der gespeicherten Prozedur enthalten sind. <\/p>\n<p>Wenn Sie nun das Unterformular in das Hauptformular ziehen und noch einige Sch&ouml;nheitsoperationen vornehmen, erhalten Sie ein Formular wie in Bild 7.<\/p>\n<p>Um das Unterformular statt des Listenfeldes zu verwenden, m&uuml;ssten Sie nun noch einige Prozeduren anpassen. Da dies den Rahmen sprengen w&uuml;rde und die Verwendung des Listenfeldes ohnehin sinnvoller ist, soll hier auf die Beschreibung der notwendigen Schritte verzichtet werden.<\/p>\n<p>Das Formular zur Anzeige der Mitarbeiterdetails hat zwei Aufgaben: Die Eingabe neuer Mitarbeiter sowie das Anzeigen und Bearbeiten bestehender Mitarbeiter.<\/p>\n<p>Es besteht aus einigen Text- und Kombinationsfeldern zur Charakterisierung des Mitarbeiters sowie aus einem Registersteuerelement, in dem sich zwei Registerseiten zur Aufnahme zweier Unterformulare befinden.<\/p>\n<p>Das Unterformular sfmMitarbeiterBeschaeftigungen zeigt alle vorhergehenden und aktuellen Besch&auml;ftigungen des ausgew&auml;hlten Mitarbeiters an. Hier kann der Benutzer bestehende Daten einsehen und bearbeiten sowie die Daten zu neuen Besch&auml;ftigungsverh&auml;ltnissen eingeben. Es handelt sich hierbei um die Realisierung einer 1:n-Beziehung zwischen den Tabellen tblMitarbeiter und tblBeschaeftigungen.<\/p>\n<p><IMG height=\"538\" src=\"..\/fileadmin\/_temp_\/{E7582F63-C97C-484C-A33D-41471748A31A}\/pic008.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 8:  Das Formular zur Detailansicht von Mitarbeitern<\/span><\/b><\/p>\n<p>Das Unterformular sfmMitarbeiterProjekte dient der Anzeige aller Projekte eines Mitarbeiters.<\/p>\n<p>Im Gegensatz zur Beziehung zwischen Mitarbeitern und Besch&auml;ftigungen k&ouml;nnen Sie hier nicht nur jedem Mitarbeiter n verschiedene Projekte zuweisen. Jedes dieser n Projekte k&ouml;nnen Sie auch jedem der m vorhandenen Mitarbeiter zuordnen. Daher ist hier die Verwendung einer m:n-Beziehung erforderlich.<\/p>\n<p><b>Das HauptformularfrmMitarbeiterDetail<\/b><\/p>\n<p>Das Aussehen des Hauptformulars k&ouml;nnen Sie Bild 8 entnehmen. Die Tabelle tblMitarbeiter dient als Datenherkunft. Normalerweise sollten Sie hier auch eine gespeicherte Prozedur zur &uuml;bertragung des ausgew&auml;hlten Datensatzes verwenden, anstatt die komplette Tabelle vom Server zu &uuml;bertragen. Im vorliegenden Fall soll die Performance aber ausnahmsweise einmal vernachl&auml;ssigt werden.<\/p>\n<p>In Access-Tabellen k&ouml;nnen Sie Nachschlagefelder f&uuml;r die Auswahl von Daten verkn&uuml;pfter Tabellen verwenden. Wenn Sie ein solches Feld in einem Formular benutzen, erstellt Access automatisch ein Kombinationsfeld. In Access-Projekten im Zusammenspiel mit dem SQL Server gibt es keine Nachschlagefelder.<\/p>\n<p>Daher m&uuml;ssen Sie selbst Hand anlegen, um beispielsweise aus dem Feld Geschlecht ein Kombinationsfeld zur Auswahl des gew&uuml;nschten Eintrags aus der Tabelle tblGeschlecht zu erm&ouml;glichen. Gehen Sie dazu folgenderma&szlig;en vor:<\/p>\n<li>Klicken Sie mit der rechten Maustaste auf das Textfeld, um das Kontextmen&uuml; zu &ouml;ffnen.<\/li>\n<li>W&auml;hlen Sie aus dem Kontextmen&uuml; den Eintrag &auml;ndern zu ( Kombinationsfeld aus.<\/li>\n<li>W&auml;hlen Sie als Datenherkunft des Kombinationsfeldes die Tabelle tblGeschlecht aus.<\/li>\n<li>Stellen Sie die Eigenschaften Spaltenanzahl auf den Wert 2 und die Eigenschaft Spaltenbreite auf den Wert 0cm ein.<\/li>\n<p>Fertig! Wiederholen Sie den Vorgang f&uuml;r die anderen verkn&uuml;pften Felder Titel, Briefanrede und Textanrede und verwenden Sie die entsprechenden Tabellen als Datenherkunft.<\/p>\n<pre>Private Sub cmdZurueckZurAuswahl_Click()\r\n    If Nz(Me.Nachname, \"\") = \"\" Or Nz(Me.Vorname, \"\") = \"\" Then\r\n        MsgBox \"Sie m&uuml;ssen zumindest den Vor- und den Nachnamen angeben.\", _            vbExclamation + vbOKOnly, \"Fehlende Daten\"\r\n        Exit Sub\r\n    End If\r\n    DoCmd.RunCommand acCmdSaveRecord\r\n    Dim cnn As ADODB.Connection\r\n    Dim rstBeschaeftigungen As New ADODB.Recordset\r\n    Set cnn = CurrentProject.Connection\r\n    rstBeschaeftigungen.Open \"tblBeschaeftigungen\", cnn, adOpenDynamic, _        adLockOptimistic\r\n    rstBeschaeftigungen.Filter = \"[MitarbeiterID] = \" & Me.MitarbeiterID\r\n    If rstBeschaeftigungen.RecordCount = 0 Then\r\n        MsgBox \"Bitte geben Sie die Daten f&uuml;r die aktuelle Besch&auml;ftigung an.\"\r\n        Exit Sub\r\n    End If\r\n    DoCmd.Close acForm, Me.Name\r\nEnd Sub<\/pre>\n<p><b>Quellcode 11<\/b><\/p>\n<h3>Das Registersteuerelement<\/h3>\n<p>Legen Sie im unteren Bereich des Formulars ein Registersteuerelement mit zwei Seiten an. Geben Sie den beiden Seiten die Namen Angaben zum Besch&auml;ftigungsverh&auml;ltnis und Projekte des Mitarbeiters.<\/p>\n<h3>Hinweis<\/h3>\n<p>Weitere Informationen zu Registersteuerelementen finden Sie in [Access im Unternehmen, Ausgabe 3\/2001]. <\/p>\n<p>In den Abschnitten 3.2 und 3.3 erfahren Sie, wie die einzuf&uuml;genden Unterformulare sowie die weiteren Steuerelemente aussehen.<\/p>\n<h3>Schaltfl&auml;che zum &uuml;bernehmen der &auml;nderungen<\/h3>\n<p>Im oberen Bereich des Formulars legen Sie zwei Schaltfl&auml;chen an: eine zum &uuml;bernehmen der &auml;nderungen und eine zum Abbrechen.<\/p>\n<p>Die erste erh&auml;lt die Beschriftung Zur&uuml;ck zur Auswahl und den Namen cmdZurueckZurAuswahl, die zweite die Beschriftung Abbrechen und den Namen cmdAbbrechen.<\/p>\n<p>Legen Sie f&uuml;r die Schaltfl&auml;che cmdZurueckZurAuswahl die Prozedur aus Quellcode 11 an.<\/p>\n<p>Die Prozedur &uuml;berpr&uuml;ft zun&auml;chst, ob zumindest der Vor- und der Nachname des Mitarbeiters angegeben sind. Weitere Pflichtfelder k&ouml;nnen Sie nach Belieben vorsehen.<\/p>\n<p>Anschlie&szlig;end speichert sie den Datensatz und &uuml;berpr&uuml;ft, ob ein Besch&auml;ftigungsverh&auml;ltnis f&uuml;r den Mitarbeiter vorhanden ist bzw. angelegt wurde. Falls dies nicht der Fall ist, muss der Benutzer zun&auml;chst ein neues Besch&auml;ftigungsverh&auml;ltnis anlegen.<\/p>\n<h3>Schaltfl&auml;che zum Abbrechen der Eingabe<\/h3>\n<p>Eine weitere Schaltfl&auml;che dient dem Abbrechen eines Eingabevorgangs. Bezeichnen Sie die Schaltfl&auml;che mit Abbrechen und geben Sie ihr den Namen cmdAbbrechen. Legen Sie f&uuml;r die Ereigniseigenschaft Beim Klicken die Prozedur aus Quellcode 12 an.<\/p>\n<pre>Private Sub cmdAbbrechen_Click()\r\n    If IsNull(Me.MitarbeiterID) Then\r\n        Me.Undo\r\n    End If\r\n    DoCmd.Close acForm, Me.Name\r\nEnd Sub<\/pre>\n<p><b>Quellcode 12<\/b><\/p>\n<p><IMG height=\"336\" src=\"..\/fileadmin\/_temp_\/{E7582F63-C97C-484C-A33D-41471748A31A}\/pic009.png\" width=\"341\" border=\"0\"><\/p>\n<p><b>Die Prozedur &uuml;berpr&uuml;ft, ob das Feld MitarbeiterID noch den Wert NULL hat. Das w&uuml;rde bedeuten, dass der Datensatz noch nicht gespeichert wurde. Per Me.Undo werden anschlie&szlig;end alle Eingaben r&uuml;ckg&auml;ngig gemacht und mit der DoCmd.Close-Anweisung das Formular geschlossen.<\/b><\/p>\n<p>Der Datensatz wird prinzipiell erst gespeichert, wenn eines der Unterformulare aktiviert wird oder wenn der Anwender den Datensatz auf eine andere Art speichert. Weiter unten finden Sie eine M&ouml;glichkeit, die Abbrechen-Schaltfl&auml;che zu deaktivieren, wenn ein Unterformular aktiviert und damit der Datensatz des Hauptformulars gespeichert wird.<\/p>\n<p><IMG height=\"249\" src=\"..\/fileadmin\/_temp_\/{E7582F63-C97C-484C-A33D-41471748A31A}\/pic010.png\" width=\"368\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 9:  Das Unterformular sfmMitarbeiterBeschaeftigungen<\/span><\/b><\/p>\n<p>Wenn der Eingabevorgang dann r&uuml;ckg&auml;ngig gemacht werden soll, muss der Anwender die entsprechenden Daten im Formular frmMitarbeiterAuswahl l&ouml;schen.<\/p>\n<p>Wenn Sie umfangreiche Eingaben, die sich &uuml;ber Formulare und Unterformulare erstrecken, r&uuml;ckg&auml;ngig machen m&ouml;chten, sollten Sie die Daten der Formulare in tempor&auml;ren Tabellen speichern und erst nach dem Schlie&szlig;en des Hauptformulars in die eigentlichen Tabellen schreiben. <\/p>\n<p><b>Das Unterformular sfmMitarbeiterBeschaeftigungen<\/b><\/p>\n<p>Weisen Sie der Datenherkunft eines neuen Unterformular namens sfmMitarbeiterBeschaeftigungen die Tabelle tblBeschaeftigungen zu.<\/p>\n<p>Ziehen Sie die Felder wie in Bild 9 in den Detailbereich des Formulars. Stellen Sie dann die Eigenschaft Standardansicht auf den Wert Datenblatt ein.<\/p>\n<p>F&uuml;gen Sie das Formular anschlie&szlig;end als Unterformular in die erste Registerseite des Registers ein.<\/p>\n<h3>Hinweis<\/h3>\n<p>Weitere Informationen hierzu finden Sie im Beitrag Einbinden von Unterformularen in Hauptformulare im vorliegenden Heft. <\/p>\n<p>Damit direkt nach dem Neuanlegen eines Besch&auml;ftigungsverh&auml;ltnisses auch automatisch das durch den Insert-Trigger angelegte Austrittsdatum eines eventuell bestehenden und nicht abgeschlossenen Besch&auml;ftigungsverh&auml;ltnisses angezeigt wird, legen Sie noch eine Ereignisprozedur f&uuml;r die Eigenschaft Nach Aktualisierung des Unterformulars an:<\/p>\n<pre>Private Sub Form_AfterUpdate()\r\n    Me.Requery\r\nEnd Sub\r\nPrivate Sub sfmMitarbeiterBeschaeftigungen_Enter()\r\n    Me.cmdAbbrechen.Enabled = False\r\nEnd Sub<\/pre>\n<p><b>Quellcode 13<\/b><\/p>\n<pre>SELECT tblMitarbeiterProjekte.MitarbeiterID, \r\n    tblMitarbeiterProjekte.ProjektID, \r\n    tblProjekte.Projektbezeichnung, \r\n    tblProjekte.ProjektStart, \r\n    tblProjekte.ProjektEnde\r\nFROM tblProjekte INNER JOIN\r\n    tblMitarbeiterProjekte ON \r\n    tblProjekte.ProjektID = \r\n    tblMitarbeiterProjekte.ProjektID<\/pre>\n<p><b>Quellcode 14<\/b><\/p>\n<p><IMG height=\"249\" src=\"..\/fileadmin\/_temp_\/{E7582F63-C97C-484C-A33D-41471748A31A}\/pic011.png\" width=\"368\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 10:  Das Unterformular sfmMitarbeiterProjekteDetail<\/span><\/b><\/p>\n<p>Wenn der Benutzer das Unterformular aktiviert, speichert er automatisch den Datensatz des Hauptformulars ab. <\/p>\n<p>Ein Abbruch der Eingabe durch den Benutzer kann dann nicht mehr ohne Weiteres erfolgen. Legen Sie daher f&uuml;r die Ereigniseigenschaft Beim Hingehen des Unterformularsteuerelements (nicht des Unterformulars selbst!) die Prozedur aus Quellcode 13 an.<\/p>\n<p>Die Prozedur deaktiviert die Abbrechen-Schaltfl&auml;che des Hauptformulars. Legen Sie eine solche Prozedur auch f&uuml;r das Unterformular sfmMitarbeiterProjekteDetail an.<\/p>\n<p><b>Das UnterformularsfmMitarbeiterProjekteDetail<\/b><\/p>\n<p>Weisen Sie der Datenherkunft des Unterformulars zur Anzeige der Projekte eines Mitarbeiters die SQL-Abfrage aus Quellcode 14 zu.<\/p>\n<p>Ziehen Sie anschlie&szlig;end die Felder aus der Feldliste wie in Bild 10 in den Detailbereich und stellen Sie auch hier die Eigenschaft Standardansicht auf den Wert Datenblatt ein.<\/p>\n<p>Speichern Sie das Formular und f&uuml;gen Sie es der zweiten Seite des Registers im Hauptformular hinzu.<\/p>\n<p>Im Gegensatz zum ersten Unterformular wird diesmal keine automatische Verkn&uuml;pfung zwischen Haupt- und Unterformular hergestellt. Tragen Sie also manuell den Wert MitarbeiterID f&uuml;r die Eigenschaften Verkn&uuml;pfen Von und Verkn&uuml;pfen Nach des Unterformularsteuerelements ein.<\/p>\n<p><b>Das Problem der eindeutigenTabelle<\/b><\/p>\n<p>Unter Access bedeutet es kein Problem, die Datenherkunft aus mehreren Tabellen zu verwenden und auch noch deren Inhalte zu ver&auml;ndern. <\/p>\n<p>In Access-Projekten ist dies nicht mehr so einfach. Hier kann maximal der Inhalt einer Tabelle ge&auml;ndert werden.<\/p>\n<p>In den bisherigen Beispielen bestand die Datenherkunft jeweils aus nur einer Tabelle, aber im Unterformular sfmMitarbeiterProjekteDetail besteht die Datenherkunft aus zwei Tabellen.<\/p>\n<pre>Private Sub cmdNeuesProjekt_Click()\r\n    DoCmd.OpenForm \"frmNeuesProjekt\", , , , acFormAdd, acDialog\r\n    Me.sfmMitarbeiterProjekteDetail.Requery\r\nEnd Sub<\/pre>\n<p><b>Quellcode 15<\/b><\/p>\n<p>Um einem Mitarbeiter eines der bestehenden Projekte zuordnen zu k&ouml;nnen, m&uuml;ssen Sie die Eigenschaft Eindeutige Tabelle des Formulars auf den Namen der Tabelle einstellen, die Sie ver&auml;ndern m&ouml;chten.<\/p>\n<p>In dem Fall handelt es sich um die Tabelle tblMitarbeiterProjekte, denn Sie m&ouml;chten neue Datens&auml;tze hinzuf&uuml;gen, um dem ausgew&auml;hlten Mitarbeiter neue Projekte zuordnen zu k&ouml;nnen. Sie k&ouml;nnen allerdings keine Details des Projektes &auml;ndern.<\/p>\n<p>Damit Sie &uuml;ber das Feld ProjektID komfortabel weitere Projekte f&uuml;r den Mitarbeiter ausw&auml;hlen k&ouml;nnen, wandeln Sie es in ein Kombinationsfeld mit der Tabelle tblProjekte als Datensatzherkunft um.<\/p>\n<p>Au&szlig;erdem legen Sie f&uuml;r die Ereigniseigenschaft Nach Aktualisierung des neuen Kombinationsfeldes die folgende Prozedur an:<\/p>\n<pre>Private Sub ProjektID_AfterUpdate()\r\n    Me.Requery\r\nEnd Sub<\/pre>\n<p>Die Prozedur dient lediglich der Aktualisierung der &uuml;brigen Felder des Unterformulars.<\/p>\n<p>Zum Anlegen komplett neuer Projekte ben&ouml;tigen Sie ein weiteres Formular, dessen Aufbau Sie bitte der Beispieldatenbank entnehmen.<\/p>\n<p>Um dieses Formular anzuzeigen, verwenden Sie eine weitere Schaltfl&auml;che, die Sie im Kopf der zweiten Seite des Registers oberhalb des Unterformulars sfmMitarbeiterProjekteDetail anlegen. Beschriften Sie die Schaltfl&auml;che mit Neues Projekt anlegen und geben Sie ihr den Namen cmdNeuesProjekt.<\/p>\n<p>F&uuml;r die Ereigniseigenschaft Beim Klicken hinterlegen Sie die Prozedur aus Quellcode 15.<\/p>\n<p>Die Prozedur &ouml;ffnet das Formular frmNeuesProjekt zum Anlegen neuer Projekte und aktualisiert nach dem Schlie&szlig;en dieses Formulars das Unterformular zur Auswahl der Projekte eines Mitarbeiters.<\/p>\n<p>Der vorliegende Beitrag kann auf keinen Fall einen kompletten &uuml;berblick &uuml;ber die Verwendung von Formularen in Access-Projekten bieten. <\/p>\n<p>Er soll vielmehr einige der Techniken vorstellen, die f&uuml;r die Gestaltung von Formularen in Datenbanken auf MSDE- oder SQL-Server-Basis verwendet werden.<\/p>\n<p>Nachdem Sie nun im ersten Teil einiges &uuml;ber das Erstellen von Tabellen, Sichten, gespeicherte Prozeduren und Datenbankdiagramme erfahren und im vorliegenden Beitrag Informationen zum Umgang mit Formularen in Access-Projekten erhalten haben, werden Sie in den folgenden Ausgaben Gelegenheit bekommen, die Mitarbeiterverwaltung weiter auszubauen.<\/p>\n<p>Der n&auml;chste Schritt wird in einem der folgenden Hefte die Erstellung von Berichten zur Ausgabe von Mitarbeiterlisten und von Datenbl&auml;ttern einzelner Mitarbeiter sein.<\/p>\n<p>In Ausgabe 7\/2001 von Access im Unternehmen finden Sie eine Anleitung zur Installation der Beispieldateien des vorgestellten Access-Projekts.<\/p>\n<p>Sie k&ouml;nnen diese  Anleitung auch f&uuml;r die aktuelle Version der Dateien verwenden.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>Mitarbeiterverwaltung00.mdb<\/p>\n<p>Skript.sql<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/8473E256-61AB-4216-880E-105A35D7D88C\/aiu_47.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eine Datenbank ist pr&auml;destiniert f&uuml;r die Pflege der Informationen &uuml;ber Ihre Mitarbeiter. Sie dient der Speicherung der MItarbeiterdaten sowie der Daten &uuml;ber deren Besch&auml;ftigungsverh&auml;ltnisse und weiterer Informationen &#8211; wie z.B. der Projekte, an denen sie beteiligt sind. In der Ausgabe 7\/2001 haben Sie im ersten Teil des vorliegenden Beitrags erfahren, wie Sie mit Access Tabellen und deren Beziehungen auf der Basis der MSDE aufbauen k&ouml;nnen, und einige Beispiele f&uuml;r gespeicherte Prozeduren und Trigger kennengelernt. Nun geht es an das Frontend &#8211; und damit an die Programmierung der Formulare und Berichte.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[66012002,662002,44000027,44000022],"tags":[],"class_list":["post-55000047","post","type-post","status-publish","format-standard","hentry","category-66012002","category-662002","category-Loesungen","category-SQL_Server_und_Co"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Mitarbeiterverwaltung mit der MSDE (Teil 2) - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Mitarbeiterverwaltung_mit_der_MSDE_Teil_2\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Mitarbeiterverwaltung mit der MSDE (Teil 2)\" \/>\n<meta property=\"og:description\" content=\"Eine Datenbank ist pr&auml;destiniert f&uuml;r die Pflege der Informationen &uuml;ber Ihre Mitarbeiter. Sie dient der Speicherung der MItarbeiterdaten sowie der Daten &uuml;ber deren Besch&auml;ftigungsverh&auml;ltnisse und weiterer Informationen - wie z.B. der Projekte, an denen sie beteiligt sind. In der Ausgabe 7\/2001 haben Sie im ersten Teil des vorliegenden Beitrags erfahren, wie Sie mit Access Tabellen und deren Beziehungen auf der Basis der MSDE aufbauen k&ouml;nnen, und einige Beispiele f&uuml;r gespeicherte Prozeduren und Trigger kennengelernt. Nun geht es an das Frontend - und damit an die Programmierung der Formulare und Berichte.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Mitarbeiterverwaltung_mit_der_MSDE_Teil_2\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-10T20:05:03+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg04.met.vgwort.de\/na\/d85c7cf552ad48268e94403e516f8389\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"26\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mitarbeiterverwaltung_mit_der_MSDE_Teil_2\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mitarbeiterverwaltung_mit_der_MSDE_Teil_2\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Mitarbeiterverwaltung mit der MSDE (Teil 2)\",\"datePublished\":\"2021-02-10T20:05:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mitarbeiterverwaltung_mit_der_MSDE_Teil_2\\\/\"},\"wordCount\":4594,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mitarbeiterverwaltung_mit_der_MSDE_Teil_2\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg04.met.vgwort.de\\\/na\\\/d85c7cf552ad48268e94403e516f8389\",\"articleSection\":[\"1\\\/2002\",\"2002\",\"L\u00f6sungen\",\"SQL Server und Co.\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Mitarbeiterverwaltung_mit_der_MSDE_Teil_2\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mitarbeiterverwaltung_mit_der_MSDE_Teil_2\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mitarbeiterverwaltung_mit_der_MSDE_Teil_2\\\/\",\"name\":\"Mitarbeiterverwaltung mit der MSDE (Teil 2) - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mitarbeiterverwaltung_mit_der_MSDE_Teil_2\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mitarbeiterverwaltung_mit_der_MSDE_Teil_2\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg04.met.vgwort.de\\\/na\\\/d85c7cf552ad48268e94403e516f8389\",\"datePublished\":\"2021-02-10T20:05:03+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mitarbeiterverwaltung_mit_der_MSDE_Teil_2\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Mitarbeiterverwaltung_mit_der_MSDE_Teil_2\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mitarbeiterverwaltung_mit_der_MSDE_Teil_2\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg04.met.vgwort.de\\\/na\\\/d85c7cf552ad48268e94403e516f8389\",\"contentUrl\":\"http:\\\/\\\/vg04.met.vgwort.de\\\/na\\\/d85c7cf552ad48268e94403e516f8389\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mitarbeiterverwaltung_mit_der_MSDE_Teil_2\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mitarbeiterverwaltung mit der MSDE (Teil 2)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Mitarbeiterverwaltung mit der MSDE (Teil 2) - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Mitarbeiterverwaltung_mit_der_MSDE_Teil_2\/","og_locale":"de_DE","og_type":"article","og_title":"Mitarbeiterverwaltung mit der MSDE (Teil 2)","og_description":"Eine Datenbank ist pr&auml;destiniert f&uuml;r die Pflege der Informationen &uuml;ber Ihre Mitarbeiter. Sie dient der Speicherung der MItarbeiterdaten sowie der Daten &uuml;ber deren Besch&auml;ftigungsverh&auml;ltnisse und weiterer Informationen - wie z.B. der Projekte, an denen sie beteiligt sind. In der Ausgabe 7\/2001 haben Sie im ersten Teil des vorliegenden Beitrags erfahren, wie Sie mit Access Tabellen und deren Beziehungen auf der Basis der MSDE aufbauen k&ouml;nnen, und einige Beispiele f&uuml;r gespeicherte Prozeduren und Trigger kennengelernt. Nun geht es an das Frontend - und damit an die Programmierung der Formulare und Berichte.","og_url":"https:\/\/access-im-unternehmen.de\/Mitarbeiterverwaltung_mit_der_MSDE_Teil_2\/","og_site_name":"Access im Unternehmen","article_published_time":"2021-02-10T20:05:03+00:00","og_image":[{"url":"http:\/\/vg04.met.vgwort.de\/na\/d85c7cf552ad48268e94403e516f8389","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"26\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Mitarbeiterverwaltung_mit_der_MSDE_Teil_2\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Mitarbeiterverwaltung_mit_der_MSDE_Teil_2\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Mitarbeiterverwaltung mit der MSDE (Teil 2)","datePublished":"2021-02-10T20:05:03+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Mitarbeiterverwaltung_mit_der_MSDE_Teil_2\/"},"wordCount":4594,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Mitarbeiterverwaltung_mit_der_MSDE_Teil_2\/#primaryimage"},"thumbnailUrl":"http:\/\/vg04.met.vgwort.de\/na\/d85c7cf552ad48268e94403e516f8389","articleSection":["1\/2002","2002","L\u00f6sungen","SQL Server und Co."],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Mitarbeiterverwaltung_mit_der_MSDE_Teil_2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Mitarbeiterverwaltung_mit_der_MSDE_Teil_2\/","url":"https:\/\/access-im-unternehmen.de\/Mitarbeiterverwaltung_mit_der_MSDE_Teil_2\/","name":"Mitarbeiterverwaltung mit der MSDE (Teil 2) - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Mitarbeiterverwaltung_mit_der_MSDE_Teil_2\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Mitarbeiterverwaltung_mit_der_MSDE_Teil_2\/#primaryimage"},"thumbnailUrl":"http:\/\/vg04.met.vgwort.de\/na\/d85c7cf552ad48268e94403e516f8389","datePublished":"2021-02-10T20:05:03+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Mitarbeiterverwaltung_mit_der_MSDE_Teil_2\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Mitarbeiterverwaltung_mit_der_MSDE_Teil_2\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Mitarbeiterverwaltung_mit_der_MSDE_Teil_2\/#primaryimage","url":"http:\/\/vg04.met.vgwort.de\/na\/d85c7cf552ad48268e94403e516f8389","contentUrl":"http:\/\/vg04.met.vgwort.de\/na\/d85c7cf552ad48268e94403e516f8389"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Mitarbeiterverwaltung_mit_der_MSDE_Teil_2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Mitarbeiterverwaltung mit der MSDE (Teil 2)"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000047","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55000047"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000047\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000047"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000047"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000047"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}