{"id":55000376,"date":"2017-12-01T00:00:00","date_gmt":"2017-12-01T00:00:00","guid":{"rendered":"http:\/\/access-basics.de\/376"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Handyverwaltung_IV_Mobilfunkgeraete_verwalten","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/Handyverwaltung_IV_Mobilfunkgeraete_verwalten.html","title":{"rendered":"Handyverwaltung IV: Mobilfunkger&auml;te verwalten"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg08.met.vgwort.de\/na\/7161b9f0defc49bba62e18094b214688\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p class='introduction'>Im vierten Teil der Artikelreihe zum Thema &#8222;Handyverwaltung&#8220; setzten wir die Arbeit an den Formularen der L&ouml;sung fort. Dieser Teil k&uuml;mmert sich um die Verwaltung der Mobilfunkger&auml;te. Dazu legen wir wieder ein &Uuml;bersichtsformular und ein Detailformular an. Das Detailformular wird etwas anspruchsvoller, da wir darin auch die zum jeweiligen Mobilfunkger&auml;t geh&ouml;rende SIM-Karte verwalten wollen.<\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Artikels finden Sie in der Datenbank <b>1706_Handyverwaltung.accdb<\/b>.<\/p>\n<h2>Vorbereitungen<\/h2>\n<p>Den Teil des Datenmodells, den wir uns in diesem Teil der Artikelreihe ansehen, finden Sie in Bild 1. Diesmal geht es um die Mobilfunkger&auml;te, zu denen ja nicht nur Handys, sondern auch Tablets geh&ouml;ren. Nach aktuellem Stand muss man der Tabelle der Mobilfunkger&auml;tearten (<b>tblMobilfunkgeraetearten<\/b>) ja auch noch Uhren hinzurechnen (Stichwort <b>AppleWatch<\/b>). Dies ist das erste Lookup-Feld, welches wir bei der Eingabe von Mobilfunkger&auml;ten ber&uuml;cksichtigen m&uuml;ssen.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_376_001.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_376_001.png\" alt=\"Der Teil des Datenmodells, um den wir uns in diesem Artikel k&uuml;mmern\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 1: Der Teil des Datenmodells, um den wir uns in diesem Artikel k&uuml;mmern<\/p>\n<p>Die zweite Art von zus&auml;tzlichen Daten betrifft die SIM-Karten, die in den Ger&auml;ten stecken. Hierbei ist zu ber&uuml;cksichtigen, dass es Ger&auml;te gibt, in denen keine SIM-Karte steckt, aber auch SIM-Karten, die in keinem Ger&auml;t stecken. Der Regelfall wird aber sein, dass eine SIM-Karte auch einem Ger&auml;t zugeordnet ist.<\/p>\n<p>Dem tragen wir durch eine Tabelle Rechnung, die wie eine Verkn&uuml;pfungstabelle zur Herstellung einer m:n-Beziehung angezeigt wird und die <b>tblMobilfunkgeraeteSIMKarten <\/b>benannt wird. Aber handelt es sich tats&auml;chlich um eine m:n-Tabelle Immerhin gibt es ja noch eine weitere Einschr&auml;nkung: jede SIM-Karte kann n&auml;mlich nur in einem einzigen Ger&auml;t stecken, und jedes Ger&auml;t kann auch nur eine SIM-Karte aufnehmen. (Ups: Stimmt das wirklich, oder gibt es vielleicht sogar Ger&auml;te, welche mehr als eine SIM-Karte aufnehmen &#8211; etwa, um verschiedene Netze abzudecken Wie auch immer: Wir werden diesen Fall au&szlig;en vor lassen.)<\/p>\n<p>Die Beziehungen zwischen der Tabelle <b>tblMobilfunkgeraeteSIMKarten <\/b>und den Tabellen <b>tblMobilfunkgeraete <\/b>und <b>tblSIMKarten <\/b>sehen im Beziehungen-Fenster wie normale 1:n-Beziehungen aus. Wenn wir allerdings doppelt auf den Beziehungspfeil klicken, erkennen wir beispielsweise im Dialog zum Bearbeiten der Beziehung aus Bild 2, dass hier in der Tat eine 1:1-Beziehung angelegt wurde.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_376_002.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_376_002.png\" alt=\"Die Beziehung wird als 1:1-Beziehung eingetragen.\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 2: Die Beziehung wird als 1:1-Beziehung eingetragen.<\/p>\n<p>Das ist auch kein Wunder, denn wir haben f&uuml;r die beiden Fremdschl&uuml;sselfelder der Verkn&uuml;pfungstabelle, also f&uuml;r <b>MobilfunkgeraetID <\/b>und <b>SIMKarteID<\/b>, nicht etwa einen zusammengesetzten, eindeutigen Index angelegt, sondern jedes Fremdschl&uuml;sselfeld f&uuml;r sich mit einem eindeutigen Index versehen. Deshalb legt Access standardm&auml;&szlig;ig eine 1:1-Beziehung f&uuml;r diese Beziehungen an. Interessant ist jedoch, dass Access diese im Beziehungen-Fenster nicht als 1:1-Beziehung, sondern als 1:n-Beziehungen abbildet.<\/p>\n<h2>Erweiterung des Datenmodells<\/h2>\n<p>Nun, da wir uns dem Formular f&uuml;r die Mobilfunkger&auml;te zuwenden wollen, werfen wir einen genauen Blick auf die Tabelle <b>tblMobilfunkgeraete <\/b>und stellen fest, dass diese doch noch ein wenig mager ausgestattet ist. <b>MobilfunkgeraetID<\/b>, <b>Bezeichnung<\/b>, <b>Anschaffungspreis <\/b>und <b>MobilfunkgeraeteartID <\/b>sind wohl doch etwas wenig Informationen. Als Erstes fehlt uns der Hersteller des Ger&auml;ts. Ist es ein iPhone Ein Samsung Hier stellt sich die allerdings die Frage, ob wir den Hersteller gleich mit den Datens&auml;tzen der Tabelle <b>tblMobilfunkgeraete <\/b>verkn&uuml;pfen wollen. Immerhin gibt es ja auch noch die einzelnen Modelle und Baureihen der verschiedenen Ger&auml;te. Wollen wir also den Hersteller in der Tabelle speichern und auch noch die Angabe des Modells Das macht eigentlich keinen Sinn, denn es gibt ja jedes Modell auch nur von einem Hersteller. Wenn wir dann den Hersteller zu den Modellen speichern und nochmals zu den Mobilfunkger&auml;ten, h&auml;tten wir redundante Daten, die sp&auml;ter zu Inkonsistenzen f&uuml;hren k&ouml;nnten. Dann w&auml;re ein Mobilfunkger&auml;t beispielsweise ein iPhone, aber ein unaufmerksamer Benutzer stellt vielleicht als Hersteller des Ger&auml;ts <b>Samsung<\/b> ein.<\/p>\n<p>Also gehen wir noch einen Schritt weiter und f&uuml;gen der Tabelle <b>tblMobilfunkgeraete <\/b>zun&auml;chst ein Fremschl&uuml;sselfeld namens <b>ModellID <\/b>hinzu, welches seine Daten aus der Tabelle <b>tblModelle <\/b>bezieht. Die Tabelle <b>tblModelle <\/b>wiederum enth&auml;lt beispielsweise Felder mit der Bezeichnung des Modells, der Angabe des Speicherplatzes des Modells und mehr.<\/p>\n<p>Au&szlig;erdem legen wir hier ein Fremdschl&uuml;sselfeld f&uuml;r den Hersteller namens <b>HerstellerID <\/b>an. Den Hersteller wollen wir aus einer Lookup-Tabelle ausw&auml;hlen, die wir zun&auml;chst hinzuf&uuml;gen. Die Tabelle hei&szlig;t <b>tblHersteller <\/b>und enth&auml;lt die Felder <b>HerstellerID<\/b>, <b>Bezeichnung<\/b>,  <b>Webseite<\/b>, <b>EMailSupport <\/b>und <b>TelefonSupport<\/b> &#8211; diese k&ouml;nnen Sie nat&uuml;rlich nach Bedarf erweitern.  F&uuml;r das Feld <b>Bezeichnung <\/b>legen wir einen eindeutigen Index fest (siehe Bild 3).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_376_003.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_376_003.png\" alt=\"Eindeutiger Index f&uuml;r das Feld Bezeichnung\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 3: Eindeutiger Index f&uuml;r das Feld Bezeichnung<\/p>\n<p>Wir k&ouml;nnen der Tabelle auch gleich einige Datens&auml;tze hinzuf&uuml;gen, damit wir etwas Material zum Testen haben (siehe Bild 4).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_376_004.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_376_004.png\" alt=\"Datens&auml;tze der Tabelle tblHersteller\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 4: Datens&auml;tze der Tabelle tblHersteller<\/p>\n<h2>Mobilfunkger&auml;teart verschieben<\/h2>\n<p>Wenn wir schon dabei sind, einen genauen Blick auf das Datenmodell zu werfen, sollten wir auch noch schauen, ob das Fremdschl&uuml;sselfeld <b>MobilfunkgeraeteartID <\/b>wirklich in die Tabelle <b>tblMobilfunkgeraete <\/b>geh&ouml;rt. In der Tat sollten wir es wohl auch in die Tabelle <b>tblModelle <\/b>verschieben, denn sonst h&auml;tten wir das gleiche Problem wie mit den Herstellern &#8211; ein iPhone ist nun einmal ein Smartphone und kein Tablet.<\/p>\n<p>Genau das w&auml;re aber bei fehlerhafter Eingabe in den aktuellen Stand der Tabelle <b>tblMobilfunkgeraete <\/b>eine m&ouml;gliche Kombination. Um uns m&ouml;glichst wenig Arbeit zu machen, nutzen wir die Zwischenablage, um das Feld zu verschieben: Markieren Sie das Feld <b>MobilfunkgeraeteartID <\/b>&uuml;ber den Datensatzmarkierer in der Entwurfsansicht der Tabelle <b>tblMobilfunkgeraete<\/b>, bet&auml;tigen Sie die Tastenkombination <b>Strg + C<\/b>, wechseln Sie zum Entwurf der Tabelle <b>tblModelle <\/b>und f&uuml;gen Sie die Zeile dort nach vorheriger Markierung der Zielzeile mit der Tastenkombination <b>Strg + V <\/b>ein. Dies kopiert das Feld mit allen Eigenschaften, also auch mit den Angaben zum Nachschlagefeld. Sie m&uuml;ssen lediglich im Beziehungen-Dialog die alte Beziehung zwischen der Tabelle <b>tblMobilfunkgeraete <\/b>und <b>tblMobilfunkgeraetearten <\/b>l&ouml;schen, bevor Sie das Feld <b>MobilfunkgeraeteartID <\/b>aus der Tabelle <b>tblMobilfunkgeraete <\/b>entfernen k&ouml;nnen. Anschlie&szlig;end f&uuml;gen Sie die passende Beziehung zwischen dem Feld <b>MobilfunkgeraeteartID <\/b>der Tabelle <b>tblModelle <\/b>und dem gleichnamigen Feld der Tabelle <b>tblMobilfunkgeraetearten <\/b>hinzu.<\/p>\n<p>Der aktuelle Zustand dieses Teils des Datenmodells sieht nun wie in Bild 5 aus.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_376_005.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_376_005.png\" alt=\"Datenmodell der Tabellen rund um die Mobilfunkger&auml;te\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 5: Datenmodell der Tabellen rund um die Mobilfunkger&auml;te<\/p>\n<h2>Hersteller verwalten<\/h2>\n<p>F&uuml;r die Hersteller bauen wir uns ein Haupt- und ein Unterformular, wobei beide Formulare wieder die gleiche Datenherkunft nutzen &#8211; eine Abfrage, welche die Daten der Tabelle <b>tblHersteller <\/b>nach dem Feld <b>Bezeichnung <\/b>sortiert. In diesem Fall haben wir einige Feinheiten eingebaut, durch die der im Haupt- und im Unterformular angezeigte Datensatz synchron gehalten wird. Das hei&szlig;t, wenn Sie im Unterformular zwischen den Datens&auml;tzen navigieren, wird jeweils der passende Datensatz im Hauptformular angezeigt und umgekehrt.<\/p>\n<p>Detailinformationen dazu finden Sie im Artikel <b>Haupt- und Unterformular synchron<\/b>. Das Formular sieht anschlie&szlig;end wie in Bild 6 aus.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_376_006.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_376_006.png\" alt=\"Verwaltung der Hersteller\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 6: Verwaltung der Hersteller<\/p>\n<h2>Formular zur Verwaltung der Mobilfunkger&auml;te<\/h2>\n<p>F&uuml;r die Verwaltung der Mobilfunkger&auml;te wollen wir diesmal wieder ein &Uuml;bersichtsformular erstellen und ein Detailformular zur Anzeige der Einzelheiten der Ger&auml;te. Das &Uuml;bersichtsformular bauen wir als Haupt- und Unterformular auf.<\/p>\n<h2>Das Unterformular sfm-Mobil-funk-geraete-Ueber-sicht<\/h2>\n<p>Das Unterformular <b>sfmMobilfunkgeraeteUebersicht <\/b>verwendet die Abfrage <b>qryMobilfunkgeraeteUebersicht<\/b> als Datenherkunft. Das Unterformular soll alle wichtigen Informationen &uuml;ber das Ger&auml;t anzeigen, also binden wir auch die verkn&uuml;pften Tabellen wie <b>tblModelle<\/b>, <b>tblHersteller <\/b>und <b>tblMobilfunkgeraetearten <\/b>ein. Den Entwurf der Abfrage finden Sie in Bild 7. Da in diesem  Unterformular keine neuen Modelle, Hersteller oder Mobilfunkger&auml;tearten zugewiesen werden sollen, f&uuml;gen wir nicht die Nachschlagefelder der jeweiligen Tabellen hinzu, sondern nur die in den Tabellen enthaltenen Felder. Da wir in den Tabellendefinitionen die Bezeichnungen der enthaltenen Objekte, also etwa in der Tabelle <b>tblMobilfunkgeraete<\/b>, <b>tblModelle <\/b>oder <b>tblHersteller <\/b>auch mit dem Feldnamen <b>Bezeichnung <\/b>versehen haben, f&uuml;gen wir den Feldern im Abfrageentwurf noch eine entsprechende Beschriftung hinzu, die dann beim Hinzuf&uuml;gen der Felder in die jeweiligen Formulare ber&uuml;cksichtigt wird. Dies erledigen wir &uuml;ber die Eigenschaft <b>Beschriftung <\/b>im Eigenschaften-Fenster der entsprechenden Eigenschaft.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_376_007.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_376_007.png\" alt=\"Datenherkunft des Unterformulars sfmMobilfunkgeraeteUebersicht\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 7: Datenherkunft des Unterformulars sfmMobilfunkgeraeteUebersicht<\/p>\n<p>Wenn wir diese Abfrage dem Formular <b>sfmMobilfunkgeraeteUebersicht <\/b>zuweisen und in der Entwurfsansicht die Feldliste einblenden, zeigt diese bei den mehrfach vorkommenden Feldern namens Bezeichnung jeweils zus&auml;tzlich den Tabellennamen an (siehe Bild 8). Wenn wir die Felder jedoch in den Detailbereich des Entwurfs ziehen, werden die Beschriftungen in den Bezeichnungsfeldern entsprechend der in der Eigenschaft <b>Beschriftung <\/b>der Felder der Abfrage angepasst. &Uuml;ber das Unterformular direkt sollen keine Datens&auml;tze bearbeitet, hinzugef&uuml;gt oder gel&ouml;scht werden, daher stellen wir die Eigenschaften <b>Anf&uuml;gen zulassen<\/b>, <b>L&ouml;schen zulassen <\/b>und <b>Bearbeitungen zulassen <\/b>auf den Wert <b>Nein <\/b>ein.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_376_008.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_376_008.png\" alt=\"Hinzuf&uuml;gen der Felder zum Entwurf des Formulars sfmMobilfunkgeraeteUebersicht\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 8: Hinzuf&uuml;gen der Felder zum Entwurf des Formulars sfmMobilfunkgeraeteUebersicht<\/p>\n<p>Wir brauchen nun nur noch die Eigenschaft <b>Standardansicht <\/b>auf den Wert <b>Datenblatt <\/b>einzustellen und k&ouml;nnen das Formular dann speichern und schlie&szlig;en.<\/p>\n<h2>Das Hauptformular frm-Mobil-funk-geraete-Ueber-sicht<\/h2>\n<p>In das Hauptformular <b>frmMobilfunkgeraeteUebersicht <\/b>ziehen wir zun&auml;chst das Unterformular <b>sfmMobilfunkgeraeteUebersicht<\/b>. Dann stellen wir die Eigenschaften <b>Datensatzmarkierer<\/b>, <b>Navigationsschaltfl&auml;chen<\/b>, <b>Trennlinien <\/b>und <b>Bildlaufleisten <\/b>des Formulars auf <b>Nein <\/b>und die Eigenschaft <b>Automatisch zentrieren <\/b>auf <b>Ja <\/b>ein.<\/p>\n<p>Au&szlig;erdem soll das Unterformular-Steuerelement automatisch vergr&ouml;&szlig;ert werden, wenn der Benutzer das Hauptformular vergr&ouml;&szlig;ert. Dazu stellen wir die Eigenschaften <b>Horizontaler Anker <\/b>und <b>Vertikaler Anker <\/b>jeweils auf <b>Beide <\/b>ein. Nicht vergessen, die Eigenschaften f&uuml;r das Bezeichnungsfeld zum Unterformular, die automatisch mit ge&auml;ndert werden, wieder auf <b>Links <\/b>und <b>Oben <\/b>einzustellen! <\/p>\n<p>Au&szlig;erdem f&uuml;gen wir dem Formular drei Schaltfl&auml;chen namens <b>cmdDetailsAnzeigen<\/b>, <b>cmdNeuesGeraet <\/b>und <b>cmdGeraetLoeschen <\/b>hinzu. Der Entwurf des Hauptformulars sieht dann wie in Bild 9 aus.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_376_009.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_376_009.png\" alt=\"Entwurf des Hauptformulars frmMobilfunkgeraeteUebersicht\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 9: Entwurf des Hauptformulars frmMobilfunkgeraeteUebersicht<\/p>\n<p>Die Schaltfl&auml;che <b>cmdDetailsAnzeigen<\/b> ruft die Prozedur aus Listing 1 auf. Diese ermittelt den Prim&auml;rschl&uuml;sselwert des aktuell im Unterformular markierten Datensatzes und ruft dann das Formular <b>frmMobilfunkgeraetDetails <\/b>auf, welches wir im Anschluss erstellen. Als Parameter &uuml;bergeben wir mit der <b>DoCmd.OpenForm<\/b>-Methode unter anderem eine Bedingung, welche festlegt, welchen Datensatz wir im zu &ouml;ffnenden Formular anzeigen wollen. Durch das Setzen des Parameters <b>WindowMode <\/b>auf den Wert <b>acDialog <\/b>wird der Code der aufrufenden Prozedur erst weiter ausgef&uuml;hrt, wenn das ge&ouml;ffnete Formular den Fokus wieder abgibt, also geschlossen oder unsichtbar gemacht wurde.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdDetailsAnzeigen_Click()\r\n     <span style=\"color:blue;\">Dim <\/span>lngMobilfunkgeraetID<span style=\"color:blue;\"> As Long<\/span>\r\n     lngMobilfunkgeraetID = Me!sfmMobilfunkgeraeteUebersicht.Form!MobilfunkgeraetID\r\n     DoCmd.OpenForm \"frmMobilfunkgeraetdetails\", WindowMode:=acDialog, WhereCondition:=\"MobilfunkgeraetID = \" & lngMobilfunkgeraetID\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p class='imagetext'>Listing 1: Anzeigen der Details zu einem Mobilfunkger&auml;t<\/p>\n<p>Die Schaltfl&auml;che <b>cmdNeuesGeraet <\/b>soll beim Anklicken ebenfalls dieses Formular aufrufen, allerdings nicht zur Anzeige eines bestehenden Datensatzes, sondern zum Anlegen eines neuen. Auch hier verwenden wir die Methode <b>DoCmd.OpenForm<\/b>, &uuml;bergeben hier jedoch f&uuml;r den Parameter <b>DataMode <\/b>den Wert <b>acFormAdd<\/b>. Damit zeigt das zu &ouml;ffnende Formular gleich einen neuen, leeren Datensatz an (siehe Listing 2).<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdNeuesGeraet_Click()\r\n     DoCmd.OpenForm \"frmMobilfunkgeraetdetails\", WindowMode:=acDialog, DataMode:=acFormAdd\r\n     Me!sfmMobilfunkgeraeteUebersicht.Form.Requery\r\n     SteuerelementeAktivieren\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p class='imagetext'>Listing 2: Anzeigen des Formulars frmMobilfunkgeraetdetails zum Anlegen eines neuen Ger&auml;ts<\/p>\n<p>Die dritte Schaltfl&auml;che namens <b>cmdGeraetLoeschen<\/b> ruft die Prozedur aus Listing 3 auf. Diese ermittelt die Bezeichnung des zu l&ouml;schenden Ger&auml;tes und schreibt sie in die Variable <b>strGeraet<\/b>. Damit stattet sie die Meldung einer <b>MsgBox<\/b>-Anweisung aus und fragt den Benutzer, ob er das aktuell markierte Ger&auml;t wirklich l&ouml;schen will. Falls ja, ermittelt die Prozedur den Prim&auml;rschl&uuml;sselwert des zu l&ouml;schenden Ger&auml;ts und f&uuml;hrt eine entsprechende <b>DELETE<\/b>-Abfrage mit der <b>Execute<\/b>-Methode des aktuellen <b>Database<\/b>-Objekts aus. Anschlie&szlig;end aktualisiert sie die im Unterformular angezeigten Daten mit der <b>Requery<\/b>-Methode.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdGeraetLoeschen_Click()\r\n     <span style=\"color:blue;\">Dim <\/span>lngMobilfunkgeraetID<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strGeraet<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     strGeraet = Me!sfmMobilfunkgeraeteUebersicht.Form!Bezeichnung\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">MsgBox<\/span>(\"M&ouml;chten Sie das Ger&auml;t '\" & strGeraet & \"' l&ouml;schen\", <span style=\"color:blue;\">vbCr<\/span>itical + vbOKCancel, \"Ger&auml;t l&ouml;schen\") = vbOK<span style=\"color:blue;\"> Then<\/span>\r\n         lngMobilfunkgeraetID = Me!sfmMobilfunkgeraeteUebersicht.Form!MobilfunkgeraetID\r\n         <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n         db.Execute \"DELETE FROM tblMobilfunkgeraete WHERE MobilfunkgeraetID = \" & lngMobilfunkgeraetID, dbFailOnError\r\n         Me!sfmMobilfunkgeraeteUebersicht.Form.Requery\r\n         SteuerelementeAktivieren\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p class='imagetext'>Listing 3: L&ouml;schen des aktuell markierten Mobilfunkger&auml;ts<\/p>\n<h2>Steuer-elemente aktivieren und deaktivieren<\/h2>\n<p>Die Prozedur SteuerelementeAktivieren, die in allen drei erw&auml;hnten Ereignisprozeduren aufgerufen wird, haben wir noch nicht beschrieben. Diese sorgt daf&uuml;r, dass die Schaltfl&auml;chen zum Anzeigen der Details und zum L&ouml;schen des aktuell markierten Elements deaktiviert werden, wenn gar kein Datensatz im Unterformular markiert ist (was aber auch nur dann vorkommt, wenn die Datenherkunft leer ist). <\/p>\n<p>Diese Prozedur finden Sie in Listing 4. Sie pr&uuml;ft mit der <b>RecordCount<\/b>-Eigenschaft des <b>Recordset<\/b>-Objekts des Unterformulars, ob Datens&auml;tze vorhanden sind. Die Variable <b>bolMobilfunkgeraetVorhanden <\/b>wir auf <b>True <\/b>eingestellt, wenn die Anzahl ungleich <b>0 <\/b>ist, sonst auf <b>False<\/b>. Dieser Wert wird dann der Eigenschaft <b>Enabled<\/b> der beiden Schaltfl&auml;chen <b>cmdDetailsAnzeigen <\/b>und <b>cmdMobilfunkgeraet-Loeschen <\/b>zugewiesen, welche dann wie in Bild 10 deaktiviert werden.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_376_010.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_376_010.png\" alt=\"Das Formular frmMobilfunkgeraeteUebersicht in der Formularansicht\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 10: Das Formular frmMobilfunkgeraeteUebersicht in der Formularansicht<\/p>\n<p>Fehlt noch die Prozedur <b>Form_Load<\/b>, die beim Laden des Formulars ausgel&ouml;st wird und die Prozedur <b>SteuerelementeAktivieren <\/b>einmal direkt beim &Ouml;ffnen des Formulars aufruft:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Load()\r\n    SteuerelementeAktivieren\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Das Formular frmMobilfunkgeraetdetails<\/h2>\n<p>Das Formular <b>frmMobilfunkgeraetDetails <\/b>verwendet eine Abfrage basierend auf der Tabelle <b>tblMobilfunkgeraetID <\/b>als Datenherkunft (siehe Bild 11).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_376_011.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_376_011.png\" alt=\"Datenherkunft des Formulars frmMobilfunkgeraetdetails\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 11: Datenherkunft des Formulars frmMobilfunkgeraetdetails<\/p>\n<p>Das Formular selbst zeigt alle Felder dieser Abfrage an und enth&auml;lt zus&auml;tzlich eine Schaltlf&auml;che namens <b>cmdOK <\/b>(siehe Bild 12). Diese ruft die folgende Prozedur auf:<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_376_012.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_376_012.png\" alt=\"Entwurf des Formulars frmMobilfunkgeraetdetails\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 12: Entwurf des Formulars frmMobilfunkgeraetdetails<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdOK_Click()\r\n    DoCmd.Close acForm, Me.Name\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Das in der Tabelle <b>tblMobilfunkgeraete <\/b>als Nachschlagefeld definierte Feld <b>ModellID <\/b>wird hier automatisch als Kombinationsfeld angelegt. F&uuml;r dieses wollen wir nun wiederum ein paar Funktionen hinterlegen &#8211; zum Beispiel, um den aktuellen Eintrag per Doppelklick auf das Kombinationsfeld zu &ouml;ffnen.<\/p>\n<p>Das Kombinationsfeld benennen wir daher zun&auml;chst in <b>cboModellID <\/b>um. Dann legen wir eine Variable fest, mit der wir das zu &ouml;ffnende Formular <b>frmModelldetails <\/b>referenzieren wollen:<\/p>\n<pre><span style=\"color:blue;\">Private <\/span>WithEvents objFrmModelldetails<span style=\"color:blue;\"> As <\/span>Form<\/pre>\n<p>Schlie&szlig;lich f&uuml;gen wir die Prozedur hinzu, die durch das Ereignis <b>Beim Doppelklicken <\/b>des Kombinationsfeldes <b>cboModellID <\/b>ausgel&ouml;st wird:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>ModellID_DblClick(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n    <span style=\"color:blue;\">Dim <\/span>strFormular<span style=\"color:blue;\"> As String<\/span>\r\n    strFormular = \"frmModelldetails\"\r\n    <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> IsNull(Me!cboModellID)<span style=\"color:blue;\"> Then<\/span>\r\n        DoCmd.OpenForm strFormular,                            WhereCondition:=Me!cboModellID\r\n        <span style=\"color:blue;\">Set<\/span> objFrmModelldetails = Forms(strFormular)\r\n        <span style=\"color:blue;\">With<\/span> objFrmModelldetails\r\n            .OnUnload = \"[Event Procedure]\"\r\n            .Modal = <span style=\"color:blue;\">True<\/span>\r\n        End <span style=\"color:blue;\">With<\/span>\r\n    <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Prozedur speichert den Namen des zu &ouml;ffnenden Formulars, also <b>frmModelldetails<\/b>, in der Variablen <b>strFormular<\/b>. Danach pr&uuml;ft sie, ob <b>cboModellID <\/b>&uuml;berhaupt einen Wert enth&auml;lt. Ist dies der Fall, wird dieser beim folgenden Aufruf der <b>DoCmd.OpenForm<\/b>-Methode als Vergleichswert der <b>WhereCondition <\/b>&uuml;bergeben.<\/p>\n<p>Das nun ge&ouml;ffnete Formular weisen wir der Variablen <b>objFrmModelldetails <\/b>zu und stellen dessen Eigenschaft <b>OnUnload <\/b>auf <b>[Event Procedure] <\/b>sowie <b>Modal <\/b>auf <b>True <\/b>ein. Erstere sorgt daf&uuml;r, dass wir das Ereignis <b>Beim Entladen <\/b>im aktuellen Klassenmodul implementieren k&ouml;nnen, zweiteres versetzt das Formular in den modalen Modus, sodass die &uuml;brigen Elemente der Anwendung erst wieder verwendet werden k&ouml;nnen, wenn der Benutzer das Formular <b>frmModelldetails <\/b>wieder geschlossen hat.<\/p>\n<p>Was aber, wenn wir noch gar keine Datens&auml;tze in der Tabelle <b>tblModelle <\/b>eingegeben haben Dann zeigt das Kombinationsfeld <b>cboModellID <\/b>auch noch keine Datens&auml;tze an und ein Doppelklick auf das Kombinationsfeld zeigt auch keine Wirkung, da wir ja auf den Wert <b>Null <\/b>testen.<\/p>\n<p>Also f&uuml;gen wir noch einen Else-Zweig zur Bedingung hinzu und erweitern die Prozedur um eine Funktion zum &Ouml;ffnen des Formulars <b>frmModelldetails <\/b>zum Anlegen eines neuen, leeren Datensatzes. Da dann auf jeden Fall ein Formular ge&ouml;ffnet wird, k&ouml;nnen wir gleichzeitig die &uuml;brigen Anweisungen aus der <b>If&#8230;Then<\/b>-Bedingung herausnehmen:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cboModellID_DblClick(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n    <span style=\"color:blue;\">Dim <\/span>strFormular<span style=\"color:blue;\"> As String<\/span>\r\n    strFormular = \"frmModelldetails\"\r\n    <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> IsNull(Me!cboModellID)<span style=\"color:blue;\"> Then<\/span>\r\n        DoCmd.OpenForm strFormular,              WhereCondition:=\"ModellID = \" & Me!cboModellID\r\n    <span style=\"color:blue;\">Else<\/span>\r\n        DoCmd.OpenForm strFormular, DataMode:=acFormAdd\r\n    <span style=\"color:blue;\">End If<\/span>\r\n    <span style=\"color:blue;\">Set<\/span> objFrmModelldetails = Forms(strFormular)\r\n    <span style=\"color:blue;\">With<\/span> objFrmModelldetails\r\n        .OnUnload = \"[Event Procedure]\"\r\n        .Modal = <span style=\"color:blue;\">True<\/span>\r\n    End <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Das Formular frmModelldetails<\/h2>\n<p>Das so zu &ouml;ffnende Formular <b>frmModelldetails <\/b>verwendet die Tabelle <b>tblModelle <\/b>als Datenherkunft und zeigt alle Felder dieser Tabelle im Detailbereich an (siehe Bild 13). Dieses Formular enth&auml;lt gleich zwei Kombinationsfelder.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_376_013.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_376_013.png\" alt=\"Entwurf des Formulars frmModelldetails\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 13: Entwurf des Formulars frmModelldetails<\/p>\n<p>Eines wollen wir mit dem gleichen Mechanismus ausstatten wie bereits das Kombinationsfeld <b>cboModellID <\/b>im Formular <b>frmMobilfunkgeraetDetails<\/b>. Dazu stellen wir zun&auml;chst die Namen dieser beiden Steuer-elemente auf <b>cboHerstellerID <\/b>und <b>cboGeraeteartID <\/b>ein.<\/p>\n<p>Dann legen wir f&uuml;r das Kombinationsfeld <b>cboHerstellerID <\/b>eine Ereignisprozedur f&uuml;r das Ereignis <b>Beim Doppelklicken <\/b>an. Die Prozedur zum &Ouml;ffnen von <b>frmHersteller<\/b> sieht &auml;hnlich aus wie die vorherige Prozedur:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cboHerstellerID_DblClick(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n    <span style=\"color:blue;\">Dim <\/span>strFormular<span style=\"color:blue;\"> As String<\/span>\r\n    strFormular = \"frmHersteller\"\r\n    <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> IsNull(Me!cboHerstellerID)<span style=\"color:blue;\"> Then<\/span>\r\n        DoCmd.OpenForm strFormular,                              OpenArgs:=Me!cboHerstellerID\r\n    <span style=\"color:blue;\">Else<\/span>\r\n        DoCmd.OpenForm strFormular, OpenArgs:=0\r\n    <span style=\"color:blue;\">End If<\/span>\r\n    <span style=\"color:blue;\">Set<\/span> objFrmHersteller = Forms(strFormular)\r\n    <span style=\"color:blue;\">With<\/span> objFrmHersteller\r\n        .OnUnload = \"[Event Procedure]\"\r\n        .Modal = <span style=\"color:blue;\">True<\/span>\r\n    End <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Allerdings ist das Formular <b>frmHersteller <\/b>daf&uuml;r ausgelegt, eine &Uuml;bersicht der Hersteller im Unterformular anzuzeigen und den aktuell markierten Hersteller im Detailbereich des Hauptformulars. Wir wollen also nicht einfach nur das Formular nach den Herstellern filtern, sondern das Formular mit allen Daten &ouml;ffnen und den im Kombinationsfeld des aufrufenden Formulars gew&auml;hlten Eintrag anzeigen.<\/p>\n<p>Dazu &uuml;bergeben wir die ID dieses Datensatzes per &Ouml;ffnungsargument (<b>OpenArgs<\/b>) an das aufgerufene Formular. Dazu f&uuml;gen wir im Formular <b>frmHersteller <\/b>eine Prozedur f&uuml;r das Ereignis hinzu, dass durch die Ereigniseigenschaft <b>Beim &Ouml;ffnen <\/b>ausgel&ouml;st wird und wie folgt gef&uuml;llt wird:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Open(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n    <span style=\"color:blue;\">If <\/span>Me.OpenArgs > 0<span style=\"color:blue;\"> Then<\/span>\r\n        Me!sfmHersteller.Form.Recordset.FindFirst                          \"HerstellerID = \" & Me.OpenArgs\r\n    <span style=\"color:blue;\">Else<\/span>If Me.OpenArgs = 0 Then\r\n        Me.Bezeichnung.SetFocus\r\n        DoCmd.GoToRecord Record:=acNewRec\r\n    <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Dies zeigt dann direkt den im Kombinationsfeld gew&auml;hlten Eintrag an. Sollte das Kombinationsfeld noch leer sein, verschiebt das Formular den Datensatzzeiger auf einen leeren, neuen Datensatz und setzt den Fokus auf das Textfeld <b>Bezeichnung<\/b>.<\/p>\n<p>Wenn der Benutzer nun einen neuen Datensatz in diesem Formular anlegt oder einen der bestehenden Datens&auml;tze ausw&auml;hlt und das Formular schlie&szlig;t, l&ouml;st dies das Ereignis <b>Beim Entladen <\/b>aus. Dazu haben wir im aufrufenden Formular ja bereits die Eigenschaft <b>OnUnload <\/b>auf den Wert <b>[Event Procedure] <\/b>eingestellt. Nun m&uuml;ssen wir das Ereignis noch implementieren, damit es auch ausgef&uuml;hrt wird, wenn der Benutzer das Formular schlie&szlig;t. Das Ereignis definieren wir wie folgt (um die leere Prozedur anzulegen, w&auml;hlen Sie im linken Kombinationsfeld oben im Code-Fenster der Klasse <b>Form_frmModelldetails <\/b>den Eintrag <b>objFrmHersteller <\/b>und im rechten Kombinationsfeld den Wert <b>Unload <\/b>aus):<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>objFrmHersteller_Unload(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n    Me!cboHerstellerID = objFrmHersteller!HerstellerID\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Wenn das Formular nun geschlossen wird, stellt die Prozedur den Wert des Kombinationsfeldes <b>cboHerstellerID <\/b>auf den Wert des aktuell im Formular <b>frmHersteller<\/b> angezeigten Datensatzes ein. Erst danach wird dieses Formular dann endg&uuml;ltig geschlossen.<\/p>\n<p>Im Detail sieht die Abfolge dann wie in Bild 14 aus. Ein Doppeklick auf das Kombinationsfeld <b>cboModellID<\/b> im Formular <b>frmMobilfunkgeraetdetails <\/b>&ouml;ffnet das Formular <b>frmModelldetails<\/b>, welches wiederum ein Kombinationsfeld namens <b>cboHerstellerID <\/b>bereith&auml;lt, um per Doppelklick das Formlar <b>frmHersteller <\/b>zu &ouml;ffnen.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_376_014.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_376_014.png\" alt=\"&Ouml;ffnen der jeweiligen Detailformulare per Doppelklick auf die Kombinationsfelder\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 14: &Ouml;ffnen der jeweiligen Detailformulare per Doppelklick auf die Kombinationsfelder<\/p>\n<h2>Ger&auml;teart f&uuml;r Modell ausw&auml;hlen<\/h2>\n<p>Bei der Ger&auml;teart gehen wir einen etwas einfacheren Weg, da es sich dabei schlicht um eine Lookup-Tabelle ohne weitere Felder handelt. Daher erlauben wir dem Benutzer, neue Eintr&auml;ge direkt &uuml;ber das Kombinationsfeld einzugeben. Dazu ben&ouml;tigen wir das Ereignis <b>Bei nicht in Liste<\/b>. F&uuml;r dieses legen wir die Ereignisprozedur aus Listing 5 an.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cboMobilfunkgeraeteartID_NotInList(NewData<span style=\"color:blue;\"> As String<\/span>, Response<span style=\"color:blue;\"> As Integer<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">MsgBox<\/span>(\"Der Eintrag '\" & NewData & \"' ist noch nicht vorhanden. M&ouml;chten Sie ihn anlegen\", vbOKCancel, \"Neuer Eintrag\") = vbOK<span style=\"color:blue;\"> Then<\/span>\r\n         Response = acDataErrAdded\r\n         db.Execute \"INSERT INTO tblMobilfunkgeraetearten(Mobilfunkgeraeteart) VALUES('\" & NewData & \"')\", dbFailOnError\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         Response = acDataErrContinue\r\n         Me!cboMobilfunkgeraeteartID.Undo\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = Nothing\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p class='imagetext'>Listing 5: Anlegen neuer Eintrag in der Tabelle tblMobilfunkgeraetearten<\/p>\n<p>Die Prozedur wird immer dann ausgel&ouml;st, wenn der Benutzer einen Eintrag in das Kombinationsfeld eingibt, der noch nicht in der Datenherkunft enthalten ist. Sie fragt dann den Benutzer per <b>MsgBox<\/b>-Anweisung, ob er den neuen Eintrag tats&auml;chlich anlegen m&ouml;chte. Falls ja, erledigt die Prozedur dies mit einer <b>INSERT INTO<\/b>-Aktionsabfrage. In diesem Fall wird der R&uuml;ckgabeparameter <b>Response <\/b>auf die Konstante <b>acDataErrAdded <\/b>eingestellt, was dazu f&uuml;hrt, dass der neue Eintrag direkt als Wert eingestellt wird.<\/p>\n<p>M&ouml;chte der Benutzer den Wert nicht als neuen Eintrag zur Tabelle hinzuf&uuml;gen, erh&auml;lt der R&uuml;ckgabeparameter <b>Response <\/b>den Wert <b>acDataErrContinue <\/b>und die Eingabe in das Kombinationsfeld wird mit der <b>Undo<\/b>-Methode verworfen.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Damit schlie&szlig;t sich der Kreis: Vom Formular <b>frmMobilfunkgeraetdetails <\/b>&ouml;ffnen wir per Doppelklick auf das Kombinationsfeld <b>cboModellID <\/b>das Formular <b>frmModelldetails<\/b>, von dem wir wiederum per Doppelklick auf das Kombinationsfeld <b>cboHerstellerID <\/b>das Formular <b>frmHersteller <\/b>&ouml;ffnen.<\/p>\n<p>Jeweils beim Schlie&szlig;en der als modale Dialoge ge&ouml;ffneten Formulare wird der darin angelegte oder ausgew&auml;hlte Wert als Wert in das jeweilige Kombinationsfeld eingetragen.<\/p>\n<p>Es gibt noch einen kleinen Sch&ouml;nheitsfehler: Wenn Sie das Formular <b>frmMobilfunkgeraetdetails <\/b>vom Formular <b>frmMobilfunkgeraeteUebersicht <\/b>aus aufrufen, funktioniert beim &Ouml;ffnen der folgenden Formulare das Einstellen des modalen Modus nicht mehr korrekt. Aber das schauen wir uns sp&auml;ter an.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>1706_Handyverwaltung.accdb<\/p>\n<p><a href=\"..\/Downloads\/Beispiele\/{AC16D1A6-9E2C-43B7-9270-E0DB127E5EEF}\/HandyverwaltungMobilfunkgeraete.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im vierten Teil der Artikelreihe zum Thema &#8222;Handyverwaltung&#8220; setzten wir die Arbeit an den Formularen der L&ouml;sung fort. Dieser Teil k&uuml;mmert sich um die Verwaltung der Mobilfunkger&auml;te. Dazu legen wir wieder ein &Uuml;bersichtsformular und ein Detailformular an. Das Detailformular wird etwas anspruchsvoller, da wir darin auch die zum jeweiligen Mobilfunkger&auml;t geh&ouml;rende SIM-Karte verwalten wollen.<\/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":[662017,66062017],"tags":[],"class_list":["post-55000376","post","type-post","status-publish","format-standard","hentry","category-662017","category-66062017"],"aioseo_notices":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v15.9.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Handyverwaltung IV: Mobilfunkger&auml;te verwalten - Access [basics]<\/title>\n<meta name=\"description\" content=\"Im vierten Teil der Artikelreihe zum Thema \u00bbHandyverwaltung\u00ab setzten wir die Arbeit an den Formularen der L\u00f6sung fort. Dieser Teil k\u00fcmmert sich um die Verwaltung der Mobilfunkger\u00e4te. Dazu legen wir wieder ein \u00dcbersichtsformular und ein Detailformular an. Das Detailformular wird etwas anspruchsvoller, da wir darin auch die zum jeweiligen Mobilfunkger\u00e4t geh\u00f6rende SIM-Karte verwalten wollen.\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/Handyverwaltung_IV_Mobilfunkgeraete_verwalten.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Handyverwaltung IV: Mobilfunkger&auml;te verwalten - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"Im vierten Teil der Artikelreihe zum Thema \u00bbHandyverwaltung\u00ab setzten wir die Arbeit an den Formularen der L\u00f6sung fort. Dieser Teil k\u00fcmmert sich um die Verwaltung der Mobilfunkger\u00e4te. Dazu legen wir wieder ein \u00dcbersichtsformular und ein Detailformular an. Das Detailformular wird etwas anspruchsvoller, da wir darin auch die zum jeweiligen Mobilfunkger\u00e4t geh\u00f6rende SIM-Karte verwalten wollen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/Handyverwaltung_IV_Mobilfunkgeraete_verwalten.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2017-12-01T00:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"-0001-11-30T00:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/..\/tl_files\/images\/pic_376_001.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Gesch\u00e4tzte Lesezeit\">\n\t<meta name=\"twitter:data1\" content=\"18\u00a0Minuten\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/access-basics.de\/#website\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Access [basics]\",\"description\":\"DAS ACCESS-MAGAZIN F\\u00dcR ALLE, DIE VON 0 AUF 100 WOLLEN\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/access-basics.de\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"de\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Handyverwaltung_IV_Mobilfunkgeraete_verwalten.html#primaryimage\",\"inLanguage\":\"de\",\"url\":\"http:\/\/vg08.met.vgwort.de\/na\/7161b9f0defc49bba62e18094b214688\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Handyverwaltung_IV_Mobilfunkgeraete_verwalten.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/Handyverwaltung_IV_Mobilfunkgeraete_verwalten.html\",\"name\":\"Handyverwaltung IV: Mobilfunkger&auml;te verwalten - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Handyverwaltung_IV_Mobilfunkgeraete_verwalten.html#primaryimage\"},\"datePublished\":\"2017-12-01T00:00:00+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"description\":\"Im vierten Teil der Artikelreihe zum Thema \\u00bbHandyverwaltung\\u00ab setzten wir die Arbeit an den Formularen der L\\u00f6sung fort. Dieser Teil k\\u00fcmmert sich um die Verwaltung der Mobilfunkger\\u00e4te. Dazu legen wir wieder ein \\u00dcbersichtsformular und ein Detailformular an. Das Detailformular wird etwas anspruchsvoller, da wir darin auch die zum jeweiligen Mobilfunkger\\u00e4t geh\\u00f6rende SIM-Karte verwalten wollen.\",\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Handyverwaltung_IV_Mobilfunkgeraete_verwalten.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/Handyverwaltung_IV_Mobilfunkgeraete_verwalten.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Handyverwaltung_IV_Mobilfunkgeraete_verwalten.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Handyverwaltung_IV_Mobilfunkgeraete_verwalten.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/Handyverwaltung_IV_Mobilfunkgeraete_verwalten.html\",\"name\":\"Handyverwaltung IV: Mobilfunkger&auml;te verwalten\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/#personlogo\",\"inLanguage\":\"de\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","_links":{"self":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000376","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/comments?post=55000376"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000376\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000376"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000376"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000376"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}