Neuigkeiten:

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

Mobiles Hauptmenü

Listenfeld aufsteigend sortieren nach letzter Spalte

Begonnen von cyberchris, April 29, 2013, 17:10:36

⏪ vorheriges - nächstes ⏩

cyberchris

Hallo zusammen,

ich habe mal wieder ein kleines Problemchen....

Per VBA befülle ich ein Listenfeld mit Me.lstVorhanden.RowSource = ... Me.lstVorhanden.RowSource = Me.lstVorhanden.RowSource & ... usw.

Dieses Listenfeld möchte ich anschließend nach der letzten Spalte aufsteigend sortieren lassen.


Geht das?

Vielen dank
Gruß Christoph

Stapi

Hallo

Über die VBA Funktion " Sort " kann eine "ASC" aufsteigend "DESC" absteigende sortierung vorgenommen werden
Grüße aus dem schönen NRW
Stefan

cyberchris


MzKlMu

Hallo,
zeige mal genau, wie Du das Listenfeld per VBA befüllst. Mit dem oben gezeigten Codefragmenten kann ich nichts anfangen.
Gruß Klaus

cyberchris

Hi,

so wird das Listenfeld zusammengebaut:

    If Not IsNull(Me.OpenArgs) Then
        Set rstFirma = CurrentDb.OpenRecordset("SELECT * FROM vFirma")
        While Not rstFirma.EOF
            sSuchstring = rstFirma!Nummer & "-"
            For n = 1 To Len(Me.OpenArgs) - (Len(sSuchstring) + 7)
                If Mid(Me.OpenArgs, n, Len(sSuchstring)) = sSuchstring Then
                    sIdentnummer = Mid(Me.OpenArgs, n, Len(sSuchstring) + 8)
                    If ch = False Then Me.lstVorhanden.RowSource = "Identnummer;Bezeichnung;Typ/Ausführung;Messbereich/Größe;Tol.;Einh.;Standort;Abteilung;Arbeitsplatz;Ausgabe;Status;Fälligkeit;IDoWAG;"
                    If ch = True Then Me.lstVorhanden.RowSource = Me.lstVorhanden.RowSource & ";"
                    Me.lstVorhanden.RowSource = Me.lstVorhanden.RowSource & sIdentnummer & ";"
                    bez = Nz(DLookup("Bezeichnung", "PMDB", "Identnr='" & sIdentnummer & "'"), "")
                   
                    If Sprache = "EN" Then
                        bez = Nz(DLookup("Name_EN", "vBezeichnung", "Nummer='" & bez & "'"), "") & ";"
                    Else
                        bez = Nz(DLookup("Name", "vBezeichnung", "Nummer='" & bez & "'"), "") & ";"
                    End If
                   
                    Me.lstVorhanden.RowSource = Me.lstVorhanden.RowSource & bez
                    Me.lstVorhanden.RowSource = Me.lstVorhanden.RowSource & Nz(DLookup("Typ", "PMDB", "Identnr='" & sIdentnummer & "'"), "") & ";"
                    Me.lstVorhanden.RowSource = Me.lstVorhanden.RowSource & Nz(DLookup("Messbereich", "PMDB", "Identnr='" & sIdentnummer & "'"), "") & ";"
                    Me.lstVorhanden.RowSource = Me.lstVorhanden.RowSource & Nz(DLookup("Toleranz", "PMDB", "Identnr='" & sIdentnummer & "'"), "") & ";"
                    Me.lstVorhanden.RowSource = Me.lstVorhanden.RowSource & Nz(DLookup("Einheit", "PMDB", "Identnr='" & sIdentnummer & "'"), "") & ";"
                    Me.lstVorhanden.RowSource = Me.lstVorhanden.RowSource & Nz(DLookup("Standort", "PMDB", "Identnr='" & sIdentnummer & "'"), "") & ";"
                    Me.lstVorhanden.RowSource = Me.lstVorhanden.RowSource & Nz(DLookup("Abteilung", "PMDB", "Identnr='" & sIdentnummer & "'"), "") & ";"
                    Me.lstVorhanden.RowSource = Me.lstVorhanden.RowSource & Nz(DLookup("Arbeitsplatz", "PMDB", "Identnr='" & sIdentnummer & "'"), "") & ";"
                    Me.lstVorhanden.RowSource = Me.lstVorhanden.RowSource & Nz(DLookup("TempAusgabe", "PMDB", "Identnr='" & sIdentnummer & "'"), "") & ";"
                    Me.lstVorhanden.RowSource = Me.lstVorhanden.RowSource & Nz(DLookup("Status", "PMDB", "Identnr='" & sIdentnummer & "'"), "") & ";"
                    Me.lstVorhanden.RowSource = Me.lstVorhanden.RowSource & Nz(DLookup("Faelligkeit", "PMDB", "Identnr='" & sIdentnummer & "'"), "") & ";"
                    Me.lstVorhanden.RowSource = Me.lstVorhanden.RowSource & Nz(DLookup("IDoWAG", "PMDB", "Identnr='" & sIdentnummer & "'"), "")
                    ch = True
                End If
            Next
            rstFirma.MoveNext
        Wend
        rstFirma.Close
        If ch = False Then Me.lstVorhanden.RowSource = ";;Keine Verweise vorhanden"
    End If

MzKlMu

Hallo,
das Vorhaben halte ich für ziemlich abenteuerlich. Hast Du keine Tabelle die Du dem Listenfeld zuweisen kannst?
Wenn nein warum nicht.

Eine Werteliste für ein Listenfeld ist eher unbrauchbar als wirklich nützlich. Und die auch noch per VBA zusammengebaut.
Gruß Klaus

cyberchris

Hi,

das hat damit zu tun, dass in einem Datensatz Beziehungen zu anderen Datensätzen vorhanden sein können, die man manuell einträgt mittel Identnummer. Bei Doppelklick auf das Beziehungsfeld sucht er die IDs raus und prüft diese ob vorhanden und listet dann alle in einem neuen Form mit Listenfeld auf.
Hier kann ich dann die IDs anklicken und komme dann wiederum auf diese Stammdaten.

Gruß Christoph

MzKlMu

Hallo,
ZitatBei Doppelklick auf das Beziehungsfeld sucht er die IDs raus und prüft diese ob vorhanden und listet dann alle in einem neuen Form mit Listenfeld auf.
das kannst Du doch viel einfacher mit einer Abfrage machen mit der ID als Where Klausel. Das Listenfeld wird an dies Abfrage gebunden.
Gruß Klaus

cyberchris

Ich muss aber zuerst das Beziehungsfeld auslesen und prüfen ob überhaupt was drin ist. Denn das feld kann auch mit anderen Daten befüllt sein. Er prüft vorher nach bestimmten Zeichen, die in der ID enthalten sind.

MzKlMu

Hallo,
das kannst Du doch unabhängig von der Abfrage prüfen.

ZitatDenn das feld kann auch mit anderen Daten befüllt sein.
Was heißt mit anderen Daten? Ein Beziehungfeld ist im Regelfall ein Zahlenfeld und sonst nichts.
Gruß Klaus

cyberchris

Hi, habe es hier nur so als Beziehungsfeld betitelt. Ist eigentlich ein freies Textfeld, bei dem es keine Einschränkungen gibt.

Bsp. Datensatz "8-4711". In diesem Datensatz steht im o. g. Textfeld "8-4712, 8-4713, weitere Anhänge siehe Dok."
Wenn ich dann dieses Textfeld anklicke, sucht er nach dem Zeichen "-" und liest dann die ID aus. In diesem Fall werden die beiden IDs aufgelistet und ich kann per Klick zu diesen Datensätzen springen.


Gruß Christoph

DF6GL

Hallo,

mein einziger Kommentar: Ohjeee   :o  ;)


Mein einziger Ratschlag: Befasse Dich zunächst DRINGEND mit Normalisierung (Links sind in meiner Signatur)  und bau die DB , sprich die Tabellen, entsprechend um, sonst wird das Ganze nix...   8)  ;)
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

cyberchris

Dies war die schnellste Möglichkeit Beziehungen zu anderen Datensätze realisieren zu können. Und das wichtigste dabei ist...es funktioniert !!!

Dafür habe ich leider keine Zeit. Möchte eigentlich nur ein kurze Hilfe, wie ich die Sortierung ändern/festlegen kann.

DF6GL

Hallo,

naja, die Zeit wirst Du jetzt wohl trotzdem investieren müssen...

Eine Möglichkeit wäre, die WertListe-Elemente vor dem Zusammenbau zum Rowsource-String zu sortieren:

http://www.dbwiki.net/wiki/VBA_Tipp:_Bubblesort
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

MzKlMu

#14
Hallo,
ZitatMöchte eigentlich nur ein kurze Hilfe, wie ich die Sortierung ändern/festlegen kann.
Das ist mit einer kurzen Hilfe nicht getan. Der Aufwand ist auf Grund des völlig falschen Datenmodells enorm. Siehe Link von Franz.
Und um es noch mal deutlich zu sagen, Du musst erst sortieren und dann den Werteliste String zusammenbauen.
So wie Du das jetzt hast, halte ich es für ausgeschlossen das zu sortieren, es geht nicht, die Werteliste ist ja fertig.

Also denkbar wäre folgendes:
- Array mit den Werten füllen
- Array sortieren (mit Bubblesort z.B.)
- Werteliste aus sortiertem Array füllen.

Vermutlich hat aber die Ausgangstabelle noch nicht mal einen Primärschlüssel, sodass der Aufwand für das Array geradezu gigantisch wird, da alle Spalten in das Array geschrieben werden müssen und beim Sortieren auch die Position im Array getauscht werden muss, für alle angezeigten Spalten.

Da ich das aber noch nie gemacht und noch nie benötigt habe, kann ich nicht weiter helfen.
Gruß Klaus