Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: MaxP am Juli 13, 2018, 18:45:46

Titel: A03: Im Endlosformular Datensätze per Drag and Drop verschieben
Beitrag von: MaxP am Juli 13, 2018, 18:45:46
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
Titel: Re: A03: Im Endlosformular Datensätze per Drag and Drop verschieben
Beitrag von: markusxy am Juli 13, 2018, 21:51:20
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?
Titel: Re: A03: Im Endlosformular Datensätze per Drag and Drop verschieben
Beitrag von: PhilS am Juli 14, 2018, 02:05:04
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.
Titel: Re: A03: Im Endlosformular Datensätze per Drag and Drop verschieben
Beitrag von: DF6GL am Juli 14, 2018, 09:08:08
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.
Titel: Re: A03: Im Endlosformular Datensätze per Drag and Drop verschieben
Beitrag von: markusxy am Juli 14, 2018, 10:10:44
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.
Titel: Re: A03: Im Endlosformular Datensätze per Drag and Drop verschieben
Beitrag von: Lachtaube am Juli 14, 2018, 14:58:49
Mittels Listview ActiveX ist auch Drag & Drop möglich.
Titel: Re: A03: Im Endlosformular Datensätze per Drag and Drop verschieben
Beitrag von: MaxP am Juli 16, 2018, 11:19:09
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
Titel: Re: A03: Im Endlosformular Datensätze per Drag and Drop verschieben
Beitrag von: DF6GL am Juli 16, 2018, 14:47:47
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?
Titel: Re: A03: Im Endlosformular Datensätze per Drag and Drop verschieben
Beitrag von: Lachtaube am Juli 16, 2018, 15:21:39
Hier mal als Beispiel, wobei wie bei Franz auch, ein Feld zum Sortieren der Datensätze verwendet wird.
Titel: Re: A03: Im Endlosformular Datensätze per Drag and Drop verschieben
Beitrag von: MaxP am Juli 16, 2018, 17:08:10
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

Titel: Re: A03: Im Endlosformular Datensätze per Drag and Drop verschieben
Beitrag von: Lachtaube am Juli 16, 2018, 18:53:58
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.
Titel: Re: A03: Im Endlosformular Datensätze per Drag and Drop verschieben
Beitrag von: MaxP am Juli 16, 2018, 19:05:44
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.
Titel: Re: A03: Im Endlosformular Datensätze per Drag and Drop verschieben
Beitrag von: Lachtaube am Juli 16, 2018, 19:18:48
3.6 meinte ich auch. :)
Ich habe den Anhang in meinem Beitrag weiter oben dahingehend geändert.
Titel: Re: A03: Im Endlosformular Datensätze per Drag and Drop verschieben
Beitrag von: MaxP am Juli 17, 2018, 09:07:39
Hallo,
nun komme ich zwar rein, aber nicht viel weiter,
da div. Fehlermeldungen erscheinen.

Gruß
Max
Titel: Re: A03: Im Endlosformular Datensätze per Drag and Drop verschieben
Beitrag von: Lachtaube am Juli 17, 2018, 09:57:18
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.
Titel: Re: A03: Im Endlosformular Datensätze per Drag and Drop verschieben
Beitrag von: MaxP am Juli 17, 2018, 13:00:45
Ich verwende Win 7 64 pro

Leider funkt dein 2. Ansatz nicht, neue Fehlermeldungen bezügl. OLE nicht initialisiert.

Vielleicht wäre der Ansatz von Franz einfacher?
Titel: Re: A03: Im Endlosformular Datensätze per Drag and Drop verschieben
Beitrag von: DF6GL am Juli 17, 2018, 13:22:23
Hallo,


mein Ansatz benutzt kein OCX.

Mit dem MSCOMCTL.OCX habe ich auch so meine Schwierigkeiten...

Oftmals hilft, das OCX im Verzeichnis C:\Windows\syswow64 mit Regsvr32 (auch aus diesem Ordner)  als Administrator zu de-registrieren.

Anschließend das OCX mit der Dateiversion 6.1.98.46 überschreiben.

Danach wieder mit regsvr32 die Ocx-Datei neu als Administrator registrieren.

In der DB den Verweis löschen (enthaken) und das Steuerelement aus dem Formular löschen.
Die Db erneut starten und das Listview (Version 6.0) neu einbauen.

Probleme kann es auch geben, wenn mehrere verschiedene Version der Ocx-Datei installiert sind. Dann versuchen, die anderen zu de-installieren, bzw. de-registrieren.

Titel: Re: A03: Im Endlosformular Datensätze per Drag and Drop verschieben
Beitrag von: MaxP am Juli 18, 2018, 12:05:33
Hallo,
ich glaube, so komme ich mit meinen bescheidenen Kenntnissen nicht weiter.

Deshalb habe ich noch einmal im Netz nach einem geeigneten Code geschaut und bin fündig geworden.
Hiermit soll man die DS im Formular per Schaltflächen nach oben (Reihenfolge(1)) bzw. unten (Reihenfolge(-1)) verschieben können.
Allerdings funkt dieser Code (bei mir) nicht. Access meckert wegen der nicht deklarierten DB.

erforderliche Tab-Felder: IDKLSch (Primärschlüssel), Schulbildung (Text), Rflg (Byte, eindeutig), Sortierung nach Rflg.

Private Sub Reihenfolge(updn As Integer)
Dim RS As Recordset
Dim qry As String
Dim AktRS As Long
Dim NewNo As Byte
If Me.Rflg = 1 Then Exit Sub
AktRS = Me.IDKLSch
NewNo = Me.Rflg - updn
Me.Rflg = 255
Me.Requery
Set db = CurrentDb
qry = "SELECT IDKLSch, Schulbildung, Rflg FROM tblOPSchulbildung ORDER BY Rflg;"
Set RS = db.OpenRecordset(qry, dbOpenDynaset)
With RS
.FindFirst "Rflg = " & NewNo
If Not .NoMatch Then
.Edit
!Rflg = NewNo + updn
.Update
End If
.FindFirst "Rflg = " & 255
.Edit
!Rflg = NewNo
.Update
End With
Me.Requery
Me.RecordsetClone.FindFirst "IDKLSch = " & AktRS
Me.Bookmark = Me.RecordsetClone.Bookmark
End Sub


Ihr findet den Fehler wahrscheinlich sofort. Danke vorab.

Gruß
Max

Titel: Re: A03: Im Endlosformular Datensätze per Drag and Drop verschieben
Beitrag von: DF6GL am Juli 18, 2018, 14:32:35
Hallo,

lad doch deine Beispiel-DB mal hier hoch.....
Titel: Re: A03: Im Endlosformular Datensätze per Drag and Drop verschieben
Beitrag von: MaxP am Juli 18, 2018, 16:18:25
Hallo Franz,

hier die Beispiel-DB.

Gruß
Max
Titel: Re: A03: Im Endlosformular Datensätze per Drag and Drop verschieben
Beitrag von: DF6GL am Juli 18, 2018, 17:36:59
Hallo,


anbei entspr. meinem Vorschlag.

Shift gedrückt halten und auf Datensatz (Freie Fläche zwischen den Feldern,nicht Datensatzmarkierer) klicken.
Auf Zieldatensatz klicken.


Titel: Re: A03: Im Endlosformular Datensätze per Drag and Drop verschieben
Beitrag von: MaxP am Juli 18, 2018, 19:08:51
Hallo Franz,

super jetzt funkt es!
So habe ich nun auch ein Sortierfeld, das
ich für die Berichte dringend benötige.

Danke Dir für Deine Geduld!!

Gruß
Max
Titel: Re: A03: Im Endlosformular Datensätze per Drag and Drop verschieben
Beitrag von: Beaker s.a. am Juli 18, 2018, 20:44:20
Hallo,
Auch wenn's jetzt funzt.
ZitatAccess meckert wegen der nicht deklarierten DB.
Versuch's halt mit einem
Dim db As DAO.Database
Dieser Fehler deutet allerdings auf ein grundlegendes Problem. In
Deinem Modulen fehlt im Kopf die Zeile
Option Explicit
Diese solltest du unbedingt überall nachtragen. Dann hätte sich der
Compiler schon vorher mit einer Fehlermeldung bezügl. nicht definierter
Variable gemeldet.
gruss ekkehard
Titel: Re: A03: Im Endlosformular Datensätze per Drag and Drop verschieben
Beitrag von: MaxP am Juli 19, 2018, 10:05:47
Hallo Ekkehard,
ja, jetzt funzt auch dieser Code!!
Vielen Dank für deine Korrektur.

Jetzt habe ich eine 2. Möglichkeit,
die Reihgenfolge der DS zu verändern.

Gruß
Max
Titel: Re: A03: Im Endlosformular Datensätze per Drag and Drop verschieben
Beitrag von: Beaker s.a. am Juli 19, 2018, 21:40:51
Hallo Max,
Der zweite Teil des Posts ist der wichtigere.
gruss ekkehard
Titel: Re: A03: Im Endlosformular Datensätze per Drag and Drop verschieben
Beitrag von: MaxP am Juli 20, 2018, 16:10:28
Hallo noch mal,
ich krieg' die Motten!

Bei dem Versuch, den Code "Reihenfolge" auf meine vorhandene DB anzupassen, kommt immer der Fehler (s. Anlage). Die Fehlermeldungen sagen mir rein gar nichts. Obwohl ich Tab u. Form schon probehalber wie im lauffähigen Beispiel abgespeckt habe, funzt es trotzdem nicht.

Mir ist auch nicht klar, ob der Code
qry = "SELECT IDKLSch, Schulbildung, Rflg FROM tblOPSchulbildung ORDER BY Rflg;"
umbedingt mit der Anzahl der Felder in der Tab bzw. Abfrage identisch sein muss. Ich denke nein, denn das habe ich wiederum in der Beispiel-DB probiert, und dort funzt es trotzdem.

Gruß
Max
Titel: Re: A03: Im Endlosformular Datensätze per Drag and Drop verschieben
Beitrag von: PhilS am Juli 20, 2018, 16:15:11
Feldnamen, die einen Bindestrich, oder andere Sonderzeichen, enthalten, müssen in eckige Klammern eingeschlossen werden. Bsp:
SELECT [Pos-Id], Menge, .....
Sonst ist für einen Computer nicht klar, dass es sich nicht um eine Rechenaufgabe (X - Y = ?), sondern um einen zusammenhängenden Bergriff handelt.
Titel: Re: A03: Im Endlosformular Datensätze per Drag and Drop verschieben
Beitrag von: MaxP am Juli 20, 2018, 16:48:55
Ja meine alten Feldbezeichnungen, jedesmal stolpert man drüber!

Aber jetzt funzt es! Danke Dir!

Gruß
Max