Neuigkeiten:

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

Mobiles Hauptmenü

einem Filter ein zusätzliches Argument hinzufügen

Begonnen von Carl, Januar 25, 2018, 13:53:29

⏪ vorheriges - nächstes ⏩

Carl

Ich habe mal eine Frage zum Filtern.

(1) In der db funktioniert alles. Es geht um eine Verbesserung eines Formulars.
(2) HF mit UFOendlos
(3) Im HF habe ich ein Listenfeld, das die Datensätze im UFO wie folgt filtert:


     With Me!frmTeilnehmerzuordnungUFO2.Form
         .Filter = "massnahmeDurchgang = " & Me!Kombinationsfeld82 & ""
         .FilterOn = True
     End With


Jetzt sollen
(a) zusätzlich zu den gefilterten DS im UFO alle DS angezeigt werden, die im Feld [massnahmeDurchgang] den Zahlenwert 58 haben. Also Filter beibehalten und zusätzlich alle mit rein nehmen wo massnahmeDurchgang=58

(b) diese DS mit massnahmeDurchgang=58 immer am Ende, d.h. nach dem letzten gefilterten DS, der nicht 58 hat

Geht sowas?

Carl



Joss

Hallo Carl,

zu a:
.Filter = "massnahmeDurchgang = " & Me!Kombinationsfeld82 & _
           " Or massnahmeDurchgang = 58"


zu b:
Da wirst du ein zusätzliches Ja/Nein-Feld einfügen müssen, über das du die Sortierung ändern kannst.

Gruß
Josef

Lachtaube

#2
Wer sich SQL-Grundkenntnisse erworben hat, würde solch banale Fragen kaum stellen. Du bist ist doch nicht mehr ganz neu in der Materie - oder?
Private Sub Kombinationsfeld82_AfterUpdate()
   With Me!frmTeilnehmerzuordnungUFO2.Form
      .Filter = "massnahmeDurchgang = " & Me.Kombinationsfeld82 & " OR " & _
                "massnahmeDurchgang = 58"
      .FilterOn = True
      .OrderBy = "massnahmeDurchgang = 58 DESC"
      .OrderByOn = True
   End With
End Sub
Grüße von der (⌒▽⌒)

Carl

#3
Ja, aber es ist nicht einfach.

er meckert an:


.OrderBy = "massnahmeDurchgang = 58 DESC"


auch
.OrderBy = "massnahmeDurchgang = " 58 DESC


geht nicht. Access fragt nach dem Parameterwert für "massnahmeDurchgang = 58".

Wie muss es richtig heißen? Danke für Deine Geduld.

Carl

Carl

Zitat von: Joss am Januar 25, 2018, 14:08:16
Hallo Carl,

zu b:
Da wirst du ein zusätzliches Ja/Nein-Feld einfügen müssen, über das du die Sortierung ändern kannst.

Hallo Josef,

kannst Du mir mal den Code zeigen, wenn ich ein extra Feld [janein58] hätte? Ich glaube nämlich, so ein Feld wäre auch für andere Zwecke nützlich. Vielleicht sollte ich es in der Abfrage berechnen lassen?

Carl

Lachtaube

Versuche es mit .OrderBy = "[massnahmeDurchgang] = 58 DESC"
Grüße von der (⌒▽⌒)

Joss

.OrderBy = "massnahmeDurchgang DESC"


Ob das den gewünschten Erfolg bringt?

Gruß
Josef

Joss

Hallo Carl,

ZitatmassnahmeDurchgang=58 immer am Ende

• füge ein Ja/Nein-Feld (vielleicht mit dem Namen "Sortierfeld"?) in die Tabelle ein, die dem UF zugrunde liegt.
• Dann setzt du im Datensatz 58 einen Haken,
• ziehst das Sortierfeld mit in die Abfrage,
• und sortierst es absteigend.
Dadurch steht es immer am Ende der Liste.

Außer ich habe dich falsch verstanden?

Gruß
Josef

Carl

Doch, genau richtig verstanden. Ich habe jetzt den Code von Lachtaube flott gekriegt. Dadurch erscheinen zuerst die DS mit dem gewählten Maßnahmedurchgang und darunter die mit dem immer gleichen Maßnahmedurchgang Nr. 58.


   With Me!frmTeilnehmerzuordnungUFO2.Form
      .Filter = "massnahmeDurchgang = " & Me.Kombinationsfeld82 & " OR " & _
                "massnahmeDurchgang = 58"
            .FilterOn = True
      .OrderBy = "[massnahmeDurchgang] = 58 DESC"
      .OrderByOn = True
   End With


Und jetzt werden aber die Einträge mit dem gewählten Maßnahmedurchgang nicht mehr alphabetisch angezeigt.

Muss man dazu wohl doch die Variante mit dem zweiten Sortierfeld und der Abfrage wählen?

Carl

Lachtaube

Weitere Sortierangaben kannst Du anhängen (Ausdruck gehört in eine Zeile):
.OrderBy = "[massnahmeDurchgang] = 58 DESC, FeldnameNachDemAlphabetischSortiertWerdenSoll"
Grüße von der (⌒▽⌒)

Carl

#10
Ah vielen Dank!

Ich habe jetzt versucht, das Ganze auf eine Öffnungsprozedur anzuwenden, die auch die DMax-Funktion enthält. Leider funktioniert der String von unten da nicht mehr:


Private Sub Form_Load()
   With Me.frmTeilnehmerzuordnungUFO2.Form
      .Filter = "massnahmeDurchgang = " & DMax("ID", "abfmassnahmedurchgaenge") OR " & _
                "[massnahmeDurchgang] = 58 DESC"
      .FilterOn = True
   End With
End Sub


Ziel ist, dass im UFO zuerst die DS mit der maximal höchsten ID in [massnahmeDurchgang] angezeigt werden und danach die mit der 58.

Was bedeutet denn das Zeichen & mit dem Unterstrich? "& _"?

Und spielen die Zeilenumbrüche eine Rolle oder ist das nur eine optische Unterscheidung für Menschen?

Carl


PhilS

Zitat von: Carl am Januar 26, 2018, 09:11:16
Was bedeutet denn das Zeichen & mit dem Unterstrich? "& _"?

Und spielen die Zeilenumbrüche eine Rolle oder ist das nur eine optische Unterscheidung für Menschen?
Ich glaube mein VBA-SQL-String-Tutorial wäre eine gute Lektüre für dich.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Joss

Hallo Carl,

ZitatIch habe jetzt versucht, das Ganze auf eine Öffnungsprozedur anzuwenden, die auch die DMax-Funktion enthält. Leider funktioniert der String von unten da nicht mehr:
... "[massnahmeDurchgang] = 58 DESC"

DESC gehört nicht in den Filter.
... "[massnahmeDurchgang] = 58"

Gruß
Josef