Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

A03: Im Endlosformular Datensätze per Drag and Drop verschieben

Begonnen von MaxP, Juli 13, 2018, 18:45:46

⏪ vorheriges - nächstes ⏩

MaxP

Hallo zusammen,

ich möchte gerne in einem Endlosformular frm_PosÜbersicht, das an die Tabelle tbl_Pos gebunden ist, die Reihenfolge der Datensätze beliebig mit Drag and Drop verändern. Ich habe gelesen, dass das per Modul möglich sein soll. Allerdings habe ich kaum Ahnung von VBA und bin somit auf Beispiele angewiesen. Leider habe ich bisher nichts brauchbares gefunden.

Die Tabelle besitzt die Felder PosID; PosText; TitelText; LvID

Die Positionen sollen später als Bericht in Form eines Leistungsverzeichnisses automatisch nummeriert und ausgedruckt werden.

Kann mir jemand vielleicht weiterhelfen??
Danke vorab.

Gruß
Max
Win 10 pro 64 bit, Access 2003

markusxy

#1
Du verwechselst wohl eine Datenbank mit einer Excel Liste.
Diese beiden Objekte sind nicht vergleichbar.
Die Reihenfolge in einer Datenbank-Tabelle wird primär durch den Hauptindex und darüber hinaus durch die Sortierangabe der jeweiligen Abfrage bestimmt.
Weiter Einzelheiten erspare ich mir mal, da sie nur verwirren würden.

Hast du dich mit den zentralen Themen Indexierung und Sortierung bei Datenbanken beschäftigt?

PhilS

Zitat von: markus888 am Juli 13, 2018, 21:51:20Du verwechselst wohl eine Datenbank mit einer Excel Liste.
?
Ich finde das Ansinnen, Datensätze in einer Liste per Drag&Drop sortieren zu wollen, völlig legitim und ein sinnvolles Feature für manche (Teil-)Datenbankanwendung. Dies bedeutet ja nur, dass die Spalte, nach der die Datensätze sortiert sind, entsprechend aktualisiert werden muss, um die durch Drag&Drop hergestellte Reihenfolge abzubilden.

Leider ist in Access praktisch keine Unterstützung für Drag&Drop eingebaut, so dass ich hier keinen "anfängertauglichen" Ansatz kenne, den ich empfehlen könnte.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

DF6GL

Hallo,


Q&D Annäherung:

Neues Feld in Tabelle:  "Sort" (Long, Duplikate möglich)  gefüllt mit anfänglicher Sortierreihenfolge
Datenherkunft des Forms:  Select * from tblMyTable order by Sort

Option Compare Database
Option Explicit

Dim IDold As Long, sortold As Long,  Toggle As Boolean
'----------------------------------

Private Sub Detailbereich_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Shift = 1 And Not Toggle Then

IDold = Me!ID
sortold = Me!Sort

Toggle = True

ElseIf Shift = 1 And Toggle Then

CurrentDb.Execute "update tblMyTabel  set Sort = " & Me!Sort & " where ID = " & IDold

Me!Sort = sortold
Toggle = False
Me.Requery
End If

End Sub



Einen Datensatz im Endlosform mit gedrückter Shift-Taste anklicken, danach Zieldatensatz mit gedrückter Shift-Taste  anklicken.

Das Formular wird umsortiert.

markusxy

Zitat von: PhilS am Juli 14, 2018, 02:05:04
Ich finde das Ansinnen, Datensätze in einer Liste per Drag&Drop sortieren zu wollen, völlig legitim und ein sinnvolles Feature für manche (Teil-)Datenbankanwendung.

Darum geht's doch gar nicht.
Die Frage ist ob die Basic's verstanden werden um darauf aufzubauen.

Lachtaube

Mittels Listview ActiveX ist auch Drag & Drop möglich.
Grüße von der (⌒▽⌒)

MaxP

Hallo Franz,
ich bin deiner Anleitung gefolgt, jedoch funkt es nicht, nachdem ich die Feldnamen etc. angepasst habe.

Mir ist unklar, wo genau der obere Teil des Codes Option Compare Database ... eingetragen werden muss.
Er steht bei mir, wie bei dir, über dem Private Sub..., getrennt durch den üblichen Strich, direkt unter einem anderen Code? Sieht irgendwie nicht richtig aus.

Access meckert bei dem Versuch auch nicht, die DS zu verschieben. Beim Markieren des 2. DS markiert er alle dazwischen liegenden DS. Also ein Verhalten, wie ohne Code.
Was habe ich falsch gemacht?

@Lachtaube:
sieht gut aus, aber mit dem bei mir eingefügten ListView weiß ich leider gar nichts anzufangen.

Gruß
Max
Win 10 pro 64 bit, Access 2003

DF6GL

Hallo,

hast Du das Tabellenfeld "Sort" angelegt und auch mit fortlaufenden Zahlen gefüllt?

ZitatOption Compare Database
Option Explicit

Dim IDold As Long, sortold As Long,  Toggle As Boolean

steht als aller Erstes im  Formular-Modul.


Hast Du auch das Drücken der Shift-Taste berücksichtigt, wie im vorletzten Satz beschrieben?

Lachtaube

#8
Hier mal als Beispiel, wobei wie bei Franz auch, ein Feld zum Sortieren der Datensätze verwendet wird.
Grüße von der (⌒▽⌒)

MaxP

Hallo Franz,
habe nun alles, wie vorgegeben. Funkt immer noch nicht.
Mein Form basiert allerdings nicht auf einer Tab. sondern einer Abfrage.

Habe dann eine einfache Beispieltab. mit deinen Feldbezeichnungen erstellt. Nachdem ich einen Schreibfehler im Code korrigiert hatte, funktionierte es gelegentlich. D.h., ich musste ca. 10-15 x klicken bzw. doppelt klicken, bis die Reihenfolge sich 1x eher zufällig geändert hat. Keine Ahnung weshalb.

@Lachtaube
Habe beim Öffnen folgende Fehlermeldung erhalten und sich dann aufgehängt.

Gruß
Max

Win 10 pro 64 bit, Access 2003

Lachtaube

Sorry, dann setz' mal im VBA-Editor einen Verweis (unter Menü Extras/Verweise) auf die DAO 4.0 Bibliothek und klicke den fehlerhaften Verweis weg.
Grüße von der (⌒▽⌒)

MaxP

ist nicht in der Liste (Access 2003)
Nur DAO 3.6 (bereits aktiviert)

Ich hoffe, dass ich das auch in einer anderen DB einstellen kann, als in deiner, denn da komme ich nicht weiter.
Win 10 pro 64 bit, Access 2003

Lachtaube

#12
3.6 meinte ich auch. :)
Ich habe den Anhang in meinem Beitrag weiter oben dahingehend geändert.
Grüße von der (⌒▽⌒)

MaxP

Hallo,
nun komme ich zwar rein, aber nicht viel weiter,
da div. Fehlermeldungen erscheinen.

Gruß
Max
Win 10 pro 64 bit, Access 2003

Lachtaube

Dann dürte wohl das verwendete ActiveX-Steuerelement nicht kompatibel sein. Welche Windows-Version verwendest Du?

Du kannst folgendes versuchen: Lösche den ungültigen Verweis sowie  das Steuerelement im Formularentwurf und füge ein ActiveX-Listview Steuerelement dem Formular hinzu. Lege dann seine Eigenschaften über das Kontextmenü wie im Bildanhang fest. Das Beispiel benötigt 5 Kopfspalten (ihr Name ist egal). Benenne das Steuerelement in lvCtl um. Prüfe, ob sich der Code dann in VBA kompilieren lässt und ob die Verweise keinen Fehler mehr enthalten.
Grüße von der (⌒▽⌒)