{"id":55000755,"date":"2011-02-01T00:00:00","date_gmt":"2020-05-22T22:00:45","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=755"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Anlagen_verwalten_ohne_Standarddialog","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Anlagen_verwalten_ohne_Standarddialog\/","title":{"rendered":"Anlagen verwalten ohne Standarddialog"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg05.met.vgwort.de\/na\/c973186bb7234aac83631ab0bfe71906\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Wer den Anlagen-Datentyp und das dazugeh&ouml;rige Steuerelement mag, m&ouml;chte vielleicht die Funktionen des Dialogs zum Verwalten von Anlagen gleich in eigene Formulare integrieren. Damit w&uuml;rde man auch die etwas un&uuml;bersichtliche Darstellung in den Griff bekommen. Wie Sie ein solches Formular erstellen und einsetzen, lesen Sie in diesem Beitrag.<\/b><\/p>\n<p>Das Anlage-Feld ist in der Standardansicht nicht besonders &uuml;bersichtlich, erst nach dem &Ouml;ffnen des Anlagen-Dialogs erscheint eine Liste der im Anlagefeld enthaltenen Dateien (s. Bild 1).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_01\/AnlagendialogSelbstgebaut-web-images\/pic001.png\" alt=\"pic001.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Anlage-Feld mit Anlagen-Dialog<\/span><\/b><\/p>\n<p>Ziel dieses Beitrags ist, alle im Anlage-Feld gespeicherten Dateien gleich in einer Liste anzuzeigen und die Schaltfl&auml;chen bereitzustellen, um Dateien hinzuzuf&uuml;gen, zu entfernen, zu &ouml;ffnen, unter einem anderen Dateinamen zu speichern oder alle enthaltenen Dateien zu speichern &#8211; also genau wie im Standarddialog zur Verwaltung von Anlagen.<\/p>\n<p>Um dieses Element einfach wiederverwertbar zu machen, verwenden wir dazu ein Unterformular, dem wir beim &Ouml;ffnen einen Parameter mit dem Verweis auf das entsprechende Anlage-Feld &uuml;bergeben. Das Unterformular soll die Dateien dann im einfachsten Fall in einem Listenfeld anzeigen. Denkbar w&auml;re nat&uuml;rlich auch der Einsatz eines ListView-Steuerelements, das zus&auml;tzlich noch dem Dateityp entsprechende Icons anzeigen k&ouml;nnte.<\/p>\n<p>Das ben&ouml;tigte Unterformular sieht im Entwurf wie in Bild 1 &#8211; mit Ausnahme der Schaltfl&auml;che <b>Abbrechen<\/b>, die ohnehin keinen anderen Nutzen als die <b>OK<\/b>-Schaltfl&auml;che besitzt.<\/p>\n<p><img decoding=\"async\" class=\"abbildung\" src=\"..\/fileadmin\/_temp_\/2011_01\/AnlagendialogSelbstgebaut-web-images\/pic002.png\" alt=\"pic002.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Entwurf des Anlagen-Unterformulars<\/span><\/b><\/p>\n<p>Das Hauptformular muss dem Unterformular irgendwie mitteilen, aus welchem Feld die anzuzeigenden Dateien eingelesen werden sollen. Da das &uuml;bergeordnete Formular vermutlich einen Datensatz der Tabelle anzeigt, in dem sich das Anlagenfeld befindet, greifen wir entweder vom Unterformular auf das Hauptformular zu oder &uuml;bergeben vom Hauptformular aus eine Referenz auf dieses Feld. F&uuml;r den Moment verwenden wir im Unterformular zwei Objektvariablen namens <b>m_AttachmentRecordset <\/b>und <b>m_Attachmentfield<\/b>, die wie folgt im Klassenmodul des Formulars deklariert sind:<\/p>\n<pre>Dim m_Attachmentfield As DAO.Field2\r\nDim m_AttachmentRecordset As DAO.Recordset<\/pre>\n<p>Au&szlig;erdem brauchen wir einen Verweis auf das Hauptformular, damit wir sp&auml;ter auf das Wechseln des Datensatzes reagieren k&ouml;nnen:<\/p>\n<pre>Dim WithEvents m_Form As Form<\/pre>\n<p>Zus&auml;tzlich definieren wir eine &ouml;ffentliche Prozedur zum Initialisieren des Formulars (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-53-anchor\">Listing 1<\/a><\/span>).<\/p>\n<p class=\"listingueberschrift\">Listing 1: Initialisieren des Anlagen-Formulars<\/p>\n<pre>Public Sub Initialize(frm As Form, strAttachmentfield As String)\r\n    Set m_Form = frm\r\n    m_Form.OnCurrent = &quot;[Event Procedure]&quot;\r\n    Set m_AttachmentRecordset = frm.RecordsetClone\r\n    Set m_Attachmentfield = rstAttachment.Fields(strAttachmentfield)\r\n    AnlagenAktualisieren\r\nEnd Sub<\/pre>\n<p>Diese Prozedur speichert den Verweis auf das Formular, in dem sich das Unterformular befindet. Die Variable <b>m_AttachmentRecordset <\/b>wird mit einem Verweis auf den <b>RecordsetClone <\/b>des Hauptformulars gef&uuml;llt und <b>m_AttachmentField <\/b>mit einem Verweis auf das Anlage-Feld selbst.<\/p>\n<p>Schlie&szlig;lich ruft die Prozedur noch eine weitere Routine namens <b>AnlagenAktualisieren <\/b>auf, die daf&uuml;r verantwortlich ist, das Listenfeld mit den im Anlagefeld des aktuellen Datensatzes enthaltenen Anlagen zu f&uuml;llen &#8211; dazu sp&auml;ter mehr.<\/p>\n<p class=\"listingueberschrift\">Listing 2: Anlagefeld aktualisieren<\/p>\n<pre>Private Sub AnlagenAktualisieren()\r\n    m_AttachmentRecordset.Bookmark = m_Form.Recordset.Bookmark\r\n    If Not m_Form.NewRecord Then\r\n        AnlagenAuflisten\r\n        Me!lstAnlagen = Me!lstAnlagen.ItemData(0)\r\n    Else\r\n        Me!lstAnlagen.RowSource = &quot;&quot;\r\n    End If\r\n    SchaltflaechenAktivieren\r\nEnd Sub<\/pre>\n<p>Da das Formular <b>frmAnlagen <\/b>sp&auml;ter als Unterformular dienen soll, f&uuml;gen Sie es auch w&auml;hrend der Entwicklung in ein weiteres Formular ein. In unserem Fall hei&szlig;t dieses Formular <b>frmKunden <\/b>und zeigt die Daten der Tabelle <b>tblKunden <\/b>der Beispieldatenbank an (s. Bild 3).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_01\/AnlagendialogSelbstgebaut-web-images\/pic004.png\" alt=\"pic004.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Das Anlageformular als Unterformular<\/span><\/b><\/p>\n<p>F&uuml;gen Sie das Unterformular in das Hauptformular ein und legen Sie f&uuml;r das Hauptformular eine Ereignisprozedur f&uuml;r die Eigenschaft <b>Beim Laden <\/b>an, die wie folgt aussieht:<\/p>\n<pre>Private Sub Form_Load()\r\n    Me!frmAnlagen.Form.Initialize Me, &quot;Dateianlagen&quot;\r\nEnd Sub<\/pre>\n<p>Diese Prozedur &uuml;bergibt nur einen Verweis auf das Hauptformular sowie den Namen des Anlage-Feldes an die <b>Initialize<\/b>-Prozedur des Unterformulars.<\/p>\n<p><b>Anlagen aktualisieren<\/b><\/p>\n<p>Die oben referenzierte Prozedur <b>AnlagenAktualisieren <\/b>fasst einige Anweisungen zusammen, die sowohl beim erstmaligen Anzeigen des Anlagen-Listenfeldes, als auch beim sp&auml;teren Datensatzwechsel im Hauptformular aufgerufen werden sollen (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-51-anchor\">Listing 2<\/a><\/span>). Die Prozedur pr&uuml;ft zun&auml;chst, ob das Hauptformular &uuml;berhaupt einen Datensatz anzeigt. Falls ja, verschiebt es den Datensatzzeiger des unter <b>m_AttachmentRecordset <\/b>referenzierten Recordsets auf den aktuell im Formular angezeigten Datensatz und ruft die Routine <b>AnlagenAuflisten <\/b>auf, welche die Anlagen ausliest und das Listenfeld mit deren Dateinamen f&uuml;llt. Zeigt das Formular einen neuen Datensatz an, wird lediglich das Listenfeld geleert. In beiden F&auml;llen ruft die Prozedur die gleich vorgestellte Routine <b>SchaltflaechenAktualisieren <\/b>auf.<\/p>\n<p class=\"listingueberschrift\">Listing 3: F&uuml;llen des Listenfeldes mit den Anlagen<\/p>\n<pre>Public Sub AnlagenAuflisten()\r\n    Dim db As DAO.Database\r\n    Dim rstAttachments As Recordset2\r\n    Dim rstAttachmentsSortiert As Recordset2\r\n    Set rstAttachments = m_Attachmentfield.Value\r\n    rstAttachments.Sort = &quot;Filename ASC&quot;\r\n    Set rstAttachmentsSortiert = rstAttachments.OpenRecordset\r\n    Me!lstAnlagen.RowSource = &quot;&quot;\r\n    Do While Not rstAttachments.EOF\r\n         Me!lstAnlagen.AddItem rstAttachments!FileName\r\n        rstAttachments.MoveNext\r\n    Loop\r\nEnd Sub<\/pre>\n<p><b>Liste mit Anlagen f&uuml;llen<\/b><\/p>\n<p>Die Prozedur <b>AnlagenAuflisten<\/b> f&uuml;llt das Listenfeld des Formulars, das wir <b>lstAnlagen <\/b>nennen, mit den Dateinamen der im &uuml;bergebenen Feld enthaltenen Dateien. Damit wir die <b>AddItem <\/b>und die <b>RemoveItem<\/b>-Methoden des Listenfeldes verwenden k&ouml;nnen, stellen wir die Eigenschaft <b>Herkunftsart <\/b>dieses Steuerelements auf <b>Wertliste <\/b>ein. Die Prozedur f&uuml;llt dann das Listenfeld mit den Namen der im Anlagenfeld gespeicherten Dateien &#8211; und zwar in alphabetischer Reihenfolge (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-55-anchor\">Listing 3<\/a><\/span>). Das zuk&uuml;nftige Unterformular gestalten wir noch ein wenig &uuml;bersichtlicher, indem wir die Eigenschaften <b>Navigationsschaltfl&auml;che<\/b>, <b>Datensatzmarkierer <\/b>und <b>Bildlaufleisten <\/b>jeweils auf den Wert <b>Nein <\/b>einstellen.<\/p>\n<p class=\"listingueberschrift\">Listing 5: Ausl&ouml;sen des Hinzuf&uuml;gens einer Anlage aus einer Datei<\/p>\n<pre>Private Sub cmdHinzufuegen_Click()\r\n    Dim objFiles As clsFiles\r\n    Dim strDateien As String\r\n    Dim strDateienArray() As String\r\n    Dim i As Integer\r\n    Set objFiles = New clsFiles\r\n    With objFiles\r\n        .Filter = &quot;Alle Dateien (*.*)&quot;\r\n        .StartDir = CurrentProject.Path\r\n        .Title = &quot;Datei(en) ausw&auml;hlen&quot;\r\n        .MultipleFiles = True\r\n        strDateien = .OpenFileName\r\n    End With\r\n    strDateienArray() = Split(strDateien, vbTab)\r\n    For i = LBound(strDateienArray) To UBound(strDateienArray)\r\n        AnlageHinzufuegen strDateienArray(i)\r\n    Next i\r\n    AnlagenAuflisten\r\nEnd Sub<\/pre>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Steuerelemente aktivieren und deaktivieren<\/p>\n<p>Bevor wir die Steuerelemente selbst mit Leben f&uuml;llen, sollen diese zun&auml;chst, je nach den angezeigten Daten, aktiviert oder deaktiviert werden. Die <b>Hinzuf&uuml;gen<\/b>-Schaltfl&auml;che etwa ist immer aktiviert. Die Schaltfl&auml;che <b>Entfernen <\/b>hingegen soll nur benutzbar sein, wenn die Liste Dateien anzeigt und mindestens eine davon markiert ist. Das gleiche gilt f&uuml;r die Schaltfl&auml;chen <b>&Ouml;ffnen <\/b>und <b>Speichern unter&#8230;<\/b>. Die Schaltfl&auml;che <b>Alle speichern <\/b>wiederum darf ebenfalls immer aktiviert sein &#8211; au&szlig;er wenn die Liste keinerlei Anlagen anzeigt.<\/p>\n<p>Die Pr&uuml;fung des Zustands des Listenfeldes und die davon abh&auml;ngige Aktivierung\/Deaktivierung der Schaltfl&auml;chen nimmt die folgende Prozedur vor, die Sie ebenfalls im Klassenmodul des Formulars anlegen (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-57-anchor\">Listing 4<\/a><\/span>).<\/p>\n<p class=\"listingueberschrift\">Listing 4: Aktiviere und Deaktivieren der Schaltfl&auml;chen<\/p>\n<pre>Private Sub SchaltflaechenAktivieren()\r\n    Dim bolDateiAusgewaehlt As Boolean\r\n    bolDateiAusgewaehlt = Not Me!lstAnlagen.ItemsSelected.Count = 0\r\n    Me!cmdEntfernen.Enabled = bolDateiAusgewaehlt\r\n    Me!cmdOeffnen.Enabled = bolDateiAusgewaehlt\r\n    Me!cmdSpeichernUnter.Enabled = bolDateiAusgewaehlt\r\n    Me!cmdAllesSpeichern.Enabled = Not (Me!lstAnlagen.ListCount = 0)\r\nEnd Sub<\/pre>\n<p><!--30percent--><\/p>\n<p>Diese Routine rufen wir zu verschiedenen Gelegenheiten auf, zum Beispiel in der Prozedur <b>AnlagenAktualisieren<\/b>. Auch nach dem &auml;ndern der Auswahl im Listenfeld sollen die Schaltfl&auml;chen aktiviert beziehungsweise deaktiviert werden. Dies erledigt die Prozedur, die durch das Ereignis <b>Nach Aktualisierung <\/b>des Listenfeldes ausgel&ouml;st wird:<\/p>\n<pre>Private Sub lstAnlagen_AfterUpdate()\r\n    SchaltflaechenAktivieren\r\nEnd Sub<\/pre>\n<p><b>Hinzuf&uuml;gen von Anlagen<\/b><\/p>\n<p>Ein Klick auf die Schaltfl&auml;che <b>Hinzuf&uuml;gen&#8230; <\/b>soll einen <b>Datei ausw&auml;hlen<\/b>-Dialog anzeigen, mit dem der Benutzer einen oder mehrere Dateien ausw&auml;hlt. Die Logik zum Anzeigen der Dateidialoge (wir werden sp&auml;ter auch noch einen <b>Datei speichern<\/b>&#8211; und <b>Verzeichnis ausw&auml;hlen<\/b>-Dialog ben&ouml;tigen) liefert die Klasse <b>clsFiles<\/b>, die wir im Beitrag <b>Dateidialog-Klasse <\/b>vorstellen (<b>www.access-im-unternehmen.de\/<\/b>)756.<\/p>\n<p>Die Prozedur aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-56-anchor\">Listing 5<\/a><\/span> instanziert die Klasse, stellt einige Werte wie den Filter, den Titel, das Startverzeichnis und die Mehrfachauswahl ein und ruft den Dateidialog auf.<\/p>\n<p class=\"listingueberschrift\">Listing 9: &Ouml;ffnen der in einer Anlage enthaltenen Datei<\/p>\n<pre>Private Sub AnlageOeffnen()\r\n    Dim objFiles As clsFiles\r\n    Dim strAnlage As String\r\n    If Me!lstAnlagen.ItemsSelected.Count &gt; 1 Then\r\n        MsgBox &quot;Es wird nur die erste ausgew&auml;hlte Anlage ge&ouml;ffnet.&quot;\r\n    End If\r\n    strAnlage = Me!lstAnlagen.ItemData(Me!lstAnlagen.ItemsSelected(0))\r\n    AnlageSpeichern strAnlage, CurrentProject.Path &amp; &quot;\\&quot; &amp; strAnlage\r\n    Set objFiles = New clsFiles\r\n    With objFiles\r\n        .OpenDocument CurrentProject.Path &amp; &quot;\\&quot; &amp; strAnlage\r\n    End With\r\nEnd Sub<\/pre>\n<p>Das Ergebnis, das in einer durch Tabulator-Zeichen getrennten Zeichenkette erscheint, wird dann mit der <b>Split<\/b>-Funktion in die einzelnen Dateinamen zerlegt. Das Speichern der angegebenen Dateien im Anlagefeld &uuml;bernimmt dann die Prozedur <b>AnlageHinzufuegen <\/b>(mehr dazu gleich).<\/p>\n<p>Die Prozedur <b>AnlageHinzufuegen<\/b> (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-41-anchor\">Listing 6<\/a><\/span>) f&uuml;gt jeweils eine Anlage zum Anlagefeld hinzu. Dabei erwartet sie Pfad und Dateiname der hinzuzuf&uuml;genden Anlage. Anlagefelder speichern die Anlagen in einer eigenen Tabelle, &uuml;ber die man genau wie auf eine normale Tabelle per <b>Recordset2<\/b>-Objekt zugreifen kann (die neue Variante des <b>Recordset<\/b>-Objekts). Dieses <b>Recordset2<\/b>-Objekte f&uuml;llen Sie schlicht durch Zuweisen der <b>Value<\/b>-Eigenschaft des Feldes mit dem Datentyp <b>Anlage<\/b>. Dieses <b>Recordset2<\/b>-Objekt enth&auml;lt dann bestimmte Felder wie <b>FileData<\/b>, <b>FileName <\/b>et cetera, auf die Sie ganz normal wie auf handels&uuml;bliche <b>Recordset<\/b>-Felder zugreifen k&ouml;nnen.<\/p>\n<p class=\"listingueberschrift\">Listing 6: Hinzuf&uuml;gen einer einzelnen Datei als Anlage<\/p>\n<pre>Private Sub AnlageHinzufuegen(strPfadUndDatei As String)\r\n    Dim rstAttachments As DAO.Recordset2\r\n    Dim strDatei As String\r\n    strDatei = Mid(strPfadUndDatei, InStrRev(strPfadUndDatei, &quot;\\&quot;) + 1)\r\n    Set rstAttachments = m_Attachmentfield.Value\r\n    m_AttachmentRecordset.Edit\r\n    rstAttachments.FindFirst &quot;Filename = ''&quot; &amp; strDatei &amp; &quot;''&quot;\r\n    If Not rstAttachments.NoMatch Then\r\n        If MsgBox(&quot;Die Anlage ''&quot; &amp; strDatei &amp; &quot;'' ist bereits vorhanden. M&ouml;chten Sie diese Anlage &quot; _\r\n                &amp; &quot;&uuml;berschreiben&quot;, vbYesNo) = vbYes Then\r\n            rstAttachments.Delete\r\n        Else\r\n            Exit Sub\r\n        End If\r\n    End If\r\n    rstAttachments.AddNew\r\n    On Error Resume Next\r\n    rstAttachments!FileData.LoadFromFile strDatei\r\n    If Err.Number = -2146697202 Then\r\n         Name strDatei As strDatei &amp; &quot;.dat&quot;\r\n        rstAttachments!FileData.LoadFromFile strDatei &amp; &quot;.dat&quot;\r\n        rstAttachments!FileName = Mid(strDatei, InStrRev(strDatei, &quot;\\&quot;) + 1)\r\n        Name strDatei &amp; &quot;.dat&quot; As strDatei\r\n    End If\r\n    rstAttachments.Update\r\n    m_AttachmentRecordset.Update\r\nEnd Sub<\/pre>\n<p>Um aber die Datens&auml;tze des Recordsets eines Attachment-Feldes mit DAO-Befehlen wie <b>AddNew<\/b>, <b>Edit <\/b>oder <b>Update <\/b>zu bearbeiten, m&uuml;ssen Sie zun&auml;chst das Recordset mit <b>Edit <\/b>in den Bearbeitungsmodus versetzen, welches das <b>Attachment<\/b>-Feld enth&auml;lt, und Sie m&uuml;ssen anschlie&szlig;end die &auml;nderungen mit <b>Update <\/b>in die Tabelle schreiben. Dies geschieht auch in der Prozedur <b>AnlageHinzufuegen<\/b>. Das Recordset <b>m_AttachmentRecordset <\/b>enth&auml;lt Datens&auml;tze der eigentlichen Tabelle, <b>rstAttachments <\/b>die Datens&auml;tze des <b>Attachment<\/b>-Feldes.<\/p>\n<p>Die Prozedur durchsucht das Feld <b>FileName <\/b>der <b>Attachment<\/b>-Datens&auml;tze nach dem Namen der hinzuzuf&uuml;genden Datei. Ist bereits eine Anlage mit diesem Namen vorhanden, soll der Benutzer entscheiden, ob diese &uuml;berschrieben werden soll. Falls ja, l&ouml;schen wir diesen Datensatz kurzerhand mit der <b>Delete<\/b>-Methode, anderenfalls ist die Prozedur hier zuende.<\/p>\n<p>War noch kein gleichnamiges Attachment vorhanden oder soll das vorhandene &uuml;berschrieben werden, wird im <b>Attachment<\/b>-Recordset ein neuer Datensatz angelegt. Das Hinzuf&uuml;gen der Datei erledigt dann die Methode <b>LoadFromFile <\/b>des Feldes <b>FileData<\/b>.<\/p>\n<p>Hier kann lediglich noch ein kleines Problem auftauchen: Access erlaubt nicht alle Dateiendungen f&uuml;r Anlagefelder. Da es aber nicht untersucht, was sich tats&auml;chlich in einer Datei befindet, &auml;ndert die Prozedur die Dateiendung einfach, indem sie <b>.dat <\/b>an den Dateinamen anh&auml;ngt. Danach erfolgt das Hinzuf&uuml;gen der Datei ohne Probleme, sodass die Prozedur nur noch den Namen der Ursprungsdatei zur&uuml;ck&auml;ndern und die im Feld <b>FileName <\/b>gespeicherte Information entsprechend anpassen muss.<\/p>\n<p>Schlie&szlig;lich m&uuml;ssen noch die beiden Recordsets mit der <b>Update<\/b>-Methode gespeichert werden.<\/p>\n<p><b>Anlagen entfernen<\/b><\/p>\n<p>Das Entfernen von Anlagen gelingt wesentlich einfacher. Die Prozedur aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-43-anchor\">Listing 7<\/a><\/span> durchl&auml;uft alle aktuell markierten Eintr&auml;ge des Listenfeldes. An dieser Stelle sei darauf hingewiesen, dass die Eigenschaft <b>Mehrfachauswahl <\/b>des Listenfeldes den Wert <b>Einfach <\/b>enth&auml;lt.<\/p>\n<p class=\"listingueberschrift\">Listing 7: Ein Klick auf die Entfernen-Schaltfl&auml;che l&ouml;st diese Prozedur aus.<\/p>\n<pre>Private Sub cmdEntfernen_Click()\r\n    Dim varAnlage As Variant\r\n    Dim strAnlage As String\r\n    For Each varAnlage In Me!lstAnlagen.ItemsSelected\r\n        strAnlage = Me!lstAnlagen.ItemData(varAnlage)\r\n        AnlageEntfernen strAnlage\r\n    Next varAnlage\r\n    AnlagenAuflisten\r\nEnd Sub<\/pre>\n<p>Innerhalb dieser Schleife speichert die Prozedur den Namen des aktuell durchlaufenen Eintrags in der Variablen <b>strAnlage<\/b>. Diese dient schlie&szlig;lich als Parameter beim Aufruf der Prozedur <b>AnlageEntfernen<\/b>, welche die eigentliche Arbeit &uuml;bernimmt. Danach aktualisiert ein Aufruf der Routine <b>AnlagenAuflisten <\/b>den Inhalt des Listenfeldes.<\/p>\n<p>Die Prozedur <b>AnlageEntfernen <\/b>(s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-42-anchor\">Listing 8<\/a><\/span>) ermittelt wiederum ein <b>Recordset2<\/b>-Objekt aus der <b>Value<\/b>-Eigenschaft des <b>Attachment<\/b>-Feldes. Es durchsucht die Datensatzgruppe nach einem Eintrag, dessen Feld <b>FileName <\/b>den im Parameter <b>strAnlage <\/b>&uuml;bergebenen Wert enth&auml;lt und l&ouml;scht ein eventuell gefundenes Exemplar mit der <b>Delete<\/b>-Methode.<\/p>\n<p class=\"listingueberschrift\">Listing 8: Entfernen einer Anlage<\/p>\n<pre>Private Sub AnlageEntfernen(strAnlage As String)\r\n    Dim rstAttachments As DAO.Recordset2\r\n    Set rstAttachments = m_Attachmentfield.Value\r\n    rstAttachments.FindFirst &quot;Filename = ''&quot; &amp; strAnlage &amp; &quot;''&quot;\r\n    If Not rstAttachments.NoMatch Then\r\n        rstAttachments.Delete\r\n    End If\r\nEnd Sub<\/pre>\n<p><b>Anlage &ouml;ffnen<\/b><\/p>\n<p>Das &Ouml;ffnen der aktuell markierten Anlage &uuml;bernimmt die Prozedur <b>AnlageOeffnen<\/b>, die von der Ereignisprozedur <b>Beim Klicken <\/b>der Schaltfl&auml;che <b>cmdOeffnen <\/b>aufgerufen wird:<\/p>\n<pre>Private Sub cmdOeffnen_Click()\r\n    AnlageOeffnen\r\nEnd Sub<\/pre>\n<p>Die Prozedur <b>AnlageOeffnen <\/b>(s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-44-anchor\">Listing 9<\/a><\/span>) verwendet wiederum die im Beitrag <b>Dateidialog-Klasse <\/b>(<b>www.access-im-unternehmen.de\/756<\/b>) vorgestellte Klasse; in diesem Fall ihre Methode <b>OpenDocument <\/b>zum &Ouml;ffnen einer Datei mit der daf&uuml;r festgelegten Anwendung. <\/p>\n<p>Sollte aktuell mehr als eine Anlage im Listenfeld markiert sein, weist die Prozedur darauf hin, dass nur der erste Eintrag ge&ouml;ffnet wird. Dessen Name wird in der Variablen <b>strAnlage<\/b> abgelegt und an eine weitere Prozedur namens <b>AnlageSpeichern <\/b>&uuml;bergeben. Diese im Anschluss beschriebene Prozedur &uuml;bernimmt das eigentliche Speichern der Anlage im Dateisystem &#8211; mehr dazu weiter unten.<\/p>\n<p>Ist die Datei gespeichert (im aktuellen Datenbankverzeichnis), wird diese mit der <b>OpenDocument<\/b>-Methode der Klasse <b>clsFiles <\/b>ge&ouml;ffnet.<\/p>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Anlage unter einem bestimmten Namen speichern<\/p>\n<p>Ein Klick auf die Schaltfl&auml;che <b>cmdSpeichernUnter <\/b>l&ouml;st die Prozedur aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-45-anchor\">Listing 10<\/a><\/span> aus. Diese Prozedur ermittelt haupts&auml;chlich den Namen der zu speichernden Datei, wobei der Dateiname selbst vorgegeben und im einfachsten Fall nur das Verzeichnis ausgew&auml;hlt werden soll. Der Benutzer kann jedoch auch einen alternativen Dateinamen eingeben.<\/p>\n<p class=\"listingueberschrift\">Listing 10: Speichern einer Anlage im Dateisystem<\/p>\n<pre>Private Sub cmdSpeichernUnter_Click()\r\n    Dim objFiles As clsFiles\r\n    Dim strAnlage As String\r\n    Dim strPfadUndDatei As String\r\n    If Me!lstAnlagen.ItemsSelected.Count &gt; 1 Then\r\n        MsgBox &quot;Es wird nur die erste ausgew&auml;hlte Anlage gespeichert.&quot;\r\n    End If\r\n    strAnlage = Me!lstAnlagen.ItemData(Me!lstAnlagen.ItemsSelected(0))\r\n    Set objFiles = New clsFiles\r\n    With objFiles\r\n        .Filter = &quot;Alle Dateien (*.*)&quot;\r\n        .StartDir = CurrentProject.Path\r\n        strPfadUndDatei = .GetSaveFile(strAnlage)\r\n        AnlageSpeichern strAnlage, strPfadUndDatei\r\n    End With\r\nEnd Sub<\/pre>\n<p>Auch hier wird nur die erste markierte Datei behandelt und ein entsprechender Hinweis ausgegeben, wenn mehr als eine Anlage im Listenfeld markiert ist. Die Methode <b>GetSaveFile <\/b>der Klasse <b>clsFiles <\/b>liefert einen <b>Datei speichern<\/b>-Dialog zur Auswahl beziehungsweise Eingabe des Namens der zu speichernden Datei. Die im Anschluss beschriebene Prozedur <b>AnlageSpeichern <\/b>erledigt schlie&szlig;lich den eigentlichen Speichervorgang.<\/p>\n<p><b>Anlage speichern<\/b><\/p>\n<p>Die Prozedur aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-46-anchor\">Listing 11<\/a><\/span> speichert eine Anlage. Sie erwartet als Parameter den Namen der Anlage und den Dateinamen, unter dem die in der Anlage befindliche Datei gespeichert werden soll.<\/p>\n<p class=\"listingueberschrift\">Listing 11: Speichern einer Anlage im Dateisystem<\/p>\n<pre>Private Sub AnlageSpeichern(strAnlage As String, strPfadUndDatei As String)\r\n    Dim rstAttachments As DAO.Recordset2\r\n    Set rstAttachments = m_Attachmentfield.Value\r\n    rstAttachments.FindFirst &quot;Filename = ''&quot; &amp; strAnlage &amp; &quot;''&quot;\r\n    If Not rstAttachments.NoMatch Then\r\n        If Len(Dir(strPfadUndDatei)) &gt; 0 Then\r\n            If MsgBox(&quot;Die Anlage ''&quot; &amp; strAnlage &amp; &quot;'' ist bereits vorhanden. M&ouml;chten Sie &quot; _\r\n                    &amp; &quot;diese Datei &uuml;berschreiben&quot;, vbYesNo) = vbYes Then\r\n                Kill strPfadUndDatei\r\n                rstAttachments!FileData.SaveToFile strPfadUndDatei\r\n            End If\r\n        Else\r\n            rstAttachments!FileData.SaveToFile strPfadUndDatei\r\n        End If\r\n    End If\r\nEnd Sub<\/pre>\n<p>Die Prozedur &ouml;ffnet das gewohnte Recordset auf Basis der im Anlagefeld enthaltenen Datens&auml;tze und durchsucht dieses nach der betroffenen Anlage. Sie pr&uuml;ft dann, ob bereits eine Datei mit dem angegebenen Speichernamen vorhanden ist und fragt den Benutzer, ob diese &uuml;berschrieben werden soll. Schlie&szlig;lich sorgt die <b>SaveToFile<\/b>-Methode des Anlage-Feldes f&uuml;r das Speichern der Anlage im Dateisystem.<\/p>\n<p><b>Alle Anlagen speichern<\/b><\/p>\n<p>Fehlt noch die Schaltfl&auml;che zum Speichern aller Anlagen des Anlage-Feldes: Diese soll nach einem Mausklick die Prozedur <b>cmdAllesSpeichern<\/b> ausl&ouml;sen (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-47-anchor\">Listing 12<\/a><\/span>) und zun&auml;chst einen <b>Verzeichnis ausw&auml;hlen<\/b>-Dialog &ouml;ffnen. Die Anlagen sollen ohne &auml;nderung der Dateinamen im ausgew&auml;hlten Verzeichnis landen.<\/p>\n<p class=\"listingueberschrift\">Listing 12: Auswahl eines Verzeichnisses zum Speichern aller Anlagen<\/p>\n<pre>Private Sub cmdAllesSpeichern_Click()\r\n    Dim objFiles As clsFiles\r\n    Dim strVerzeichnis As String\r\n    Set objFiles = New clsFiles\r\n    With objFiles\r\n    .StartDir = CurrentProject.Path\r\n    .Title = &quot;Zielverzeichnis ausw&auml;hlen&quot;\r\n    strVerzeichnis = .GetPath\r\n    End With\r\n    If Len(strVerzeichnis) &gt; 0 Then\r\n        AlleAnlagenSpeichern strVerzeichnis\r\n    End If\r\nEnd Sub<\/pre>\n<p>Nach dem Ermitteln des Verzeichnisses ruft die Prozedur eine weitere Routine namens <b>AlleAnlagenSpeichern <\/b>auf (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-48-anchor\">Listing 13<\/a><\/span>).<\/p>\n<p class=\"listingueberschrift\">Listing 13: Speichern aller Anlagen im Dateisystem<\/p>\n<pre>Private Sub AlleAnlagenSpeichern(strVerzeichnis As String)\r\n    Dim rstAttachments As DAO.Recordset2\r\n    Dim strAnlage As String\r\n    Set rstAttachments = m_Attachmentfield.Value\r\n    Do While Not rstAttachments.EOF\r\n        strAnlage = rstAttachments!FileName\r\n        If Len(Dir(strVerzeichnis &amp; &quot;\\&quot; &amp; strAnlage)) &gt; 0 Then\r\n            If MsgBox(&quot;Die Anlage ''&quot; &amp; strAnlage &amp; &quot;'' ist bereits vorhanden. M&ouml;chten Sie diese Datei &uuml;berschreiben&quot;, vbYesNo) = vbYes Then\r\n                Kill strVerzeichnis &amp; &quot;\\&quot; &amp; strAnlage\r\n                rstAttachments!FileData.SaveToFile strVerzeichnis &amp; &quot;\\&quot; &amp; strAnlage\r\n            End If\r\n        Else\r\n            rstAttachments!FileData.SaveToFile strVerzeichnis &amp; &quot;\\&quot; &amp; strAnlage\r\n        End If\r\n        rstAttachments.MoveNext\r\n    Loop\r\nEnd Sub<\/pre>\n<p>Diese &ouml;ffnet erneut das Recordset aller im Anlagen-Feld gespeicherten Anlagen und durchl&auml;uft diese.<\/p>\n<p>Dabei pr&uuml;ft sie f&uuml;r jede Datei, ob sie bereits vorhanden ist und fragt gegebenenfalls beim Benutzer nach, ob eine vorhandene Datei &uuml;berschrieben werden soll. Falls ja, wird die Datei gel&ouml;scht und neu angelegt.<\/p>\n<p><b>&Ouml;ffnen der Anlagen per Doppelklick<\/b><\/p>\n<p>Das letzte Feature ist der Doppelklick auf einen der Eintr&auml;ge des Listenfeldes. Dies soll den angeklickten Eintrag &ouml;ffnen, was die folgende Prozedur erledigt:<\/p>\n<pre>Private Sub lstAnlagen_DblClick(Cancel As Integer)\r\n    AnlageOeffnen\r\nEnd Sub<\/pre>\n<p>Dabei ist wiederum zu beachten, dass bei Auswahl mehrerer Anlagen nur die jeweils erste in der Liste aufgef&uuml;hrte Anlage ge&ouml;ffnet wird.<\/p>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Anlagenformular in Hauptformular integrieren<\/p>\n<p>F&uuml;r die reibungslose Zusammenarbeit zwischen Haupt- und Unterformular fehlt noch, dass das Unterformular auf Datensatzwechsel im Hauptformular reagiert.<\/p>\n<p>Dazu wurde die Variable <b>m_Form<\/b>, die ja auf das Hauptformular verweist, mit dem Schl&uuml;sselwort <b>WithEvents <\/b>deklariert.<\/p>\n<p>Die Prozedur <b>Initialize<\/b> (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-53-anchor\">Listing 1<\/a><\/span>) sorgt mit der folgenden Anweisung daf&uuml;r, dass wir im Klassenmodul des Unterformulars Ereignisse des Hauptformulars erkennen k&ouml;nnen:<\/p>\n<pre>m_Form.OnCurrent = &quot;[Event Procedure]&quot;<\/pre>\n<p>Somit m&uuml;ssen wir im Klassenmodul des Unterformulars nur noch eine Ereignisprozedur anlegen, die durch das Ereignis <b>Beim Anzeigen <\/b>des Hauptformulars ausgel&ouml;st wird:<\/p>\n<pre>Private Sub m_Form_Current()\r\n    AnlagenAktualisieren\r\nEnd Sub<\/pre>\n<p>Die darin aufgerufene Prozedur <b>AnlagenAktualisieren <\/b>erledigt dann den Rest.<\/p>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Zusammenfassung und Ausblick<\/p>\n<p>Grunds&auml;tzlich sind Anlagefelder keine schlechte Idee. Sie erleichtern das Speichern von Dateien in Tabellen deutlich, indem sie eine entsprechende Benutzeroberfl&auml;che daf&uuml;r anbieten.<\/p>\n<p>Mit dem Einbau des hier vorgestellten Unterformulars k&ouml;nnen Sie an Stellen, die ausreichend Platz bieten, direkt die im Anlagefeld enthaltenen Dateien auflisten. Es ist dann nicht mehr n&ouml;tig, erst umst&auml;ndlich &uuml;ber das Kontextmen&uuml; oder das beim &Uuml;berfahren eines Anlagenfeldes eingeblendete Men&uuml; einen weiteren Dialog zur Anzeige der Anlagen zu &ouml;ffnen.<\/p>\n<p>Puristen werden das Anlagefeld dennoch verweigern, weil sie gern die komplette Kontrolle &uuml;ber die mit Daten gef&uuml;llten Tabellen der Datenbank besitzen. Ein Zugriff etwa auf alle Attachments ist beispielsweise nicht so einfach m&ouml;glich.<\/p>\n<p>Daher bieten wir in einem Beitrag namens <b>Anlagen in OLE-Feldern speichern <\/b>(<b>www.access-im-unternehmen.de\/763<\/b>) in der kommenden Ausgabe von <b>Access im Unternehmen <\/b>den gleichen Dialog zum Speichern der Daten in einem OLE-Feld einer separaten Tabelle an.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>Anlagendialog.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{39961A0E-E999-46B4-839A-D6B6A60F3882}\/aiu_755.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wer den Anlagen-Datentyp und das dazugeh&ouml;rige Steuerelement mag, m&ouml;chte vielleicht die Funktionen des Dialogs zum Verwalten von Anlagen gleich in eigene Formulare integrieren. Damit w&uuml;rde man auch die etwas un&uuml;bersichtliche Darstellung in den Griff bekommen. Wie Sie ein solches Formular erstellen und einsetzen, lesen Sie in diesem Beitrag.<\/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":[66012011,662011,44000023],"tags":[],"class_list":["post-55000755","post","type-post","status-publish","format-standard","hentry","category-66012011","category-662011","category-Mit_Formularen_arbeiten"],"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>Anlagen verwalten ohne Standarddialog - 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\/Anlagen_verwalten_ohne_Standarddialog\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Anlagen verwalten ohne Standarddialog\" \/>\n<meta property=\"og:description\" content=\"Wer den Anlagen-Datentyp und das dazugeh&ouml;rige Steuerelement mag, m&ouml;chte vielleicht die Funktionen des Dialogs zum Verwalten von Anlagen gleich in eigene Formulare integrieren. Damit w&uuml;rde man auch die etwas un&uuml;bersichtliche Darstellung in den Griff bekommen. Wie Sie ein solches Formular erstellen und einsetzen, lesen Sie in diesem Beitrag.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Anlagen_verwalten_ohne_Standarddialog\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T22:00:45+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg05.met.vgwort.de\/na\/c973186bb7234aac83631ab0bfe71906\" \/>\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\\\/Anlagen_verwalten_ohne_Standarddialog\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Anlagen_verwalten_ohne_Standarddialog\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Anlagen verwalten ohne Standarddialog\",\"datePublished\":\"2020-05-22T22:00:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Anlagen_verwalten_ohne_Standarddialog\\\/\"},\"wordCount\":2487,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Anlagen_verwalten_ohne_Standarddialog\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/c973186bb7234aac83631ab0bfe71906\",\"articleSection\":[\"1\\\/2011\",\"2011\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Anlagen_verwalten_ohne_Standarddialog\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Anlagen_verwalten_ohne_Standarddialog\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Anlagen_verwalten_ohne_Standarddialog\\\/\",\"name\":\"Anlagen verwalten ohne Standarddialog - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Anlagen_verwalten_ohne_Standarddialog\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Anlagen_verwalten_ohne_Standarddialog\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/c973186bb7234aac83631ab0bfe71906\",\"datePublished\":\"2020-05-22T22:00:45+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Anlagen_verwalten_ohne_Standarddialog\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Anlagen_verwalten_ohne_Standarddialog\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Anlagen_verwalten_ohne_Standarddialog\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/c973186bb7234aac83631ab0bfe71906\",\"contentUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/c973186bb7234aac83631ab0bfe71906\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Anlagen_verwalten_ohne_Standarddialog\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Anlagen verwalten ohne Standarddialog\"}]},{\"@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":"Anlagen verwalten ohne Standarddialog - 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\/Anlagen_verwalten_ohne_Standarddialog\/","og_locale":"de_DE","og_type":"article","og_title":"Anlagen verwalten ohne Standarddialog","og_description":"Wer den Anlagen-Datentyp und das dazugeh&ouml;rige Steuerelement mag, m&ouml;chte vielleicht die Funktionen des Dialogs zum Verwalten von Anlagen gleich in eigene Formulare integrieren. Damit w&uuml;rde man auch die etwas un&uuml;bersichtliche Darstellung in den Griff bekommen. Wie Sie ein solches Formular erstellen und einsetzen, lesen Sie in diesem Beitrag.","og_url":"https:\/\/access-im-unternehmen.de\/Anlagen_verwalten_ohne_Standarddialog\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T22:00:45+00:00","og_image":[{"url":"http:\/\/vg05.met.vgwort.de\/na\/c973186bb7234aac83631ab0bfe71906","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\/Anlagen_verwalten_ohne_Standarddialog\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Anlagen_verwalten_ohne_Standarddialog\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Anlagen verwalten ohne Standarddialog","datePublished":"2020-05-22T22:00:45+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Anlagen_verwalten_ohne_Standarddialog\/"},"wordCount":2487,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Anlagen_verwalten_ohne_Standarddialog\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/c973186bb7234aac83631ab0bfe71906","articleSection":["1\/2011","2011","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Anlagen_verwalten_ohne_Standarddialog\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Anlagen_verwalten_ohne_Standarddialog\/","url":"https:\/\/access-im-unternehmen.de\/Anlagen_verwalten_ohne_Standarddialog\/","name":"Anlagen verwalten ohne Standarddialog - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Anlagen_verwalten_ohne_Standarddialog\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Anlagen_verwalten_ohne_Standarddialog\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/c973186bb7234aac83631ab0bfe71906","datePublished":"2020-05-22T22:00:45+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Anlagen_verwalten_ohne_Standarddialog\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Anlagen_verwalten_ohne_Standarddialog\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Anlagen_verwalten_ohne_Standarddialog\/#primaryimage","url":"http:\/\/vg05.met.vgwort.de\/na\/c973186bb7234aac83631ab0bfe71906","contentUrl":"http:\/\/vg05.met.vgwort.de\/na\/c973186bb7234aac83631ab0bfe71906"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Anlagen_verwalten_ohne_Standarddialog\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Anlagen verwalten ohne Standarddialog"}]},{"@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\/55000755","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=55000755"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000755\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000755"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000755"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000755"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}