{"id":55001564,"date":"2025-10-01T00:00:00","date_gmt":"2025-10-02T17:46:33","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1564"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Icons_in_der_Datenbank_verwalten","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Icons_in_der_Datenbank_verwalten\/","title":{"rendered":"Icons in der Datenbank verwalten"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg01.met.vgwort.de\/na\/c2b1670c5aac49b380e16a64927c08e6\" width=\"1\" height=\"1\" alt=\"\"><b>Mit den neueren Versionen von Access ab der Version 2010 kann man Icons, die an verschiedenen Stellen der Benutzeroberfl&auml;che wie in Bildsteuerelementen oder Schaltfl&auml;chen angezeigt werden sollen, relativ einfach verwalten. Sie landen nach dem Einf&uuml;gen in einer Systemtabelle namens MSysResources, die ein Anlagefeld zum Speichern der Bilddateien und weitere Felder f&uuml;r die Metadaten wie Bildname oder Dateiendung enth&auml;lt. Allerdings ist die Verwaltung nicht perfekt gel&ouml;st. Daher stellen wir in diesem Beitrag ein Formular vor, mit dem sich die Bilder wesentlich besser hinzuf&uuml;gen lassen. Au&szlig;erdem enth&auml;lt das Formular eine Suchfunktion, mit der sich die Bilder nach dem Namen filtern lassen, sowie eine &Uuml;bersicht der Bilder, mit der sich die jeweiligen Bilddateien anschauen lassen. Schlie&szlig;lich k&ouml;nnen wir auch noch den Bildnamen herausfinden, um das gew&uuml;nschte Icon schnell einer Schaltfl&auml;che oder einem Bildsteuerelement zuweisen zu k&ouml;nnen.<\/b><\/p>\n<h2>Nachteile der eingebauten Verwaltung von Icons<\/h2>\n<p>Die eingebauten Funktionen zum Hinzuf&uuml;gen von Icons zu einer Access-Datenbank sind bereits recht hilfreich, wenn man dies mit fr&uuml;heren Versionen vergleicht, wo man Bilder bestenfalls im OLE-Format nutzen konnte.<\/p>\n<p>Wenn wir ein Formular in der Entwurfsansicht ge&ouml;ffnet haben, k&ouml;nnen wir im Ribbon auf den Befehl <b>Formularentwurf|Steuerelemente|Bild einf&uuml;gen <\/b>einen Dateidialog &ouml;ffnen, mit dem wir das einzuf&uuml;gende Bild ausw&auml;hlen (siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_05\/pic_1564_002.png\" alt=\"Funktion zum Hinzuf&uuml;gen von Bilddateien\" width=\"649,559\" height=\"261,8508\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Funktion zum Hinzuf&uuml;gen von Bilddateien<\/span><\/b><\/p>\n<p>Unabh&auml;ngig davon, ob wir danach in das Formular klicken und ein Bildsteuerelement gef&uuml;llt mit diesem Bild anlegen, wird das Bild in der Tabelle <b>MSysResources<\/b> gespeichert und steht nachfolgend in Steuerelementen wie der Schaltfl&auml;che oder dem Bildsteuerelement zur Auswahl bereit (siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_05\/pic_1564_003.png\" alt=\"Das hinzugef&uuml;gte Bild \" width=\"524,559\" height=\"370,3296\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Das hinzugef&uuml;gte Bild <\/span><\/b><\/p>\n<p>Anschlie&szlig;end k&ouml;nnen wir uns einen &Uuml;berblick &uuml;ber die enthaltenen Bilder verschaffen, indem wir erneut auf <b>Bild einf&uuml;gen <\/b>klicken (siehe Bild 3).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_05\/pic_1564_004.png\" alt=\"Auswahl der verf&uuml;gbaren Bilder der Tabelle MSysResources\" width=\"549,559\" height=\"332,8044\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Auswahl der verf&uuml;gbaren Bilder der Tabelle MSysResources<\/span><\/b><\/p>\n<p>Was hier fehlt, sind folgende Funktionen:<\/p>\n<ul>\n<li>Wir k&ouml;nnen immer nur ein Bild gleichzeitig zur Tabelle <b>MSysResources <\/b>hinzuf&uuml;gen.<\/li>\n<li>Die Bildergalerie zeigt nur eine begrenzte Anzahl von Bildern an. Unsere Sammlung von ca. 1.700 Icons konnte nicht vollst&auml;ndig angezeigt werden.<\/li>\n<li>Es fehlt eine Suchm&ouml;glichkeit nach dem Bildnamen.<\/li>\n<\/ul>\n<p>All diese Funktionen r&uuml;sten wir mit unserem Formular nach, dass sich leicht in eigene Anwendungen einbauen l&auml;sst.<\/p>\n<h2>Formular zum Verwalten von Icons<\/h2>\n<p>Das Formular dieser L&ouml;sung hei&szlig;t <b>frmIconsVerwalten <\/b>und sieht wie in Bild 4 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_05\/pic_1564_001.png\" alt=\"Formular zum Verwalten von Icons\" width=\"549,559\" height=\"294,0526\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Formular zum Verwalten von Icons<\/span><\/b><\/p>\n<p>Es enth&auml;lt 45 Schaltfl&auml;chen in drei Reihen, die zur Anzeige der ersten verf&uuml;gbaren Bilder dienen.<\/p>\n<p>Wenn sich mehr als 45 Bilder in der Tabelle <b>MSysResources <\/b>befinden, k&ouml;nnen wir mit den beiden <b>Nach oben<\/b>&#8211; und <b>Nach unten<\/b>-Schaltfl&auml;chen reihenweise vor- und zur&uuml;cknavigieren.<\/p>\n<p>Oben sehen wir ein Textfeld namens <b>Filter<\/b>. Hier k&ouml;nnen wir einen Filterausdruck eingeben, mit dem wir die Bilder in der Tabelle <b>MSysResources <\/b>nach dem Namen filtern k&ouml;nnen. Die Anzeige wird nach der Eingabe eines jeden Zeichens aktualisiert und sucht stets an beliebiger Stelle im Dateinamen der Bilder nach dem Filterbegriff.<\/p>\n<p>Rechts daneben befindet sich eine Schaltfl&auml;che, mit der wir das aktuell markierte Bild aus der Tabelle <b>MSysResources <\/b>l&ouml;schen k&ouml;nnen.<\/p>\n<p>Die Schaltfl&auml;che <b>Hinzuf&uuml;gen <\/b>&ouml;ffnet einen Dateiauswahl-Dialog, mit dem wir weitere Bilder zur Tabelle <b>MSysResources <\/b>hinzuf&uuml;gen k&ouml;nnen.<\/p>\n<p>Unter der Anzeige der Bilder sehen wir die Anzahl der noch nachfolgend vorhandenen Bilder. Diese Anzahl &auml;ndert sich, wenn wir mit der <b>Nach unten<\/b>-Schaltfl&auml;che zu weiteren Zeilen navigieren.<\/p>\n<p>Schlie&szlig;lich k&ouml;nnen wir ein Bild anklicken und erhalten im Textfeld <b>Gew&auml;hltes Bild <\/b>den Namen des Bildes, das wir mit einem Klick auf die Schaltfl&auml;che rechts davon in die Zwischenablage kopieren und beispielsweise f&uuml;r die Eigenschaft <b>Bild <\/b>einer Schaltfl&auml;che einf&uuml;gen k&ouml;nnen.<\/p>\n<h2>Entwurf des Formulars<\/h2>\n<p>Das Formular enth&auml;lt im Wesentlichen herk&ouml;mmliche Steuerelemente (siehe Bild 5). Die 45 Schaltfl&auml;chen, die mit <b>cmd001 <\/b>bis <b>cmd045 <\/b>benannt sind, haben wir mit der Funktion aus dem Beitrag <b>Schaltfl&auml;chen-Matrix per VBA erzeugen <\/b>(<b>www.access-im-unternehmen.de\/1562<\/b>) erstellt.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_05\/pic_1564_005.png\" alt=\"Das Formular frmIconsVerwalten in der Entwurfsansicht\" width=\"549,559\" height=\"342,1029\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Das Formular frmIconsVerwalten in der Entwurfsansicht<\/span><\/b><\/p>\n<h2>F&uuml;llen der Schaltfl&auml;chen mit den verf&uuml;gbaren Bildern<\/h2>\n<p>Die Prozedur <b>LoadImages <\/b>l&auml;dt die Bilder aus der Tabelle <b>MSysResources <\/b>als Icons in die 45 Schaltfl&auml;chen (erster Teil in Listing 1). Sie nimmt optional mit dem Parameter <b>strFilter<\/b> ein Filterkriterium entgegen und stellt einen zweiten Parameter namens  <b>bolMove <\/b>zur Verf&uuml;gung. Dieser gibt an, ob die angezeigten Bilder bereits nach unten gescrollt wurden. Die Variable <b>strResourcetable <\/b>speichert den Namen der Tabelle, aus der die Bilder eingelesen werden, in diesem Fall <b>MSysResources<\/b>.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>LoadImages(<span style=\"color:blue;\">Optional<\/span> strFilter<span style=\"color:blue;\"> As String<\/span>, <span style=\"color:blue;\">Optional<\/span> bolMove<span style=\"color:blue;\"> As Boolean<\/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;\">Dim <\/span>cmd<span style=\"color:blue;\"> As <\/span>Access.CommandButton\r\n     <span style=\"color:blue;\">Dim <\/span>strSQL<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>lngIndex<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>lngFirstID<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strFirstPicture<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strResourcetable<span style=\"color:blue;\"> As String<\/span>\r\n     \r\n     strResourcetable = \"MSysResources\"    \r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb    \r\n     Me.Painting = <span style=\"color:blue;\">False<\/span>\r\n     \r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(strFilter) = 0<span style=\"color:blue;\"> Then<\/span>\r\n         strSQL = \"SELECT * FROM \" & strResourcetable & \" WHERE Extension = ''png'' ORDER BY Name ASC\"\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         strSQL = \"SELECT * FROM \" & strResourcetable & \" WHERE Extension = ''png'' AND Name LIKE ''*\" _\r\n             & strFilter & \"*'' ORDER BY Name ASC\"\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     \r\n     <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(strSQL, dbOpenDynaset)\r\n     <span style=\"color:blue;\">If <\/span>rst.EOF<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">Call<\/span> SchaltflaechenLeeren\r\n         Me.Painting = <span style=\"color:blue;\">True<\/span>\r\n         Me.cmdBildLoeschen.Enabled = <span style=\"color:blue;\">False<\/span>\r\n         <span style=\"color:blue;\">Exit Sub<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     strFirstPicture = Nz(rst!Name, \"\")\r\n     ... <\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Die Prozedur zum Laden von Bildern in die Schaltfl&auml;chen (Teil 1)<\/span><\/b><\/p>\n<p>Die Prozedur referenziert das aktuelle <b>Database<\/b>-Objekt mit der Variablen <b>db<\/b> und deaktiviert das Painting w&auml;hrend des Vorgangs, damit das Formular nicht flackert, wenn die Bilder zugewiesen werden.<\/p>\n<p>Die erste <b>If&#8230;Then<\/b>-Bedingung pr&uuml;ft, ob der Parameter <b>strFilter <\/b>einen Wert enth&auml;lt. Ist das nicht der Fall, stellt sie eine SQL-Abfrage zusammen, die alle Datens&auml;tze der Tabelle <b>MSysResources <\/b>enth&auml;lt, deren Feld <b>Extension <\/b>die Dateiendung <b>png <\/b>aufweist. Die Daten werden aufsteigend nach dem Inhalt des Feldes <b>Name <\/b>sortiert.<\/p>\n<p>Ist <b>strFilter <\/b>gef&uuml;llt, wird im <b>Else<\/b>-Zweig eine zus&auml;tzliche Bedingung in <b>strSQL <\/b>eingebaut, der das Feld <b>Name <\/b>nach dem enthaltenen Wert filtert.<\/p>\n<p>Dann erstellt die Prozedur ein Recordset auf Basis von <b>strSQL <\/b>und pr&uuml;ft, ob das Recordset leer ist.<\/p>\n<p>In diesem Fall ruft sie die Prozedur <b>SchaltflaechenLeeren <\/b>auf, die in einer Schleife &uuml;ber die Werte von <b>1 <\/b>bis <b>45 <\/b>sowohl die <b>Picture<\/b>&#8211; als auch die <b>ControlTipText<\/b>-Eigenschaften der entsprechenden Schaltfl&auml;chen leert:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>SchaltflaechenLeeren()\r\n     <span style=\"color:blue;\">Dim <\/span>lngIndex<span style=\"color:blue;\"> As Long<\/span>\r\n     For lngIndex = 1 To 45\r\n         <span style=\"color:blue;\">With<\/span> Me.Controls(\"cmd\" & Format(lngIndex, \"000\"))\r\n             .Picture = \"\"\r\n             .ControlTipText = \"\"\r\n         End <span style=\"color:blue;\">With<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> lngIndex\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Danach aktiviert die Prozedur das Painting wieder, deaktiviert die Schaltfl&auml;che <b>cmdBildLoeschen<\/b>, da nun kein zu l&ouml;schendes Bild angezeigt wird, und beendet die Prozedur mit <b>Exit Sub<\/b>.<\/p>\n<p>Wenn diese Bedingung jedoch erf&uuml;llt ist, tr&auml;gt die Prozedur den Namen des ersten Bildes in das Textfeld in die Variable <b>strFirstPicture <\/b>ein.<\/p>\n<p>Im nun folgenden Teil pr&uuml;ft eine verschachtelte <b>If&#8230;Then<\/b>-Bedingung, ob die Variable <b>bolMove <\/b>den Wert <b>True <\/b>enth&auml;lt und die Variable <b>strFilter <\/b>nicht leer ist. In diesem Fall stellt sie die Variable <b>lngStart <\/b>auf den Wert <b>0 <\/b>ein (siehe Listing 2). <b>lngStart <\/b>wird, damit wir auch beim n&auml;chsten Laden der Bilder auf ihren Wert zugreifen k&ouml;nnen, wie folgt ganz oben im Modul deklariert:<\/p>\n<pre>     ...    \r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> bolMove<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> <span style=\"color:blue;\">Len<\/span>(strFilter) = 0<span style=\"color:blue;\"> Then<\/span>\r\n             lngStart = 0\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">If <\/span>lngStart &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n         rst.AbsolutePosition = lngStart * 15 - 1\r\n         strFirstPicture = rst!Name\r\n         <span style=\"color:blue;\">Debug.Print<\/span> strFirstPicture\r\n         <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(strFilter) = 0<span style=\"color:blue;\"> Then<\/span>\r\n             strSQL = \"SELECT * FROM \" & strResourcetable & \" WHERE Extension = ''png'' AND Name &gt; ''\" _\r\n                 & strFirstPicture & \"'' ORDER BY Name ASC\"\r\n         <span style=\"color:blue;\">Else<\/span>\r\n             strSQL = \"SELECT * FROM \" & strResourcetable & \" WHERE Extension = ''png'' AND Name LIKE ''*\" _\r\n                 & strFilter & \"*'' AND Name &gt; ''\" & strFirstPicture & \"'' ORDER BY Name ASC\"\r\n         <span style=\"color:blue;\">End If<\/span>\r\n         <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(strSQL, dbOpenDynaset)\r\n     End If    \r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> rst.EOF<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rst.EOF\r\n             <span style=\"color:blue;\">Set<\/span> cmd = Me(\"cmd\" & Format(rst.AbsolutePosition + 1, \"000\"))\r\n             cmd.Picture = rst!Name\r\n             cmd.ControlTipText = rst!Name\r\n             <span style=\"color:blue;\">If <\/span>rst.AbsolutePosition = 44<span style=\"color:blue;\"> Then<\/span> <span style=\"color:blue;\">Exit Do<\/span>\r\n             rst.Move<span style=\"color:blue;\">Next<\/span>\r\n         <span style=\"color:blue;\">Loop<\/span>\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         Me.cmdBildLoeschen.Enabled = <span style=\"color:blue;\">False<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     ...<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Die Prozedur zum Laden von Bildern in die Schaltfl&auml;chen (Teil 2)<\/span><\/b><\/p>\n<pre><span style=\"color:blue;\">Private <\/span>lngStart<span style=\"color:blue;\"> As Long<\/span><\/pre>\n<h2>Recordset auf Basis vorheriger Scrollvorg&auml;nge ermitteln<\/h2>\n<p><b>lngStart <\/b>k&ouml;nnte anderenfalls in einem zuvor durchgef&uuml;hrten Ladevorgang der Bilder auf einen anderen Wert als <b>0 <\/b>eingestellt worden sein, weil der Benutzer bereits gescrollt hat. In diesem Fall k&ouml;nnen wir das aktuelle Recordset nur als Grundlage f&uuml;r ein neues Recordset verwenden. <b>lngStart<\/b> gibt prinzipiell die Zeile an, deren Bilder gerade in der obersten Zeile der Schaltfl&auml;chen angezeigt werden sollen. Hat der Benutzer zuvor einmal auf die <b>Nach unten<\/b>-Schaltfl&auml;che geklickt, hat <b>lngStart <\/b>beispielsweise nicht mehr den Wert <b>0<\/b>, sondern <b>1<\/b>. Das hei&szlig;t, wir k&ouml;nnen nicht die Bilder aus <b>MSysResources <\/b>beginnend mit dem ersten Bild anzeigen, sondern wir beginnen die Anzeige mit dem 16. Bild. Um ein Recordset zu erstellen, das die Bilder ab dem 16. Bild liefert, ben&ouml;tigen wir den Namen des Bildes dieser Position. Das holen wir uns innerhalb der Bedingung, die pr&uuml;ft, ob <b>lngStart <\/b>gr&ouml;&szlig;er als <b>0 <\/b>ist. Hier verschieben wir den Datensatzzeiger auf den letzten und dann wieder auf den ersten Datensatz, um alle Datens&auml;tze einmal eingelesen zu haben, um im n&auml;chsten Schritt die Position des Datensatzzeigers mit der Eigenschaft <b>AbsolutePosition <\/b>auf den entsprechenden Wert einzustellen, in diesem Fall <b>lngStart x 15 &#8211; 1<\/b>, also <b>14<\/b>. Danach k&ouml;nnen wir mit <b>rst!Name <\/b>den Wert des Feldes <b>Name <\/b>f&uuml;r diesen Datensatz ermitteln. Auf dieser Basis erstellen wir in <b>strSQL <\/b>eine neue Abfrage, die wieder in Abh&auml;ngigkeit von <b>strFilter<\/b> eine Filterbedingung enth&auml;lt oder auch nicht. Danach &ouml;ffnen wir ein neues Recordset auf Basis dieser SQL-Abfrage.<\/p>\n<p>Schlie&szlig;lich k&ouml;nnen wir die Elemente dieses Recordsets durchlaufen. Dabei referenzieren wir die Schaltfl&auml;che mit der entsprechenden Nummer und weisen dieser f&uuml;r die Eigenschaft <b>Picture <\/b>den Namen des Bildes zu. F&uuml;r den <b>ControlTipText <\/b>tragen wir ebenfalls diesen Namen ein, damit dieser beim &Uuml;berfahren mit der Maus eingeblendet wird. Das Recordset kann mehr als 45 Eintr&auml;ge enthalten, daher brechen wir beim Erreichen von <b>AbsolutePosition = 44 <\/b>den Vorgang ab &#8211; mehr Bilder k&ouml;nnen nicht in den Schaltfl&auml;chen angezeigt werden.<\/p>\n<p>Sollte das Recordset an dieser Stelle jedoch bereits leer sein, weil der Filter keine Ergebnisse zur&uuml;ckliefert, deaktivieren wir die Schaltfl&auml;che <b>cmdBildLoeschen<\/b>.<\/p>\n<h2>Verbleibende Schaltfl&auml;chen leeren<\/h2>\n<p>Hier kann es vorkommen, dass entweder der Filter so eingestellt ist, dass weniger als 45 Bilder angezeigt werden sollen oder wir haben bis zum Ende gescrollt und es verbleiben auf diese Weise weniger als 45 Bilder. Dann durchlaufen wir eine <b>For&#8230;Next<\/b>-Schleife mit der aktuellen Datensatzanzahl bis <b>45 <\/b>und l&ouml;schen die Bilder und die <b>ControlTipText<\/b>-Eigenschaft f&uuml;r die verbleibenden Schaltfl&auml;chen (siehe Listing 3).<\/p>\n<pre>     ...\r\n     For lngIndex = rst.RecordCount + 1 To 45\r\n         <span style=\"color:blue;\">Set<\/span> cmd = Me(\"cmd\" & Format(lngIndex, \"000\"))\r\n         cmd.Picture = \"\"\r\n         cmd.ControlTipText = \"\"\r\n     <span style=\"color:blue;\">Next<\/span> lngIndex\r\n     <span style=\"color:blue;\">If <\/span>rst.RecordCount &gt; 45<span style=\"color:blue;\"> Then<\/span>\r\n         Me.txtWeitere = \"... und \" & rst.RecordCount - 45 & \" weitere Bilder\"\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         Me.txtWeitere = \"\"\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">If <\/span>Me.cmd001.Picture = strFirstPicture<span style=\"color:blue;\"> Then<\/span>\r\n         Me.cmdUp.Enabled = <span style=\"color:blue;\">False<\/span>\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         Me.cmdUp.Enabled = <span style=\"color:blue;\">True<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">If <\/span>Me.cmd045.Picture = \"(keines)\"<span style=\"color:blue;\"> Then<\/span>\r\n         Me.cmdDown.Enabled = <span style=\"color:blue;\">False<\/span>\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         Me.cmdDown.Enabled = <span style=\"color:blue;\">True<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     Me.Painting = <span style=\"color:blue;\">True<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Die Prozedur zum Laden von Bildern in die Schaltfl&auml;chen (Teil 3)<\/span><\/b><\/p>\n<p>Wenn jedoch noch mehr als 45 Bilder verbleiben, tragen wir in das Textfeld <b>txtWeitere<\/b> die Anzahl der verbleibenden Bilder ein, damit der Benutzer wei&szlig;, wie viele Bilder er noch einblenden kann.<\/p>\n<p>Nun m&uuml;ssen wir uns noch um das Aktivieren und Deaktivieren der beiden Schaltfl&auml;chen zum Bl&auml;ttern in den Bildern k&uuml;mmern. Wenn das zuerst angezeigte Bild dem in <b>strFirstPicture <\/b>gespeicherten ersten Bild entspricht, soll <b>cmdUp <\/b>deaktiviert werden, da wir nicht weiter nach oben scrollen k&ouml;nnen.<\/p>\n<p>F&uuml;r die Schaltfl&auml;che <b>cmdDown <\/b>pr&uuml;fen wir die letzte Schaltfl&auml;che. Wenn diese f&uuml;r die Eigenschaft <b>Picture <\/b>den Wert <b>(keines) <\/b>enth&auml;lt, deaktivieren wir <b>cmdDown<\/b>, anderenfalls aktivieren wir diese Schaltfl&auml;che.<\/p>\n<p>Schlie&szlig;lich aktivieren wir noch das Painting, damit die &Auml;nderungen an den Schaltfl&auml;chen gezeichnet werden.<\/p>\n<h2>&Ouml;ffnen des Formulars<\/h2>\n<p>Die Prozedur <b>LoadImages <\/b>wird direkt beim &Ouml;ffnen des Formulars durch das Ereignis <b>Beim Laden <\/b>aufgerufen, damit die Bilder direkt geladen werden:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Load()\r\n     <span style=\"color:blue;\">Call<\/span> LoadImages\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Bilder in die Tabelle MSysResources aufnehmen<\/h2>\n<p>Damit wir ein oder mehrere Bilder in die Tabelle <b>MSysResources <\/b>laden k&ouml;nnen, haben wir die Schaltfl&auml;che <b>cmdBilderAuswaehlen <\/b>mit dem entsprechenden Code versehen. Diese Prozedur sieht wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdBilderAuswaehlen_Click()\r\n     <span style=\"color:blue;\">Dim <\/span>strFilelist<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strFiles()<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>var<span style=\"color:blue;\"> As Variant<\/span>\r\n     strFilelist = ChooseFiles\r\n     strFiles = <span style=\"color:blue;\">Split<\/span>(strFilelist, \"|\")\r\n     For Each var In strFiles\r\n         BildInRessourcenSpeichern CStr(var), _\r\n             \"MSysResources\"\r\n     <span style=\"color:blue;\">Next<\/span> var\r\n     <span style=\"color:blue;\">Call<\/span> LoadImages\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Sie verwendet zun&auml;chst die Funktion <b>ChooseFiles <\/b>aus dem Modul <b>mdlFiledialog<\/b>, um einen Dateidialog zur Mehrfachauswahl von Bildern zu &ouml;ffnen. Damit diese Funktion korrekt arbeitet, ben&ouml;tigen wir einen Verweis auf die Bibliothek <b>Microsoft Office 16.0 Object Library<\/b>. Diesen m&uuml;ssen Sie, wenn Sie die Objekte in Ihre eigene Datenbank importieren, noch hinzuf&uuml;gen.<\/p>\n<p>Die Funktion <b>ChooseFiles <\/b>liefert die gew&auml;hlten Dateipfade in einer Zeichenkette, in der alle Pfade durch das Pipe-Zeichen voneinander getrennt sind. Diese Pfade trennen wir mit der <b>Split<\/b>-Funktion so auf, dass sie in einem Array namens <b>strFiles <\/b>landen. Danach durchlaufen wir alle Eintr&auml;ge dieses Array und rufen f&uuml;r jede Bilddatei die Prozedur <b>BildInRessourcenSpeichern <\/b>auf. Dieser &uuml;bergeben wir jeweils den Pfad und die Zieltabelle.<\/p>\n<p>Nachdem alle Bilder importiert wurden, rufen wir noch die Prozedur <b>LoadImages <\/b>auf, damit die in den Schaltfl&auml;chen angezeigten Bilder aktualisiert werden.<\/p>\n<h2>Die Prozedur BildInRessourcenSpeichern<\/h2>\n<p>Die Prozedur <b>BildInRessourcenSpeichern <\/b>nimmt den Pfad des zu importierenden Bildes und die Zieltabelle als Parameter entgegen (siehe Listing 4). Sie extrahiert zun&auml;chst den reinen Dateinamen in die Variable <b>strDateiname<\/b>. Enth&auml;lt dieser einen Punkt, landet der Teil hinter dem Punkt in der Variablen <b>strDateiendung <\/b>und der Teil davor in <b>strDateinameOhneEndung<\/b>.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>BildInRessourcenSpeichern(strPfad<span style=\"color:blue;\"> As String<\/span>, strTabelle<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     <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>rstAttachment<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>fld2<span style=\"color:blue;\"> As <\/span>DAO.Field2\r\n     <span style=\"color:blue;\">Dim <\/span>strDateiname<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strDateiendung<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strDateinameOhneEndung<span style=\"color:blue;\"> As String<\/span>\r\n     strDateiname = Mid$(strPfad, <span style=\"color:blue;\">InStrRev<\/span>(strPfad, \"\\\") + 1)\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">InStrRev<\/span>(strDateiname, \".\") &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n         strDateiendung = <span style=\"color:blue;\">Mid<\/span>(strDateiname, <span style=\"color:blue;\">InStrRev<\/span>(strDateiname, \".\") + 1)\r\n         strDateinameOhneEndung = <span style=\"color:blue;\">Left<\/span>(strDateiname, <span style=\"color:blue;\">InStrRev<\/span>(strDateiname, \".\") - 1)\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(strTabelle, dbOpenDynaset)\r\n     rst.FindFirst \"Name=''\" & strDateinameOhneEndung & \"''\"\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> rst.NoMatch<span style=\"color:blue;\"> Then<\/span>\r\n         rst.Delete\r\n         rst.MoveFirst\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     rst.Add<span style=\"color:blue;\">New<\/span>\r\n     rst!Type = \"img\"\r\n     rst!Extension = strDateiendung\r\n     rst!Name = strDateinameOhneEndung\r\n     <span style=\"color:blue;\">Set<\/span> rstAttachment = rst!Data.Value\r\n     <span style=\"color:blue;\">With<\/span> rstAttachment\r\n         .Add<span style=\"color:blue;\">New<\/span>\r\n         <span style=\"color:blue;\">Set<\/span> fld2 = !FileData\r\n         fld2.LoadFromFile strPfad\r\n         !FileName = strDateiname\r\n         .Update\r\n     End <span style=\"color:blue;\">With<\/span>\r\n     rst.Update\r\n     rst.Close\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Speichern eines Bildes in der Tabelle MSysResources<\/span><\/b><\/p>\n<p>Dann &ouml;ffnet die Prozedur ein Recordset auf Basis der Tabelle <b>MSysResources<\/b>. Hier sucht sie zun&auml;chst nach einem Eintrag, der den gleichen Bildnamen enth&auml;lt wie in <b>strDateinameOhneEndung<\/b>. Ist ein solcher vorhanden, wird dieser mit der <b>Delete<\/b>-Methode des <b>Recordset<\/b>-Objekts gel&ouml;scht und der Datensatzzeiger wieder auf den ersten Datensatz bewegt.<\/p>\n<p>Dann legt sie einen neuen Datensatz an und weist den Feldern <b>Name<\/b>, <b>Type <\/b>und <b>Extension <\/b>die entsprechenden Werte zu.<\/p>\n<p>Anschlie&szlig;end folgt die einzuf&uuml;gende Datei. Dazu &ouml;ffnen wir ein neues Recordset mit dem Typ <b>Recordset2<\/b>, dem wir mit der Eigenschaft <b>Value <\/b>des Feldes <b>Data <\/b>das interne Recordset f&uuml;r das <b>Attachment<\/b>-Feld zuweisen. Auch hier legen wir einen neuen Datensatz an. Der <b>Field2<\/b>-Variablen <b>fld2 <\/b>weisen wir das Feld <b>FileData <\/b>zu. In dieses k&ouml;nnen wir mit der Methode <b>LoadFromFile <\/b>die Datei aus <b>strPfad <\/b>laden. Au&szlig;erdem stellen wir das Feld <b>Filename <\/b>auf <b>strDateiname <\/b>ein. Schlie&szlig;lich speichern wir das interne Recordset und auch das eigentliche Recordset jeweils mit der <b>Update<\/b>-Methode.<\/p>\n<p>Damit ist das Bild in der Tabelle <b>MSysResources <\/b>gespeichert.<\/p>\n<h2>L&ouml;schen eines Bildes<\/h2>\n<p>Die Schaltfl&auml;che <b>cmdBildLoeschen <\/b>soll das aktuell markierte Bild aus der Tabelle <b>MSysResources <\/b>l&ouml;schen.<\/p>\n<p>Sie l&ouml;st die folgende Prozedur aus, die schlicht den Datensatz aus der Tabelle <b>MSysResources <\/b>l&ouml;scht, dessen Name mit dem Namen aus dem Textfeld <b>GewaehltesBild <\/b>&uuml;bereinstimmt:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdBildLoeschen_Click()\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     db.Execute \"DELETE FROM MSysResources WHERE Name = ''\" _\r\n         & Me.txtGewaehltesBild & \"''\", dbFailOnError\r\n     LoadImages Nz(Me.txtFilter, \"\")\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Anschlie&szlig;end initiiert die Prozedur das erneute Laden der nunmehr aktualisierten Bilder.<\/p>\n<h2>Durch die Bilder scrollen<\/h2>\n<p>Die beiden Schaltfl&auml;chen <b>cmdDown <\/b>und <b>cmdUp <\/b>sollen jeweils die Bilder der n&auml;chsten oder der vorherigen Zeile anzeigen. Die Schaltfl&auml;che <b>cmdDown <\/b>l&ouml;st die folgende Prozedur aus. Diese erh&ouml;ht den Wert der Variablen <b>lngStart <\/b>um <b>1 <\/b>und l&ouml;st ein erneutes Laden der Bilder aus:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdDown_Click()\r\n     lngStart = lngStart + 1\r\n     <span style=\"color:blue;\">Call<\/span> LoadImages(Nz(Me.txtFilter, \"\"), <span style=\"color:blue;\">True<\/span>)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Prozedur <b>cmdUp_Click <\/b>arbeitet &auml;hnlich &#8211; sie vermindert <b>lngStart <\/b>jedoch um <b>1<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdUp_Click()\r\n     lngStart = lngStart - 1\r\n     <span style=\"color:blue;\">Call<\/span> LoadImages(Nz(Me.txtFilter, \"\"), <span style=\"color:blue;\">True<\/span>)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Kopieren des aktuellen Bildnamens in die Zwischenablage<\/h2>\n<p>Das Kopieren in die Zwischenablage erledigen wir durch den Aufruf der Prozedur <b>InZwischenablage<\/b>, die wir im Beitrag <b>Zwischenablage per VBA, 64-Bit-Version <\/b>(<b>www.access-im-unternehmen.de\/1247<\/b>) vorstellen:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdInZwischenablage_Click()\r\n     <span style=\"color:blue;\">Call<\/span> Inzwischenablage(Nz(Me.txtGewaehltesBild, \"\"))\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Filtern der Bilder<\/h2>\n<p>Mit den bereits beschriebenen Prozeduren bleibt nur noch wenig Aufwand f&uuml;r das Filtern der Bilder &uuml;brig. Wenn der Benutzer den Inhalt des Textfeldes <b>txtFilter <\/b>&auml;ndert, wird die folgende Prozedur ausgel&ouml;st. Sie ruft die Prozedur <b>LoadImages <\/b>auf und &uuml;bergibt als ersten Parameter den aktuellen Inhalt als Filter:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>txtFilter_Change()\r\n     LoadImages Me.txtFilter.Text\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Anklicken eines Bildes<\/h2>\n<p>Durch Anklicken einer der Bild-Schaltfl&auml;chen soll das aktuelle Bild in das Textfeld <b>txtGewaehltesBild <\/b>eingetragen werden.<\/p>\n<p>F&uuml;r jede der 45 Schaltfl&auml;chen haben wir f&uuml;r die Ereigniseigenschaft <b>Beim Klicken <\/b>die Funktion <b>cmdClick <\/b>mit dem jeweiligen Index der Schaltfl&auml;che eingetragen, also zum Beispiel <b>=cmdClick(1)<\/b>. Die dadurch aufgerufene Funktion sieht wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Private Function <\/span>cmdClick(lngID<span style=\"color:blue;\"> As Long<\/span>)\r\n     Me.txtGewaehltesBild = Me.Controls(\"cmd\" _\r\n         & Format(lngID, \"000\")).ControlTipText\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> IsNull(Me.txtGewaehltesBild)<span style=\"color:blue;\"> Then<\/span>\r\n         Me.cmdBildLoeschen.Enabled = <span style=\"color:blue;\">True<\/span>\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         Me.cmdBildLoeschen.Enabled = <span style=\"color:blue;\">False<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Sie tr&auml;gt den <b>ControlTipText <\/b>der jeweiligen Schaltfl&auml;che in das Textfeld <b>txtGewaehltesBild <\/b>ein. Je nachdem, ob es sich um eine Schaltfl&auml;che mit oder ohne Bild handelt, ist <b>txtGewaehltesBild <\/b>anschlie&szlig;end gef&uuml;llt oder leer. Abh&auml;ngig davon aktivieren oder deaktivieren wir die Schaltfl&auml;che <b>cmdBildLoeschen<\/b>.<\/p>\n<h2>Leeren der Bilder beim Entladen des Formulars<\/h2>\n<p>Wenn das Formular geschlossen wird, sollen die Bild-Schaltfl&auml;chen noch geleert werden.<\/p>\n<p>Das erledigen wir mit der folgenden Prozedur, die alle Schaltfl&auml;chen durchl&auml;uft und die Eigenschaften <b>Picture <\/b>und <b>ControlTipText <\/b>leert:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Unload(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>i<span style=\"color:blue;\"> As Integer<\/span>\r\n     For i = 1 To 45\r\n         <span style=\"color:blue;\">With<\/span> Me.Controls(\"cmd\" & Format(i, \"000\"))\r\n             .Picture = \"\"\r\n             .ControlTipText = \"\"\r\n         End <span style=\"color:blue;\">With<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> i\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Importieren der L&ouml;sung in eine eigene Datenbank<\/h2>\n<p>Wenn Sie diese L&ouml;sung in eine eigene Datenbank importieren m&ouml;chten, f&uuml;hren Sie die folgenden Schritte durch:<\/p>\n<ul>\n<li>Hinzuf&uuml;gen eines Verweises auf die Bibliothek <b>Microsoft Office 16.0 Object Library<\/b><\/li>\n<li>Importieren aller Objekte in die Zieldatenbank<\/li>\n<\/ul>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Die hier verwendete L&ouml;sung haben wir in einer weiteren L&ouml;sung integriert.<\/p>\n<p>Diese finden Sie im Beitrag <b>Schnelle Schaltfl&auml;chen mit Stil <\/b>(<b>www.access-im-unternehmen.de\/1563<\/b>).<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>IconsInDerDatenbankVerwalten.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/A69596E3-AFD7-4A6E-89E8-36E6F58984B0\/aiu_1564.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mit den neueren Versionen von Access ab der Version 2010 kann man Icons, die an verschiedenen Stellen der Benutzeroberfl&auml;che wie in Bildsteuerelementen oder Schaltfl&auml;chen angezeigt werden sollen, relativ einfach verwalten. Sie landen nach dem Einf&uuml;gen in einer Systemtabelle namens MSysResources, die ein Anlagefeld zum Speichern der Bilddateien und weitere Felder f&uuml;r die Metadaten wie Bildname oder Dateiendung enth&auml;lt. Allerdings ist die Verwaltung nicht perfekt gel&ouml;st. Daher stellen wir in diesem Beitrag ein Formular vor, mit dem sich die Bilder wesentlich besser hinzuf&uuml;gen lassen. Au&szlig;erdem enth&auml;lt das Formular eine Suchfunktion, mit der sich die Bilder nach dem Namen filtern lassen, sowie eine &Uuml;bersicht der Bilder, mit der sich die jeweiligen Bilddateien anschauen lassen. Schlie&szlig;lich k&ouml;nnen wir auch noch den Bildnamen herausfinden, um das gew&uuml;nschte Icon schnell einer Schaltfl&auml;che oder einem Bildsteuerelement zuweisen zu k&ouml;nnen.<\/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":[662025,66052025,44000027],"tags":[],"class_list":["post-55001564","post","type-post","status-publish","format-standard","hentry","category-662025","category-66052025","category-Loesungen"],"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>Icons in der Datenbank verwalten - 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\/Icons_in_der_Datenbank_verwalten\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Icons in der Datenbank verwalten\" \/>\n<meta property=\"og:description\" content=\"Mit den neueren Versionen von Access ab der Version 2010 kann man Icons, die an verschiedenen Stellen der Benutzeroberfl&auml;che wie in Bildsteuerelementen oder Schaltfl&auml;chen angezeigt werden sollen, relativ einfach verwalten. Sie landen nach dem Einf&uuml;gen in einer Systemtabelle namens MSysResources, die ein Anlagefeld zum Speichern der Bilddateien und weitere Felder f&uuml;r die Metadaten wie Bildname oder Dateiendung enth&auml;lt. Allerdings ist die Verwaltung nicht perfekt gel&ouml;st. Daher stellen wir in diesem Beitrag ein Formular vor, mit dem sich die Bilder wesentlich besser hinzuf&uuml;gen lassen. Au&szlig;erdem enth&auml;lt das Formular eine Suchfunktion, mit der sich die Bilder nach dem Namen filtern lassen, sowie eine &Uuml;bersicht der Bilder, mit der sich die jeweiligen Bilddateien anschauen lassen. Schlie&szlig;lich k&ouml;nnen wir auch noch den Bildnamen herausfinden, um das gew&uuml;nschte Icon schnell einer Schaltfl&auml;che oder einem Bildsteuerelement zuweisen zu k&ouml;nnen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Icons_in_der_Datenbank_verwalten\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-02T17:46:33+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg01.met.vgwort.de\/na\/c2b1670c5aac49b380e16a64927c08e6\" \/>\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\\\/Icons_in_der_Datenbank_verwalten\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Icons_in_der_Datenbank_verwalten\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Icons in der Datenbank verwalten\",\"datePublished\":\"2025-10-02T17:46:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Icons_in_der_Datenbank_verwalten\\\/\"},\"wordCount\":2677,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Icons_in_der_Datenbank_verwalten\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/c2b1670c5aac49b380e16a64927c08e6\",\"articleSection\":[\"2025\",\"5\\\/2025\",\"L\u00f6sungen\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Icons_in_der_Datenbank_verwalten\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Icons_in_der_Datenbank_verwalten\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Icons_in_der_Datenbank_verwalten\\\/\",\"name\":\"Icons in der Datenbank verwalten - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Icons_in_der_Datenbank_verwalten\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Icons_in_der_Datenbank_verwalten\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/c2b1670c5aac49b380e16a64927c08e6\",\"datePublished\":\"2025-10-02T17:46:33+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Icons_in_der_Datenbank_verwalten\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Icons_in_der_Datenbank_verwalten\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Icons_in_der_Datenbank_verwalten\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/c2b1670c5aac49b380e16a64927c08e6\",\"contentUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/c2b1670c5aac49b380e16a64927c08e6\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Icons_in_der_Datenbank_verwalten\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Icons in der Datenbank verwalten\"}]},{\"@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":"Icons in der Datenbank verwalten - 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\/Icons_in_der_Datenbank_verwalten\/","og_locale":"de_DE","og_type":"article","og_title":"Icons in der Datenbank verwalten","og_description":"Mit den neueren Versionen von Access ab der Version 2010 kann man Icons, die an verschiedenen Stellen der Benutzeroberfl&auml;che wie in Bildsteuerelementen oder Schaltfl&auml;chen angezeigt werden sollen, relativ einfach verwalten. Sie landen nach dem Einf&uuml;gen in einer Systemtabelle namens MSysResources, die ein Anlagefeld zum Speichern der Bilddateien und weitere Felder f&uuml;r die Metadaten wie Bildname oder Dateiendung enth&auml;lt. Allerdings ist die Verwaltung nicht perfekt gel&ouml;st. Daher stellen wir in diesem Beitrag ein Formular vor, mit dem sich die Bilder wesentlich besser hinzuf&uuml;gen lassen. Au&szlig;erdem enth&auml;lt das Formular eine Suchfunktion, mit der sich die Bilder nach dem Namen filtern lassen, sowie eine &Uuml;bersicht der Bilder, mit der sich die jeweiligen Bilddateien anschauen lassen. Schlie&szlig;lich k&ouml;nnen wir auch noch den Bildnamen herausfinden, um das gew&uuml;nschte Icon schnell einer Schaltfl&auml;che oder einem Bildsteuerelement zuweisen zu k&ouml;nnen.","og_url":"https:\/\/access-im-unternehmen.de\/Icons_in_der_Datenbank_verwalten\/","og_site_name":"Access im Unternehmen","article_published_time":"2025-10-02T17:46:33+00:00","og_image":[{"url":"http:\/\/vg01.met.vgwort.de\/na\/c2b1670c5aac49b380e16a64927c08e6","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\/Icons_in_der_Datenbank_verwalten\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Icons_in_der_Datenbank_verwalten\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Icons in der Datenbank verwalten","datePublished":"2025-10-02T17:46:33+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Icons_in_der_Datenbank_verwalten\/"},"wordCount":2677,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Icons_in_der_Datenbank_verwalten\/#primaryimage"},"thumbnailUrl":"http:\/\/vg01.met.vgwort.de\/na\/c2b1670c5aac49b380e16a64927c08e6","articleSection":["2025","5\/2025","L\u00f6sungen"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Icons_in_der_Datenbank_verwalten\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Icons_in_der_Datenbank_verwalten\/","url":"https:\/\/access-im-unternehmen.de\/Icons_in_der_Datenbank_verwalten\/","name":"Icons in der Datenbank verwalten - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Icons_in_der_Datenbank_verwalten\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Icons_in_der_Datenbank_verwalten\/#primaryimage"},"thumbnailUrl":"http:\/\/vg01.met.vgwort.de\/na\/c2b1670c5aac49b380e16a64927c08e6","datePublished":"2025-10-02T17:46:33+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Icons_in_der_Datenbank_verwalten\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Icons_in_der_Datenbank_verwalten\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Icons_in_der_Datenbank_verwalten\/#primaryimage","url":"http:\/\/vg01.met.vgwort.de\/na\/c2b1670c5aac49b380e16a64927c08e6","contentUrl":"http:\/\/vg01.met.vgwort.de\/na\/c2b1670c5aac49b380e16a64927c08e6"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Icons_in_der_Datenbank_verwalten\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Icons in der Datenbank verwalten"}]},{"@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\/55001564","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=55001564"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001564\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001564"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001564"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001564"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}