{"id":55000339,"date":"2006-04-01T00:00:00","date_gmt":"2021-02-11T20:52:32","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=339"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Notizverwaltung_Teil_2","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Notizverwaltung_Teil_2\/","title":{"rendered":"Notizverwaltung, Teil 2"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg05.met.vgwort.de\/na\/48b8740e3d67467b95ed2e9cc703eccb\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<h3>Zusammenfassung<\/h3>\n<p>Lernen Sie eine Bildverwaltung mit vielen Features f&uuml;r Access kennen.<\/p>\n<h3>Techniken<\/h3>\n<p>Bilder, GDI+, VBA, TreeView, ListView<\/p>\n<h3>Voraussetzungen<\/h3>\n<p>Access 2000 und h&ouml;her<\/p>\n<h3>Beispieldateien<\/h3>\n<p><a href=''fileadmin\/files\/acc0206ml02.zip''>Notizverwaltung00.mdb, Notizverwaltung02.mdb, MSCOMCTL.msi<\/a><\/p>\n<h3><\/h3>\n<p><b>Andr&eacute; Minhorst, Duisburg<\/b><\/p>\n<p><b>In der letzten Ausgabe hat Access im Unternehmen Ihnen die Notizverwaltung vorgestellt, die Ordnung ins Zettelchaos bringen kann: Ein &uuml;bersichtliches TreeView-Steuerelement verschafft dabei einen &uuml;berblick &uuml;ber die in verschiedenen Kategorien gespeicherten Notizen. In dieser Ausgabe erh&auml;lt die Notizverwaltung weitere Funktionen wie eine M&ouml;glichkeit zum Speichern von Dateiverweisen und eine Suchfunktion. Im nachfolgenden Text finden Sie Details zu den verwendeten Techniken.<\/b><\/p>\n<p>Gegen&uuml;ber der im ersten Teil dieser Beitragsreihe vorgestellten Version enth&auml;lt die aktuelle Fassung zwei zus&auml;tzliche interessante Funktionen: Die erste bietet die M&ouml;glichkeit, zu jeder Notiz beliebig viele Verkn&uuml;pfungen zu Dateien zu erstellen. Das Verzeichnis und der Dateiname der Dateien werden in einem ListView-Steuerelement unten rechts im Hauptfenster der Anwendung angezeigt (siehe Bild 1).<\/p>\n<p>Der Clou ist, dass sich die Informationen zu den verkn&uuml;pften Dateien durch einfaches Ziehen der Datei in das ListView-Steuerelement in der Tabelle tblDateien speichern lassen und anschlie&szlig;end im ListView angezeigt werden.<\/p>\n<p>Die zweite Neuerung ist die Such-Funktion, die sich &uuml;ber die Schaltfl&auml;che Suche &ouml;ffnen l&auml;sst. Die Suchfunktion befindet sich in einem eigenen Formular, das ein Textfeld zum Eingeben der Suchbegriffe enth&auml;lt und die Ergebnisse in einer Liste anzeigt (siehe Bild 2). Es lassen sich einer oder mehrere Suchbegriffe in das Textfeld eingeben, die durch &#8222;und&#8220; oder &#8222;oder&#8220; verkn&uuml;pft werden k&ouml;nnen.<\/p>\n<p>Hyperlinks lassen sich leicht in den Text einer Notiz einf&uuml;gen, wieder herauskopieren und im Browser anzeigen. Bei Dateien ist das ein wenig schwieriger: Die lassen sich nicht so schnell &ouml;ffnen, wenn nur der Pfad in der Notiz enthalten ist &#8211; und au&szlig;erdem lassen sie sich nicht auf einfache Weise aus dem URL-Textfeld des Browsers in ein Access-Steuerelement ziehen. Mit Dateinamen funktioniert das schon: Deshalb beherbergt die Notizverwaltung in Zusammenhang mit der aktuellen Notiz stehende Dateien in einem ListView-Steuerelement, von dem aus die Dateien per Doppelklick mit der passenden Anwendung ge&ouml;ffnet werden k&ouml;nnen.<\/p>\n<p>Damit das funktioniert, ben&ouml;tigen Sie die Funktionalit&auml;t aus dem Beitrag Dateinamen per Drag and Drop (Shortlink 326). Dieser Beitrag stellt die Klasse CDragDrop vor, die unter anderem die beiden Methoden FileDropped und ManyFilesDropped enth&auml;lt.<\/p>\n<p><IMG height=\"325\" src=\"..\/fileadmin\/_temp_\/{B3FAEA05-3821-4225-9F75-29321912AE02}\/pic001.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1:  Das Hauptformular der Notizverwaltung mit dem ListView zur Anzeige verkn&uuml;pfter Dateien<\/span><\/b><\/p>\n<p><IMG height=\"408\" src=\"..\/fileadmin\/_temp_\/{B3FAEA05-3821-4225-9F75-29321912AE02}\/pic002.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2:  Die Suchfunktion liefert eine Liste aller Notizen mit den angegebenen Suchbegriffen.<\/span><\/b><\/p>\n<h3>Hinweis<\/h3>\n<p>Die in der Notizverwaltung verwendete Klasse CDragDrop unterscheidet sich unwesentlich von der im oben genannten Beitrag. Beachten Sie au&szlig;erdem, dass die Klasse Subclassing einsetzt, was bei ge&ouml;ffnetem VBA-Editor zu Problemen f&uuml;hren kann. Im schlimmsten Fall l&auml;hmt die Datenbankanwendung das ganze System und es hilft nur das Abschie&szlig;en &uuml;ber den Task-Manager, den Sie in dem Fall auch nur &uuml;ber die Tastenkombination Strg + Alt + Entf erreichen. Aber wie gesagt: Probleme gibt es nur bei ge&ouml;ffnetem VBA-Editor. Und den sollte der normale Benutzer eigentlich nicht zu Gesicht bekommen. <\/p>\n<p>Um die Methoden der Klasse in einem Formular einsetzen zu k&ouml;nnen, deklariert man die Klasse im Formularmodul etwa folgenderma&szlig;en:<\/p>\n<pre>Private WithEvents CDrag As CDragDrop<\/pre>\n<p>Die beiden Ereignisse werden ausgel&ouml;st, wenn der Benutzer eine oder mehrere Dateien auf ein bestimmtes Steuerelement im Formular zieht. Dazu m&uuml;ssen Sie dem passenden Objekt mitteilen, welches Steuerelement es beobachten soll. Im Falle des Formulars frmNotizen passiert dies in der Prozedur, die durch das Ereignis Beim Laden ausgel&ouml;st wird. Die folgenden Zeilen instanzieren das CDrag-Objekt, weisen ihm als Zielsteuerelement der Drag and Drop-Operationen das ListView-Steuerelement zur Anzeige der verkn&uuml;pften Dateien zu und rufen die Methode SubClassHookForm auf, um das Formular zu &#8222;subclassen&#8220;.<\/p>\n<pre>Set CDrag = New CDragDrop\r\nCDrag.SubClassHook ctlListView.hwnd <\/pre>\n<p>Interessant sind die beiden Ereignisprozeduren, die das Objekt CDrag bereitstellt, wenn es als WithEvents deklariert ist. Diese lassen sich leicht &uuml;ber die beiden Kombinationsfelder des VBA-Codefensters des Formularmoduls anlegen (siehe Bild 3).<\/p>\n<p>Was passiert nun mit diesen Methoden Man legt sie wie ganz normale Ereignisprozeduren an und f&uuml;gt dort den Code ein, der beim Ziehen einer Datei auf das angegebene Steuerelement ausgel&ouml;st werden soll. Im vorliegenden Fall soll der Pfad in das Verzeichnis und den Dateinamen aufgeteilt und in der Tabelle tblDateien gespeichert werden (siehe Bild 4).<\/p>\n<p>Jeder neue Datensatz enth&auml;lt au&szlig;erdem die ID der Notiz, mit dem die hinzugef&uuml;gte Datei verkn&uuml;pft ist. Au&szlig;erdem soll das ListView-Steuerelement ctlListView die Dateiinformationen anzeigen (siehe Bild 5).<\/p>\n<p><IMG height=\"306\" src=\"..\/fileadmin\/_temp_\/{B3FAEA05-3821-4225-9F75-29321912AE02}\/pic003.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3:  Anlegen der Ereignisprozeduren des CDrag-Objekts<\/span><\/b><\/p>\n<p><IMG height=\"140\" src=\"..\/fileadmin\/_temp_\/{B3FAEA05-3821-4225-9F75-29321912AE02}\/pic004.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4:  Die Tabelle tblDateien speichert die Dateiinformationen und die ID der Notiz, mit der diese Datei verkn&uuml;pft ist.<\/span><\/b><\/p>\n<p><IMG height=\"123\" src=\"..\/fileadmin\/_temp_\/{B3FAEA05-3821-4225-9F75-29321912AE02}\/pic005.png\" width=\"476\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5:  Aus der Liste der mit einer Notiz verkn&uuml;pften Dateien l&auml;sst sich eine Datei per Kontextmen&uuml; &ouml;ffnen.<\/span><\/b><\/p>\n<p>Dies alles erledigen die beiden Ereignisse FileDropped und ManyFilesDropped &#8211; je nachdem, ob der Benutzer eine oder mehrere Dateien ausgew&auml;hlt und auf das ListView-Steuerelement gezogen hat. Quellcode 1 zeigt die Routine, die beim Ziehen einer einzelnen Datei auf die Liste ausgel&ouml;st wird (die Variante f&uuml;r mehrere Dateien sieht &auml;hnlich aus).<\/p>\n<p>Die Routine pr&uuml;ft zun&auml;chst, ob im TreeView-Steuerelement &uuml;berhaupt gerade eine Notiz und nicht etwa eine Kategorie markiert ist.<\/p>\n<p>Handelt es sich um eine Notiz, schreibt sie zun&auml;chst einen neuen Datensatz mit den entsprechenden Informationen in die Tabelle tblDateien und f&uuml;gt dann einen Eintrag zum ListView-Steuerelement hinzu (Know-how zum ListView-Steuerelement finden Sie in den Beitr&auml;gen mit den Shortlinks 336, 337, 338 und 339).<\/p>\n<p>Was hilft schon eine Datenbank zum Anlegen von Notizen, wenn man nicht per Volltextsuche darin suchen kann<\/p>\n<p>Also haben wir der Notizverwaltung auch noch eine Suchfunktion verpasst. Diese l&auml;sst sich &uuml;ber die Schaltfl&auml;che Suche im oberen Teil des Hauptformulars aktivieren und erwartet die Eingabe eines oder mehrerer mit &#8222;und&#8220; oder &#8222;oder&#8220; verkn&uuml;pfter Suchbegriffe.<\/p>\n<p>Die Schaltfl&auml;che zum Aufrufen des Suchformulars l&ouml;st zun&auml;chst die folgende Anweisung aus und &ouml;ffnet damit das Suchformular als modalen Dialog:<\/p>\n<pre>DoCmd.OpenForm \"frmSuche\", _    WindowMode:=acDialog<\/pre>\n<p>Das Suchformular sieht im Entwurf wie in Bild 6 aus. Das Textfeld txtSuchbegriffe erwartet die Eingabe der Suchbegriffe, w&auml;hrend die Optionsgruppe ogrVerknuepfung zwei Optionen zur Auswahl der Verkn&uuml;pfung der einzelnen Suchbegriffe enth&auml;lt.<\/p>\n<p>Zur Anzeige des Suchergebnisses dient schlie&szlig;lich ein ListView-Steuerelement namens ctlListView.<\/p>\n<p><b>Quellcode 1: Diese Routine schreibt Informationen zu Dateien, die in das ListView-Steuerelement des Formulars gezogen wurden,  in die Tabelle tblDateien und in das ListView-Steuerelement.<\/b><\/p>\n<pre>Private Sub CDrag_FileDropped(Filename As String)\r\n    Dim objListItem As ListItem\r\n    Dim db As DAO.Database\r\n    Dim rst As DAO.Recordset\r\n    Dim lngID As Long\r\n    Dim strDateiname As String\r\n    Dim strVerzeichnis As String\r\n    If Not IsNull(Me.NotizID) Then\r\n        strDateiname = Mid(Filename, _            InStrRev(Filename, \"\\\") + 1)\r\n        strVerzeichnis = Left(Filename, _            InStrRev(Filename, \"\\\"))\r\n        Set db = CurrentDb\r\n        Set rst = db.OpenRecordset(\"tblDateien\", dbOpenDynaset)\r\n        rst.AddNew\r\n        rst!Dateiname = strDateiname\r\n        rst!Verzeichnis = strVerzeichnis\r\n        rst!NotizID = Me.NotizID\r\n        lngID = rst!DateiID\r\n        rst.Update\r\n        Set objListItem = ctlListView.ListItems.Add _            (, \"a\" & lngID, strDateiname)\r\n        objListItem.ListSubItems.Add , , strVerzeichnis\r\n        rst.Close\r\n        Set rst = Nothing\r\n        Set db = Nothing\r\n    End If\r\nEnd Sub<\/pre>\n<p><!--30percent--><\/p>\n<p>Ein Klick auf die Schaltfl&auml;che cmdSuchen ruft ebenso wie das Ereignis, das nach dem Aktualisieren des im Textfeld txtSuchbegriffe ausgel&ouml;st wird, die Routine SucheStarten auf (s. Quellcode 2):<\/p>\n<pre>Private Sub cmdSuchen_Click()\r\n    SucheStarten\r\nEnd Sub<\/pre>\n<p>Diese Routine ist in Quellcode 2 abgebildet. Sie pr&uuml;ft zun&auml;chst, ob das Textfeld txtSuchbegriff &uuml;berhaupt einen Text enth&auml;lt. Falls ja, teilt die Split-Funktion die enthaltene Zeichenkette in alle durch ein Leerzeichen getrennten Teile auf und speichert diese in einem String-Array namens strSuchbegriffe.<\/p>\n<p>Die folgende For Next-Schleife iteriert &uuml;ber alle im Array enthaltenen Suchbegriffe, erg&auml;nzt jeden Suchbegriff zu einem Ausdruck wie Notiz LIKE &#8220;*&lt;Suchbegriff&gt;*&#8220;, wobei es &lt;Suchbegriff&gt; durch den aktuellen Suchbegriff ersetzt und die einzelnen Bedingungen getrennt vom ausgew&auml;hlten Verkn&uuml;pfungsoperator aneinanderf&uuml;gt.<\/p>\n<p>Wenn das Textfeld txtSuchbegriffe etwa den Inhalt &#8222;Access Formular&#8220; h&auml;tte und die Suchbegriffe durch &#8222;und&#8220; verkn&uuml;pft werden sollten, s&auml;he der erzeugt Ausdruck folgenderma&szlig;en aus:<\/p>\n<p>AND Notiz LIKE &#8220;*Access*&#8220; AND Notiz LIKE *Formular*&#8220;<\/p>\n<p>Ohne das f&uuml;hrende &#8222;AND&#8220; und zusammen mit dem in der Variablen strSQL gespeicherten Ausdruck SELECT * FROM tblNotizen WHERE ergibt dies die gew&uuml;nschte SQL-Abfrage.<\/p>\n<p>Die Routine durchl&auml;uft im Anschluss eine auf Basis des soeben ermittelten SQL-Ausdrucks erzeugte Datensatzgruppe &#8211; die ja alle Notizen mit dem gew&uuml;nschten Inhalt enth&auml;lt &#8211; und erledigt darin Folgendes:<\/p>\n<li>Ermitteln des Kategoriepfades der Notiz (etwa \/Access\/Formular\/Tipps und Tricks) mit der Funktion GetKategorien<\/li>\n<li>Anlegen eines neuen Elements im ListView-Steuerelement<\/li>\n<p>Fertig! Nach dem Durchlaufen aller Datens&auml;tze zeigt das ListView-Steuerelement alle gefundenen Notizen inklusive der &uuml;bergeordneten Kategorien an.<\/p>\n<p><b>Quellcode 2: Die Suchfunktion des Formulars frmSuche<\/b><\/p>\n<pre>Private Sub SucheStarten()\r\n    ''Deklaration aus Platzgr&uuml;nden nicht abgedruckt\r\n    If Len(Nz(Me.txtSuchbegriffe, \"\")) &gt; 0 Then\r\n        Set db = CurrentDb\r\n        strSuchbegriffe = Split(Me.txtSuchbegriffe, \" \")\r\n        If Me.ogrVerknuepfung = 1 Then\r\n            strOperator = \"AND\"\r\n        Else\r\n            strOperator = \"OR\"\r\n        End If\r\n        strSQL = \"SELECT * FROM tblNotizen WHERE \"\r\n        For i = 0 To UBound(strSuchbegriffe)\r\n            strKriterium = strKriterium & \" \" & strOperator _                & \" Notiz LIKE ''*\" & strSuchbegriffe(i) & \"*''\"\r\n        Next i\r\n        strKriterium = Mid(strKriterium, 5)\r\n        strSQL = strSQL & strKriterium\r\n        Set rst = db.OpenRecordset(strSQL)\r\n        ctlListView.ListItems.Clear\r\n        Do While Not rst.EOF\r\n            strKategorie = GetKategorie(DLookup(\"KategorieID\", _                \"tblNotizen\", \"NotizID = \" & rst!NotizID))\r\n            Set objListItem = ctlListView.ListItems.Add(, \"a\" _                 & rst!NotizID, rst!Bezeichnung)\r\n            objListItem.ListSubItems.Add , , strKategorie\r\n            rst.MoveNext\r\n        Loop\r\n        rst.Close\r\n        Set rst = Nothing\r\n        Set db = Nothing\r\n    End If\r\nEnd Sub<\/pre>\n<p><IMG height=\"324\" src=\"..\/fileadmin\/_temp_\/{B3FAEA05-3821-4225-9F75-29321912AE02}\/pic006.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6:  Das Suchformular in der Entwurfsansicht<\/span><\/b><\/p>\n<h3>Gefundene Notiz anzeigen<\/h3>\n<p>Hat man in der Liste der Suchergebnisse den richtigen Eintrag gefunden, soll dieser nat&uuml;rlich leicht zugreifbar sein &#8211; am besten soll die passende Notiz nach einem Doppelklick auf diesen Eintrag im Hauptformular angezeigt werden.<\/p>\n<p>Dieser Wunsch kann erf&uuml;llt werden, wenn auch in zwei Schritten: Den ersten Schritt geht die Ereignisprozedur DblClick des ListView-Steuerelements. Sie ermittelt die ID des per Doppelklick ausgew&auml;hlten Eintrags und stellt in der Tabelle tblNotizen den Wert des Feldes Aktiv f&uuml;r die ausgew&auml;hlte Notiz auf True und macht das Suchformular unsichtbar.<\/p>\n<p>Auf diese Weise wird die Routine, die das Suchformular &uuml;berhaupt erst ge&ouml;ffnet hat, fortgesetzt.<\/p>\n<p>Dabei &uuml;berpr&uuml;ft diese, ob das Suchformular noch ge&ouml;ffnet ist (was darauf hindeutet, dass der Benutzer eine Notiz per Doppelklick ausgew&auml;hlt hat, weil nur so das Formular den Fokus verliert, ohne geschlossen zu werden), aktualisiert daraufhin den Inhalt des TreeView-Steuerelements im Hauptformular und schlie&szlig;t das Suchformular endg&uuml;ltig.<\/p>\n<p>Dadurch, dass der Datensatz der ausgew&auml;hlten Notiz in der Tabelle tblNotizen als aktiver Datensatz markiert wurde, wird die entsprechende Notiz nach dem Aktualisieren des TreeViews auch dort als aktuelle Notiz markiert und der passende Inhalt angezeigt:<\/p>\n<pre>If IstFormularGeoeffnet(\"frmSuche\") Then\r\n    ctlTreeView.Nodes.Clear\r\n    TreeViewFuellen\r\n    DoCmd.Close acForm, \"frmSuche\"\r\nEnd If<\/pre>\n<p>Besonders komfortabel wird die Anwendung durch den Einsatz von Kontextmen&uuml;s. Diese erlauben<\/p>\n<li>das Hinzuf&uuml;gen von Kategorien und Notizen,<\/li>\n<li>das L&ouml;schen von Kategorien und Notizen<\/li>\n<li>und das Hinzuf&uuml;gen, L&ouml;schen und &ouml;ffnen von Dateiverkn&uuml;pfungen.<\/li>\n<p>Nur ihre Programmierung ist nicht so einfach &#8211; zumindest nicht, wenn die Kontextmen&uuml;s in Zusammenhang mit bestimmten Elementen von TreeViews- oder Listview aus aufgerufen werden sollen. Die folgenden Abschnitte bringen Licht ins Dunkel.<\/p>\n<h3>Kontextmen&uuml; anlegen<\/h3>\n<p>Am einfachsten legen Sie das ben&ouml;tigte Kontextmen&uuml; in den folgenden Schritten an:<\/p>\n<li>W&auml;hlen Sie den Eintrag Anpassen des Kontextmen&uuml;s der Men&uuml;leiste von Access aus.<\/li>\n<li>Zeigen Sie das Men&uuml; Kontextmen&uuml; aus der Liste Symbolleisten im nun erscheinenden Anpassen-Dialog an.<\/li>\n<li>Es erscheint die Symbolleiste Kontextmen&uuml;. Wechseln Sie im Anpassen-Dialog auf die Registerseite Befehle, w&auml;hlen Sie im linken Listenfeld den Eintrag Neues Men&uuml; aus und ziehen Sie den in der rechten Liste erscheinenden Eintrag gleichen Namens in den Men&uuml;punkt Benutzerdefiniert der Kontextmen&uuml;-Leiste.<\/li>\n<li>Geben Sie dem neuen Kontextmen&uuml; einen sinnvollen Namen.<\/li>\n<li>Wechseln Sie in der linken Liste des Anpassen-Dialogs zum ersten Eintrag Datei und ziehen Sie den Eintrag Benutzerdefiniert aus dem rechten Listenfeld auf das neu angelegte Kontextmen&uuml;.<\/li>\n<li>Geben Sie auch dem Men&uuml;eintrag einen Namen und aktivieren Sie gegebenenfalls die Option Schaltfl&auml;chensymbol und Text im Kontextmen&uuml; des neuen Eintrags, wenn Sie zus&auml;tzlich zum Text ein Symbol anzeigen m&ouml;chten. (<\/li>\n<p>Merken Sie sich die f&uuml;r die Kontextmen&uuml;s und die einzelnen Men&uuml;punkte vergebenen Namen, wenn Sie diese Informationen w&auml;hrend der folgenden Programmierschritte nicht jedes Mal m&uuml;hsam ermitteln m&ouml;chten.<\/p>\n<h3>Benutzerdefinierte Icons<\/h3>\n<p>Die Notizverwaltung verwendet in den Kontextmen&uuml;s benutzerdefinierte Symbole. Diese werden den Symbolleisten per VBA-Code in der Beim Laden-Ereignisprozedur des jeweiligen Formulars zugewiesen.<\/p>\n<p>F&uuml;r den Men&uuml;punkt zum &ouml;ffnen einer der mit einer Notiz verkn&uuml;pften Datei sehen die notwendigen Anweisungen wie folgt aus.<\/p>\n<p>Dabei ist Dateien_Datei der Name des Kontextmen&uuml;s und Datei &ouml;ffnen der Name des Men&uuml;eintrags und die Bilder stammen aus dem im Formular enthaltenen ImageList-Steuerelement:<\/p>\n<pre>Set cbr = CommandBars(\"Dateien_Datei\")\r\nSet cbc = cbr.Controls(\"Datei &ouml;ffnen\")\r\nWith cbc\r\n  .Picture = _    ctlImageList.ListImages(17).Picture\r\n  .Mask = _    ctlImageList.ListImages(18).Picture\r\nEnd With<\/pre>\n<p>Weitere Informationen zum Zuweisen benutzerdefinierter Icons zu Men&uuml;s finden Sie im Beitrag Symbolleiste mit benutzerdefinierten Icons (Shortlink 324).<\/p>\n<p>Das Zuweisen benutzerdefinierter Icons ist leider erst ab Access 2002 m&ouml;glich, daher fehlt diese Funktionalit&auml;t in der Version f&uuml;r Access 2000.<\/p>\n<h3>Kontextmen&uuml;s im wahrsten Sinne des Wortes<\/h3>\n<p>&uuml;blicherweise kann man Kontextmen&uuml;s einzelnen Formularen oder Steuerelementen zuweisen. Daf&uuml;r gibt es dann eine entsprechende Eigenschaft, in die man einfach den Namen der Kontextmen&uuml;leiste eintr&auml;gt.<\/p>\n<p>Im vorliegenden Fall ist die Situation etwas vertrackter: Die Kontextmen&uuml;s sollen nicht nur vom Steuerelement abh&auml;ngen, sondern auch noch von dem Element, &uuml;ber dem sich der Mauszeiger zum Zeitpunkt des Klicks auf die rechte Maustaste befindet.<\/p>\n<p>Die nachfolgende Beschreibung funktioniert f&uuml;r TreeView- und ListView-Steuerelemente, weil diese die hier verwendete HitTest-Methode aufweisen. Diese kann in Ereignisprozeduren von TreeView- und ListView-Steuerelementen eingesetzt werden, die die aktuellen Koordinaten des Mauszeigers in Form einer x- und einer y-Koordinate zur Verf&uuml;gung stellen. Die HitTest-Methode liefert dann das zu den Koordinaten passende Objekt zur&uuml;ck &#8211; je nach Steuerelement ein Node- oder ein ListItem-Objekt.<\/p>\n<p>Wer schon einmal benutzerdefinierte Men&uuml;s angelegt hat, wei&szlig; auch, dass man die durch den jeweiligen Men&uuml;punkt ausgel&ouml;ste Funktion &uuml;ber die Eigenschaften des Men&uuml;punkts angeben kann. Das funktioniert hier nicht &#8211; zumindest nicht, wenn die Funktion vom aktuell ausgew&auml;hlten Element abh&auml;ngt: <\/p>\n<p>Wie also weist man den Eintr&auml;gen des Kontextmen&uuml;s Funktionen zu, die vom aktuell markierten Element des zugrunde liegenden Steuerelements abh&auml;ngen &#8211; TreeView und ListView bieten ja noch nicht einmal irgendeine Eigenschaft zum Eintragen eines Kontextmen&uuml;s<\/p>\n<p>Ganz klar: Hier ist VBA gefragt. Die fraglichen Steuerelemente bieten beispielsweise das Ereignis MouseUp. Dieses wird beim Loslassen einer Maustaste ausgel&ouml;st &#8211; ideal zum Anzeigen eines Kontextmen&uuml;s.<\/p>\n<p>Die Parameter der Ereignisprozedur bringen alles mit, was Sie ben&ouml;tigen:<\/p>\n<pre>Private Sub ctlTreeView_MouseUp( _    ByVal Button As Integer, _    ByVal Shift As Integer, _    ByVal x As Long, ByVal y As Long)\r\n    ''...\r\nEnd Sub<\/pre>\n<p>Button liefert den Wert 1 f&uuml;r die linke und den Wert 2 f&uuml;r die rechte Maustaste, Shift den Wert 2 bei gedr&uuml;ckter Umschalttaste, 0 f&uuml;r die blanke rechte Maustaste) und x und y die aktuellen Koordinaten des Mauszeigers.<\/p>\n<p>Mit den Koordinaten l&auml;sst sich wiederum &#8211; wie bereits erw&auml;hnt &#8211; das aktuell markierte Element ermitteln.<\/p>\n<p>Das Kontextmen&uuml; f&uuml;r das ListView zur Anzeige der verkn&uuml;pften Dateien ist etwas weniger komplex wie das des TreeViews, deshalb schauen Sie sich dieses zun&auml;chst einmal an (wenn Sie die Funktionalit&auml;t verstanden haben, kommen Sie auch mit den Kontextmen&uuml;s des TreeViews zurecht).<\/p>\n<p>Die Routine aus Quellcode 4 pr&uuml;ft zun&auml;chst, ob der Mausklick &uuml;ber die rechte Maustaste erfolgt, und dann, ob sich der Mauszeiger beim Klick &uuml;ber einem der Elemente befindet. Falls ja, ermittelt sie die ID dieses Elementes in der Tabelle tblDateien &#8211; dies erfolgt durch Parsen der Key-Eigenschaft des Elements.<\/p>\n<p>Je nachdem, ob der Klick auf einem Element oder im freien Bereich erfolgte, startet die Routine anschlie&szlig;end eine der folgenden beiden Aktionen: Entweder man hat ein Element getroffen, dann referenziert die Routine das Kontextmen&uuml; Dateien_Datei und legt f&uuml;r die beiden Schaltfl&auml;chen dieses Men&uuml;s vom aktuellen Element abh&auml;ngige Funktionsaufrufe fest. <\/p>\n<p>F&uuml;r den Eintrag zum &ouml;ffnen der Datei sieht dies wie folgt aus (in einer Zeile):<\/p>\n<pre>cbr.Controls(\"&Datei entfernen\").OnAction = \"=mnuDateiEntfernen(\" & lngID & \")\"<\/pre>\n<p>Klickt man mit der rechten Maustaste in einen leeren Bereich des ListViews, wird das Kontextmen&uuml; Dateien_Leer referenziert: Dieses enth&auml;lt nur die Schaltfl&auml;che Datei hinzuf&uuml;gen. <\/p>\n<p>Auch hier ist ein dynamisch zusammengesetzter Aufruf der entsprechenden Men&uuml;funktion erforderlich: Immerhin muss der neue Eintrag, dessen Pfad &uuml;ber eine Input-Box abgefragt wird, einer bestimmten Notiz zugeordnet werden.<\/p>\n<p><b>Quellcode 4: Steuerung der Kontextmen&uuml;s im ListView zur Anzeige der mit einer Notiz verkn&uuml;pften Dateien<\/b><\/p>\n<pre>Private Sub ctlListView_MouseUp(ByVal Button As Integer, _    ByVal Shift As Integer, ByVal x As Long, ByVal y As Long)\r\n    On Error GoTo ctlListView_MouseUp_Err\r\n    Dim cbr As CommandBar\r\n    Dim objListItem As ListItem\r\n    Dim lngID As Long\r\n    Select Case Button\r\n        Case 2\r\n            On Error Resume Next\r\n            If Not ctlListView.HitTest(x, y) Is Nothing Then\r\n                Set objListItem = ctlListView.HitTest(x, y)\r\n            End If\r\n            lngID = Mid(objListItem.Key, 2)\r\n            Err.Clear\r\n            On Error GoTo ctlListView_MouseUp_Err\r\n            If objListItem Is Nothing Then\r\n                Set cbr = CommandBars(\"Dateien_Leer\")\r\n                cbr.Controls(\"&Datei hinzuf&uuml;gen\").OnAction = _                    \"=mnuDateiHinzufuegen(\" & Me.NotizID & \")\"\r\n            Else\r\n                objListItem.Selected = True\r\n                Set cbr = CommandBars(\"Dateien_Datei\")\r\n                cbr.Controls(\"&Datei entfernen\").OnAction = _                    \"=mnuDateiEntfernen(\" & lngID & \")\"\r\n                cbr.Controls(\"Datei &&ouml;ffnen\").OnAction = _                    \"=mnuDateiOeffnen(\" & lngID & \")\"\r\n            End If\r\n    End Select\r\n    If Not cbr Is Nothing Then\r\n        cbr.ShowPopup\r\n    End If\r\n   ''Fehlerbehandlung aus Platzgr&uuml;nden nicht abgedruckt\r\nEnd Sub<\/pre>\n<p><b>Quellcode 5: Entfernen einer Datei aus dem ListView und aus der zugrunde liegenden Tabelle<\/b><\/p>\n<pre>Public Function mnuDateiEntfernen(lngDateiID As Long)\r\n    Forms!frmNotizen!ctlListView.ListItems.Remove \"a\" _        & lngDateiID\r\n    CurrentDb.Execute _        \"DELETE FROM tblDateien WHERE DateiID = \" & lngDateiID\r\nEnd Function<\/pre>\n<p>Zu diesem Zeitpunkt verweist die Objektvariable cbr auf eines der beiden beschriebenen Kontextmen&uuml;s, das nur noch angezeigt werden muss: Daf&uuml;r sorgt schlie&szlig;lich die Anweisung cbr.ShowPopup.<\/p>\n<p>Nun fehlen nur noch die passenden Funktionen, die von den Kontextmen&uuml;s aufgerufen werden. Diese speichern Sie als Public-Funktionen in einem Standardmodul, damit sie &ouml;ffentlich zug&auml;nglich sind. Beispielhaft soll die Funktion zum Entfernen einer Datei aus der Liste vorgestellt werden (s. Quellcode 5).<\/p>\n<p>Diese erledigt zwei Dinge: Ersten entfernt sie das zu der Datei geh&ouml;rende Element aus dem ListView-Steuerelement und zweitens l&ouml;scht sie den entsprechenden Eintrag aus der Tabelle tblDateien.<\/p>\n<p>Die Notizverwaltung ist ein gutes Beispiel daf&uuml;r, wie man die seit Office 2002 zum Paket geh&ouml;renden Steuerelemente wie das TreeView, das ListView und die ImageList mit ein wenig Know-how zum Erzeugen beeindruckender Benutzeroberfl&auml;chen einsetzen kann.<\/p>\n<p>Die beiden (recht kurzen) Teile dieser Beitragsreihe k&ouml;nnen leider nicht ann&auml;hernd alle verwendeten Techniken umfassend beschreiben, aber die weiteren Beitr&auml;ge zu TreeView, ListView und Co. liefern das fehlende Know-how.<\/p>\n<p>Die Notizverwaltung selbst hilft Ihnen hoffentlich, eine eventuell vorhandene Zettelwirtschaft einzud&auml;mmen und liefert vor allem mit der Suche eine Funktion, die die bestsortierte Ablage nicht bieten kann.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>Notizverwaltung.mdb<\/p>\n<p>MSCOMCTL.msi<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/1B12CA0A-C86D-4FB1-B57D-4CA31CE947A3\/aiu_339.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In der letzten Ausgabe hat Access im Unternehmen Ihnen die Notizverwaltung vorgestellt, die Ordnung ins Zettelchaos bringen kann: Ein &uuml;bersichtliches TreeView-Steuerelement verschafft dabei einen &Uuml;berblick &uuml;ber die in verschiedenen Kategorien gespeicherten Notizen. In dieser Ausgabe erh&auml;lt die Notizverwaltung weitere Funktionen wie eine M&ouml;glichkeit zum Speichern von Dateiverweisen und eine Suchfunktion. Im nachfolgenden Text finden Sie Details zu den verwendeten Techniken.<\/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":[66022006,662006,44000027],"tags":[],"class_list":["post-55000339","post","type-post","status-publish","format-standard","hentry","category-66022006","category-662006","category-Loesungen"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Notizverwaltung, 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\/Notizverwaltung_Teil_2\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Notizverwaltung, Teil 2\" \/>\n<meta property=\"og:description\" content=\"In der letzten Ausgabe hat Access im Unternehmen Ihnen die Notizverwaltung vorgestellt, die Ordnung ins Zettelchaos bringen kann: Ein &uuml;bersichtliches TreeView-Steuerelement verschafft dabei einen &Uuml;berblick &uuml;ber die in verschiedenen Kategorien gespeicherten Notizen. In dieser Ausgabe erh&auml;lt die Notizverwaltung weitere Funktionen wie eine M&ouml;glichkeit zum Speichern von Dateiverweisen und eine Suchfunktion. Im nachfolgenden Text finden Sie Details zu den verwendeten Techniken.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Notizverwaltung_Teil_2\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-11T20:52:32+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg05.met.vgwort.de\/na\/48b8740e3d67467b95ed2e9cc703eccb\" \/>\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=\"17\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Notizverwaltung_Teil_2\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Notizverwaltung_Teil_2\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Notizverwaltung, Teil 2\",\"datePublished\":\"2021-02-11T20:52:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Notizverwaltung_Teil_2\\\/\"},\"wordCount\":2881,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Notizverwaltung_Teil_2\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/48b8740e3d67467b95ed2e9cc703eccb\",\"articleSection\":[\"2\\\/2006\",\"2006\",\"L\u00f6sungen\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Notizverwaltung_Teil_2\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Notizverwaltung_Teil_2\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Notizverwaltung_Teil_2\\\/\",\"name\":\"Notizverwaltung, Teil 2 - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Notizverwaltung_Teil_2\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Notizverwaltung_Teil_2\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/48b8740e3d67467b95ed2e9cc703eccb\",\"datePublished\":\"2021-02-11T20:52:32+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Notizverwaltung_Teil_2\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Notizverwaltung_Teil_2\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Notizverwaltung_Teil_2\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/48b8740e3d67467b95ed2e9cc703eccb\",\"contentUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/48b8740e3d67467b95ed2e9cc703eccb\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Notizverwaltung_Teil_2\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Notizverwaltung, 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":"Notizverwaltung, 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\/Notizverwaltung_Teil_2\/","og_locale":"de_DE","og_type":"article","og_title":"Notizverwaltung, Teil 2","og_description":"In der letzten Ausgabe hat Access im Unternehmen Ihnen die Notizverwaltung vorgestellt, die Ordnung ins Zettelchaos bringen kann: Ein &uuml;bersichtliches TreeView-Steuerelement verschafft dabei einen &Uuml;berblick &uuml;ber die in verschiedenen Kategorien gespeicherten Notizen. In dieser Ausgabe erh&auml;lt die Notizverwaltung weitere Funktionen wie eine M&ouml;glichkeit zum Speichern von Dateiverweisen und eine Suchfunktion. Im nachfolgenden Text finden Sie Details zu den verwendeten Techniken.","og_url":"https:\/\/access-im-unternehmen.de\/Notizverwaltung_Teil_2\/","og_site_name":"Access im Unternehmen","article_published_time":"2021-02-11T20:52:32+00:00","og_image":[{"url":"http:\/\/vg05.met.vgwort.de\/na\/48b8740e3d67467b95ed2e9cc703eccb","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"17\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Notizverwaltung_Teil_2\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Notizverwaltung_Teil_2\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Notizverwaltung, Teil 2","datePublished":"2021-02-11T20:52:32+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Notizverwaltung_Teil_2\/"},"wordCount":2881,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Notizverwaltung_Teil_2\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/48b8740e3d67467b95ed2e9cc703eccb","articleSection":["2\/2006","2006","L\u00f6sungen"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Notizverwaltung_Teil_2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Notizverwaltung_Teil_2\/","url":"https:\/\/access-im-unternehmen.de\/Notizverwaltung_Teil_2\/","name":"Notizverwaltung, Teil 2 - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Notizverwaltung_Teil_2\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Notizverwaltung_Teil_2\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/48b8740e3d67467b95ed2e9cc703eccb","datePublished":"2021-02-11T20:52:32+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Notizverwaltung_Teil_2\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Notizverwaltung_Teil_2\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Notizverwaltung_Teil_2\/#primaryimage","url":"http:\/\/vg05.met.vgwort.de\/na\/48b8740e3d67467b95ed2e9cc703eccb","contentUrl":"http:\/\/vg05.met.vgwort.de\/na\/48b8740e3d67467b95ed2e9cc703eccb"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Notizverwaltung_Teil_2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Notizverwaltung, 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\/55000339","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=55000339"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000339\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000339"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000339"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000339"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}