Drag and Drop in Anlagefelder

Mit den Anlagefeldern hat Microsoft unter Access 2007 eine Möglichkeit zum Speichern von Dateien in Tabellenfeldern eingeführt, die etwas einfacher zugänglich ist als das bis dahin für solche Zwecke verwendete OLE-Feld. Leider fehlt noch eine Möglichkeit, einfach per Drag and Drop eine Datei aus dem Windows Explorer in ein Anlagefeld einer Tabelle zu ziehen. Dieser Beitrag zeigt, wie Sie ein solches Feature nachträglich hinzufügen können.

Anlagefelder sind eigentlich eine prima Sache: Sie können ganz einfach über die Benutzeroberfläche Dateien hinzufügen und darauf ins Dateisystem übertragen. Auch ein öffnen der Dateien direkt aus dem Anlagefeld heraus ist möglich. Allerdings ist der Zugriff auf die enthaltenen Dateien mitunter etwas mühselig.

Immerhin müssen Sie zunächst auf das Anlage-Steuerelement klicken und dann auf das erscheinende Menü, um überhaupt erst die Liste der enthaltenen Dateien anzuzeigen (s. Bild 1).

öffnen des Dialogs zum Verwalten von Anlagen

Bild 1: öffnen des Dialogs zum Verwalten von Anlagen

Dort erwartet Sie dann ein Dialog, der die im Anlagefeld enthaltenen Anlagen anzeigt und verschiedene Möglichkeiten bietet, zum Beispiel zum Hinzufügen, Entfernen oder öffnen einer der im Anlagefeld gespeicherten Dateien (s. Bild 2).

Dialog zum Verwalten von Anlagen

Bild 2: Dialog zum Verwalten von Anlagen

Was hier für einige Anwendungen fehlen dürfte, ist eine Möglichkeit, mal eben eine Datei aus dem Windows Explorer auf ein Steuerelement zu ziehen und so die Datei im Anlagefeld zu speichern. Das stellen wir uns etwa wie in Bild 3 vor.

Formular mit Drag-and-Drop-Ziel für das Anlagefeld

Bild 3: Formular mit Drag-and-Drop-Ziel für das Anlagefeld

Hier wählen wir komfortabel die Zieltabelle und das darin enthaltene Anlagefeld aus. Das Listenfeld darunter zeigt alle Datensätze der Tabelle an. Hier markieren Sie den Datensatz, dem Sie eine Datei hinzufügen möchten. Dann ziehen Sie die gewünschte Datei aus dem Windows Explorer einfach auf das darunter befindliche ListView-Steuerelement. Das erfolgreiche Speichern wird noch durch eine kurze Meldung bestätigt.

Formular für Drag und Drop

Das Formular der Beispieldatenbank heißt frmDragAndDrop und soll zeigen, wie Sie Dateien flexibel in beliebige Anlagefelder hineinziehen können. Dies ist erstens sinnvoll, weil Sie so die relevanten Codezeilen leicht anpassen können, zweitens können Sie das Formular gleich nutzen, wenn Sie einem Anlagefeld einer beliebigen Tabelle Dateien hinzufügen möchten.

In der Entwurfsansicht sieht das Formular wie in Bild 4 aus. Im oberen Bereich finden Sie die beiden Kombinationsfelder, mit denen Sie die Zieltabelle und das darin enthaltene Anlagefeld auswählen können. Darunter befindet sich ein Listenfeld, das die Inhalte der ersten vier Felder der gewählten Tabelle anzeigt.

Das Formular mit dem Drag-and-Drop-Ziel in der Entwurfsansicht

Bild 4: Das Formular mit dem Drag-and-Drop-Ziel in der Entwurfsansicht

Hier können Sie festlegen, zu welchem Datensatz die Anlage hinzugefügt werden soll. Schließlich folgt das wichtigste Steuerelement – das ListView-Steuerelement, das als Drag-and-Drop-Ziel dient.

Warum ausgerechnet ein ListView-Steuerelement Nun: Dieses bietet im Gegensatz zu den Standardsteuerelementen von Access die Möglichkeit, auf Drag-and-Drop-Ereignisse zu reagieren und diese zu implementieren.

Tabelle und Feld auswählen

Das Kombinationsfeld cboTabellen erhält als Datenherkunft die folgende Abfrage:

SELECT Name FROM MSysObjects WHERE Type = 1 
AND NOT Name LIKE ''MSys*'' AND NOT Name LIKE ''~*'' 
AND NOT Name LIKE ''f_*'' ORDER BY Name;

Diese liefert alle Einträge der Systemtabelle MSysObjects, deren Feld Type den Wert 1 enthält (für lokale Access-Tabellen) und deren Feld Name nicht mit MSys…, F_… oder ~… beginnt. Erstere sind die Systemtabellen, Letztere für den internen Gebrauch verwendete Tabellen.

Nach der Auswahl soll das zweite Kombinationsfeld die Felder der gewählten Tabelle anzeigen.

Dazu legen wir für cboTabellen eine Ereignisprozedur an, die durch das Ereignis Nach Aktualisierung ausgelöst wird:

Private Sub cboTabellen_AfterUpdate()
     Me!cboFelder.RowSource = Me!cboTabellen
     Me!lstDatensaetze.RowSource = Me!cboTabellen
End Sub

Die erste Anweisung stellt die Datensatzherkunft des Kombinationsfeldes zur Anzeige der Felder auf den Wert des ersten Kombinationsfeldes ein, also den Namen der Tabelle.

Die zweite legt die gleiche Tabelle als Datensatzherkunft des Listenfeldes lstDatensaetze zur Anzeige der enthaltenen Daten fest. Damit das zweite Kombinationsfeld nach der Angabe eines Tabellennamens als Datensatzherkunft auch die enthaltenen Felder anzeigt, stellen Sie zuvor noch die Eigenschaft Herkunftsart auf den Wert Feldliste ein (s. Bild 5).

Einstellen der Herkunftsart für das Kombinationsfeld cboFelder

Bild 5: Einstellen der Herkunftsart für das Kombinationsfeld cboFelder

Fehlen noch einige Einstellungen für das ListView-Steuerelement. Diese nehmen wir gleich beim öffnen des Formulars in der Ereignisprozedur Beim Laden vor.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar