Klasse zum Sortieren im Endlosformular

Diskussionen über den Quellcode (Module, Klassenstruktur, Schnittstellen u.s.w.) der Access Code Library

Re: Neue Klasse zum Sortieren im Endlosformular

Beitragvon Andreas Vogt » So 21. Jun 2015, 21:33

Hi,
hast du dir die Methode angesehen im Code von mir wie dort die Icons gesetzt werden? Es wird einfach nur die Caption um einen entsprechendes UniCode Zeichen erweitert.
Sieht zwar nicht so schön aus ist aber Stabil.
Andreas Vogt
Entwickler
 
Beiträge: 165
Registriert: Do 18. Mär 2010, 18:00
Wohnort: Offenburg
Accessversion: 2.0, 97, 2002, 2003, 2007, 2010
Access-Erfahrung: Fortgeschritten

Re: Neue Klasse zum Sortieren im Endlosformular

Beitragvon Josef Pötzl » So 21. Jun 2015, 21:51

Hallo!

Die Variante mit dem Ändern der Caption kann in die Klasse eingebaut werden.
Eine passende "Weiche" ist bereits enthalten.

LG
Josef
Josef Pötzl
Moderator
 
Beiträge: 805
Registriert: Mo 30. Nov 2009, 10:08
Wohnort: Klagenfurt
Accessversion: 2016

Re: Neue Klasse zum Sortieren im Endlosformular

Beitragvon Andreas Vogt » So 21. Jun 2015, 22:19

Was ich nicht verstehe ist folgendes. Klick ich auf Nachnamen möchte ich nach dem Nachnamen sortieren.
Also würde ich schreiben: .Add Me.labFamilienname, "Familienname"

Eventuell möchte ich bei größeren Datensätzen zusätzlich auch nach dem Vornamen als 2. aufsteigend sortieren.
Dann würde ich schreiben: .Add Me.labFamilienname, "Familienname, Vorname"

Eventuell möchte ich den Vornamen zusammen mit der PLZ sortieren, aber die PLZ soll immer absteigend sortiert angezeigt werden unabhängig von der Sortierrichtung des Vornamens.
Dann würde ich schreiben .Add Me.labVorname, "Vorname, PLZ [DESC]"

Aber genau das funktioniert nicht mit deinem Code.

Gruß Andreas
Andreas Vogt
Entwickler
 
Beiträge: 165
Registriert: Do 18. Mär 2010, 18:00
Wohnort: Offenburg
Accessversion: 2.0, 97, 2002, 2003, 2007, 2010
Access-Erfahrung: Fortgeschritten

Re: Neue Klasse zum Sortieren im Endlosformular

Beitragvon Josef Pötzl » So 21. Jun 2015, 22:23

aber die PLZ soll immer absteigend sortiert angezeigt werden

.. dann schreibst du in meinem Beispiel:
Code: Alles auswählen
.Add Me.labVorname, "Vorname [DESC], PLZ DESC"


[DESC] steht für das Wechseln der Reihenfolge, wenn man mehrfach auf das gleiche Steuerelement klickt (Verhalten wie im Windows-Explorer).
Josef Pötzl
Moderator
 
Beiträge: 805
Registriert: Mo 30. Nov 2009, 10:08
Wohnort: Klagenfurt
Accessversion: 2016

Re: Neue Klasse zum Sortieren im Endlosformular

Beitragvon Andreas Vogt » So 21. Jun 2015, 23:03

Hallo,
halte ich nicht für so praktikabel.

Wenn ich die Function GetOrderByString entsprechend ändere funktioniert das ganze ohne das [DESC]:

Code: Alles auswählen
Public Function GetOrderByString(ByVal UseDesc As Boolean)

    Dim i As Long
    Dim SplitString As Variant
    Dim DescString As String
   
    If UseDesc Then
        DescString = " DESC"
    End If
   
    OrderByStatement = Replace(OrderByStatement, " ,", ",")
    SplitString = Split(OrderByStatement, ",")
    For i = 1 To UBound(SplitString)
        GetOrderByString = GetOrderByString & ", " & Trim(SplitString(i))
    Next i
   
    SplitString = Split(SplitString(0), " ")
    GetOrderByString = SplitString(0) & DescString & GetOrderByString

End Function


So wird aus dem OrderByStatement-String das erste Feld entnommen, eventuelle Anhängsel wie DESC abgeschnitten, und dahinter DescString und die restlichen Sortierfelder wie angegeben angehängt.

Gruß Andreas
Andreas Vogt
Entwickler
 
Beiträge: 165
Registriert: Do 18. Mär 2010, 18:00
Wohnort: Offenburg
Accessversion: 2.0, 97, 2002, 2003, 2007, 2010
Access-Erfahrung: Fortgeschritten

Re: Neue Klasse zum Sortieren im Endlosformular

Beitragvon Josef Pötzl » So 21. Jun 2015, 23:39

Hallo!

Dann versucht bitte einmal folgende Regel umzusetzen:

Wenn aufsteigend sortiert wird, soll folgender OrderBy-String entstehen:
Familienname, Vorname, Ort, PLZ

Wenn absteigend sortiert wird, soll OrderBy so aussehen:
Familienname DESC, Vorname DESC, Ort, PLZ

=> Familienname und Vorname immer gleich sortiert; Ort und PLZ immer aufsteigend.

Anm.: statt [DESC] sollte man vielleicht besser [SORT], [DYNSORT] o. ä. schreiben.

LG
Josef
Josef Pötzl
Moderator
 
Beiträge: 805
Registriert: Mo 30. Nov 2009, 10:08
Wohnort: Klagenfurt
Accessversion: 2016

Re: Neue Klasse zum Sortieren im Endlosformular

Beitragvon Andreas Vogt » Mo 22. Jun 2015, 07:19

Hallo,
die Frage ist, was wird gewollt vom Anwender?
Eine Dynamische Änderung der Sortierung von mehr als 1 Datenfeld ist da vieleicht der Spezialfall.
Das sollte man dann als optionale Möglichkeit realisieren.

Gruß Andreas
Andreas Vogt
Entwickler
 
Beiträge: 165
Registriert: Do 18. Mär 2010, 18:00
Wohnort: Offenburg
Accessversion: 2.0, 97, 2002, 2003, 2007, 2010
Access-Erfahrung: Fortgeschritten

Re: Neue Klasse zum Sortieren im Endlosformular

Beitragvon Andreas Vogt » Mo 22. Jun 2015, 08:08

Hallo,
so hier nun die Lösung:
Code: Alles auswählen
Public Function GetOrderByString(ByVal UseDesc As Boolean)

    Dim i As Long
    Dim SplitString As Variant
    Dim DescString As String
    Dim OrderString As String
   
    If UseDesc Then
        DescString = " DESC"
    End If
   
    OrderString = Replace(OrderByStatement, " ,", ",")
    OrderString = Replace(OrderString, " [DESC]", DescString)
   
    SplitString = Split(OrderString, ",")
    For i = 1 To UBound(SplitString)
        GetOrderByString = GetOrderByString & ", " & Trim(SplitString(i))
    Next i
   
    SplitString = Split(SplitString(0), " ")
    GetOrderByString = SplitString(0) & DescString & GetOrderByString
   
End Function


Andreas
Andreas Vogt
Entwickler
 
Beiträge: 165
Registriert: Do 18. Mär 2010, 18:00
Wohnort: Offenburg
Accessversion: 2.0, 97, 2002, 2003, 2007, 2010
Access-Erfahrung: Fortgeschritten

Re: Neue Klasse zum Sortieren im Endlosformular

Beitragvon Josef Pötzl » Mo 22. Jun 2015, 09:25

Hallo!

Eine Dynamische Änderung der Sortierung von mehr als 1 Datenfeld ist da vielleicht der Spezialfall.

In meinen Anwendungen habe ich diesen Spezialfall durchaus öfter. ;-)

.. z. B. immer dann, wenn ich nach etwas sortiere, dass als zusammengesetzter Text gezeigt wird.
Beispiel:
Angezeigt wird: DokumentTypCode & Format([LaufendeNummer], "000000")
Sortiert wird nach DokumentTypCode, LaufendeNummer (wegen Möglichkeit zur Indexnutzung, da SQL mit OrderBy an den Server übergeben wird.)
Die Sortierung wird mit Klick auf das Bezeichnungsfeld des zusammengesetzten Textes eingeleitet => ich benötige 2x das [DYNSORT]-Tag im OrderBy-Template.

Zum Code von dir:
Du musst aufpassen, ob nicht irrtümlich bereits DESC beim ersten Feldnamen steht.

Vorschlag (ist aber Luftcode!):
Code: Alles auswählen
Public Function GetOrderByString(ByVal UseDesc As Boolean)

    Dim SplitString() As String
    Dim DescString As String
    Dim OrderString As String
   
    If UseDesc Then
        DescString = " DESC"
    End If
   
    OrderString = Replace(OrderByStatement, " ,", ",")
    OrderString = Replace(OrderString, " [DESC]", DescString)
   
    SplitString = Split(OrderString, ",")

    OrderString(0) = Replace(Replace(OrderString(0), " ASC", vbnullstring), " DESC", vbNullstring) & DescString
   
    GetOrderByString = Join(OrderString, ",")
   
End Function


Jetzt kann man für den ersten Feldnamen in der OrderBy-Angabe das [DESC] weglasssen.
Diese Variante finde ich allerdings nicht sehr einheitlich. Wenn man den dynamischen Wechsel mit [DESC] o. ä. angibt, warum wird dann auch im ersten Feldnamen die Sortierrichtung gendert, obwohl das nicht dabei steht?
=> Falls man das für den "Standardfeldnamen" nicht machen müssen muss, würde ich eher so eine Schnittstelle vorschlagen:

Code: Alles auswählen
.Add Me.labFamilienname, "Familienname", "Vorname [DESC], LaenderCode, Ort, PLZ, Strasse"

Also:
Code: Alles auswählen
Public Function Add(ByVal ControlRef As Control, ByVal DataFieldName as string, Optional ByVal AdditionalOrderByStatement As String) As FormSortingControl
...


LG
Josef
Josef Pötzl
Moderator
 
Beiträge: 805
Registriert: Mo 30. Nov 2009, 10:08
Wohnort: Klagenfurt
Accessversion: 2016

Re: Neue Klasse zum Sortieren im Endlosformular

Beitragvon Andreas Vogt » Mo 22. Jun 2015, 10:08

Hallo,
nein, ein [DESC] nach dem ersten Feld spielt keine Rolle da folgender Code alles nach dem Feldnamen abschneidet:
SplitString = Split(SplitString(0), " ")

Insofern würde ich nichts ändern.
Bräuchte man nur noch ein entsprechendes Demonstrations-Formular wo man z.B. per Combo die Sortierung/Präferenz einstellen kann.

Andreasd
Andreas Vogt
Entwickler
 
Beiträge: 165
Registriert: Do 18. Mär 2010, 18:00
Wohnort: Offenburg
Accessversion: 2.0, 97, 2002, 2003, 2007, 2010
Access-Erfahrung: Fortgeschritten

VorherigeNächste

Zurück zu Quellcode

cron