Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Ihren XING-Kontakten zeigen

Diesen Beitrag Ihrem XING-Kontakten vorstellen

Diesen Beitrag auf Facebook teilen

Verwandte Beiträge:

Ereignisprozeduren

Ereignisse im Eigenbau

Individuelle Datenauswahl

Datenbankzugriff mit ADO

Tabellen wie unter Excel

Alle verwandten Beiträge ansehen ...

Bisherige Kommentare:

Noch keine Kommentare vorhanden.

Alle Kommentare ansehen oder Kommentar abgeben

Über den Autor:

André Minhorst

Bitte nutzen Sie das XING-Profil nicht
für Fragen zum Artikel, sondern nur für
den Kontaktaustausch beziehungsweise
Projekt- oder Supportanfragen.

Zusammenfassung

Erfahren Sie, wie Sie Drag and Drop für Formulare in der Datenblattansicht implementieren können.

Techniken

Formulare, Datenblattansicht, VBA

Voraussetzungen

Access 2000

Beispieldateien

DragAndDropImDatenblatt.mdb

Shortlink

666

Drag and Drop in der Datenblattansicht

André Minhorst, Duisburg

Im Beitrag Reihenfolge manuell anpassen (s. Shortlink 652) haben wir verschiedene Möglichkeiten für das Anpassen der Reihenfolge von Daten nach dem Inhalt eines speziellen ReihenfolgeID-Felds erläutert. Der vorliegende Beitrag setzt noch eins drauf: Er zeigt, wie Sie die Reihenfolge von Datensätzen in der Datenblattansicht eines Formulars per Drag and Drop anpassen können.

"Mit den Techniken aus dem Reihenfolge-Artikel kann ich zwar einfach per Schaltfläche Datensätze in der Datenblattansicht nach oben und unten verschieben, aber noch einfacher wäre das doch per Drag and Drop. Und das ListView-Steuerelement, mit dem dies ginge, kommt für mich nicht infrage, weil die Anwendung im Mehrbenutzerbetrieb laufen soll und man so nur mit viel Aufwand die Anzeige aktueller Daten sicherstellen kann."

Abb. 1 zeigt, was der Leser mit dieser Aussage meint: Er möchte einen Datensatz mit der Maus anklicken und diesen dann bei gedrückter Maustaste an eine andere Position im Datenblatt ziehen, wodurch dieser sich dann ober- oder unterhalb des Zieldatensatzes einordnet - und zwar darüber, wenn der Datensatz nach oben gezogen wird, und darunter, wenn er nach unten gezogen wird.

pic001.png

Abb. 1: Drag and Drop in der Datenblattansicht

Hausgemachtes Drag and Drop

Welchen Weg geht man, um dieses von Access in keiner Weise unterstützte Verhalten nachzubilden? Eine Internetrecherche war wenig hilfreich: Dort gab es bestenfalls Informationen darüber, wie man per Drag and Drop den Inhalt eines Textfeldes in ein anderes verschiebt, aber nicht viel mehr.

Bevor wir Hirnschmalz investieren, nehmen wir erstmal, was der oben erwähnte Beitrag Reihenfolge manuell anpassen liefert, und bauen das Beispielformular zusammen.

Als Tabelle mit zu sortierenden Daten dient die Tabelle tblPersonen, die lediglich die Felder ID (Primärschlüssel), Vorname, Nachname (beides Textfelder) und ReihenfolgeID (Zahlenfeld) enthält.

Außerdem fügen Sie aus der Beispieldatenbank des oben genannten Beitrags die Abfrage qryOrder und das Modul mdlOrder zu der Datenbank hinzu, die Drag and Drop in der Datenblattansicht ermöglichen soll. Die Abfrage qryOrder passen Sie wie in Abb. 2 an, damit sie sich auf die relevanten Felder der Tabelle tblPersonen bezieht und als Grundlage der Routinen des Moduls mdlOrder dienen kann.

pic002.png

Abb. 2: Diese Abfrage liefert die Grundlage für das Sortieren der Datensätze.

Das Formular frmDragAndDrop der Beispieldatenbank zu diesem Beitrag statten Sie nicht etwa mit der Tabelle tblPersonen als Datenherkunft aus, sondern mit einer Abfrage, die zwar alle Felder der Tabelle tblPersonen enthält, diese aber in aufsteigender Reihenfolge nach dem Feld ReihenfolgeID sortiert:

SELECT ID, Vorname, Nachname, ReihenfolgeID

FROM tblPersonen ORDER BY ReihenfolgeID;

Ereignisreich

Schauen wir nun, was Access so an Einstiegspunkten für Drag and Drop in Formularen und speziell in der Datenblattansicht bietet. Da die Datenblattansicht im Prinzip komplett mit Steuerelementen bedeckt ist, konzentrieren wir uns auf die Ereigniseigenschaften der Steuerelemente. Für den Nachbau der Drag-and-Drop-Funktionalität brauchen wir mindestens zwei Ereignisse, die beim Anklicken und beim Loslassen der linken Maustaste ausgelöst werden. Wahrscheinlich brauchen wir auch noch das Ereignis, das beim Bewegen des Mauszeigers reagiert.

Bestenfalls soll es so laufen: Der Benutzer klickt auf die linke Maustaste, während sich der Mauszeiger auf dem zu verschiebenden Datensatz befindet. Dies löst die Ereignisprozedur Bei Maustaste ab aus und ist ein guter Zeitpunkt, um sich den betroffenen Datensatz zu merken. Dann zieht der Benutzer den Mauszeiger bei gedrückter Maustaste auf den Zieldatensatz und lässt die Maustaste wieder los. Hier tritt das Ereignis Bei Maustaste auf auf den Plan: Eine prima Gelegenheit, um den Datensatz zu ermitteln, auf dem sich der Mauszeiger aktuell befindet.

Zwischendurch kann man noch die Ereignisprozedur bemühen, die durch das Ereignis Bei Mausbewegung ausgelöst wird und, falls die linke Maustaste angeklickt ist, ein alternatives Mauszeigersymbol zur Verdeutlichung des Drag-and-Drop-Vorgangs einblendet.

So weit die Theorie - fangen wir also mit ein paar Fingerübungen an und sorgen dafür, dass der Mauszeiger sich beim Ziehen eines Datensatzes in ein anderes Symbol verwandelt. Diese Funktion soll in einer Routine namens MouseMove untergebracht werden, die von den entsprechenden Ereignisprozeduren aller im Datenblatt enthaltenen Steuerelemente aufgerufen werden kann. Der Aufruf sieht im Beispiel des Textfelds txtID mit dem Steuerelementinhalt ID so aus:

Private Sub txtID_MouseMove(button As Integer, µ

    Shift As Integer, X As Single, Y As Single)

    MouseMove button

    End Sub

Die eigentliche Routine verwendet eine Funktion des Access-Entwicklers Terry Kreft (http://www.mvps.org/access/api/api0044.htm), die als Parameter eine Konstante für das gewünschte Aussehen des Mauszeigers erwartet - und das je nachdem, ob gerade die linke Maustaste gedrückt ist oder nicht. Diese Information liefert die als Parameter übergebene Variable intButton, wobei der Wert 1 für die linke Maustaste, 2 für die rechte und 0 für gar keine gedrückte Maustaste steht:

Private Sub MouseMove(intButton As Integer)

    If intButton = 1 Then

        MouseCursor IDC_MouseCursor.HAND

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sie sind nicht angemeldet!
Für den kompletten Artikel plus Beispieldatenbanken müssen Sie sich einloggen!
Jetzt einloggen ...
 

Sie haben keine Benutzerdaten? Na, dann aber schnell:

Benutzerdaten erhalten Sie auf zwei Arten:

1. Testen Sie das Online-Archiv von 'Access im Unternehmen' für eine Woche. Sie müssen Sie lediglich für den 'Access im Unternehmen'-Newsletter anmelden.
Ja, ich will den einwöchigen Testzugang und den Newsletter!

2. Greifen Sie ein ganzes Jahr auf das Online-Archiv zu und erhalten Sie zusätzlich alle zwei Monate das brandneue "Access im Unternehmen"-Magazin - für nur EUR 108,-* im Jahr!
Ja, ich will Access im Unternehmen bestellen!

 

* inkl. MwSt., zzgl. Versandkostenpauschale, EUR 140,- inkl. MwSt., zzgl. Versandkostenpauschale ab dem zweiten Jahr

Verwandte Beiträge:

Ereignisprozeduren

Ereignisse im Eigenbau

Individuelle Datenauswahl

Datenbankzugriff mit ADO

Tabellen wie unter Excel

Tipps und Tricks

Kommentare und Ergänzungen

Wenn Sie Kommentare, Fragen oder Ergänzungen zu diesem Artikel haben, können Sie diese hier eintragen. Wir bemühen uns, kurzfristig auf Ihren Kommentar einzugehen.

Ihr Name:

Ihre E-Mail-Adresse (für
Rückfragen, wird nicht veröffentlicht:

Betreff:

Ihr Kommentar zu diesem Artikel:

© 2003-2010 André Minhorst Alle Rechte vorbehalten.