Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Automatische Sortierung im formularbasierten Filter

Begonnen von MarkusN, September 03, 2010, 09:41:27

⏪ vorheriges - nächstes ⏩

MarkusN

Hallo, ich habe jetzt wahrscheinlich ein etwas einfacheres Problem.  ;D

Also ich würde gerne per Button einen formularbasierten Filter öffnen und direkt alle Daten angezeigt bekommen, die Daten in einem Datumsfeld haben und diese automatisch sortieren lassen.

Der Filter öffnet sich schon per Knopfdruck, nur leider komme ich bei dem Rest nicht weiter.

Für Hilfen wäre ich sehr dankbar.

Lg


database


MarkusN

Das geht schon in die richtige Richtung, aber da wird ja nur ausgelesen wie die Formulare aktuell sortiert sind.
Um das auf meine Bedingungen umzuschreiben, fehlt mir da einiges an Fachwissen.

Für weitere Hilfen wäre ich also dankbar.

database

Hallo,

wenn die Sortierung auszulesen ist sollte sie auch zu setzen sein.
Versuch mal nach den Befehlen für die Filterung:

Für Absteigende Sortierung:


    Me.OrderBy = "[NamederSpalte] DESC"
    Me.OrderByOn = True


und für Aufsteigend:


    Me.OrderBy = "[NamederSpalte]"
    Me.OrderByOn = True


Damit sollte es lösbar sein

Peter

MarkusN

#4
Ich muss leider zugeben, dass ich das Problem immer noch nicht lösen konnte.
Leider habe ich da gleich mehrere Probleme.

1. ist die Sortierung immer absteigend. Ich habe schon versucht ASC zu verwenden, aber das funktionierte auch nicht.

2. Wird das Suchkriterium der vorherigen Suche gespeichert. Alle anderen Felder müssten also gelöscht werden. (Me.Filter = "" funktioniert nicht)

3. Werden so glaube ich keine Datensätze ausgeschlossen. Ich will ja nur Datensätze angezeigt bekommen, die Einträge in einem bestimmten Feld haben.

Im Moment sieht das ganze so aus.



Private Sub Befehl118_Click()

Dim fstr As String

On Error GoTo Err_Befehl118_Click

   DoCmd.RunCommand acCmdFilterByForm

Exit_Befehl118_Click:
   Exit Sub

Err_Befehl118_Click:
   MsgBox Err.Description
   Resume Exit_Befehl118_Click
   
   '-----------------------------------
   ' Formular Sortieren
   '-----------------------------------
   


     If Me.FilterOn Then
       If Not IsNull(Me.Filter) Then
           fstr = Me.Filter
           If Len(fstr) > 0 Then

           Me.OrderBy = "[Nächster Termin]ASC"
           Me.OrderByOn = True

           End If
        End If
     End If
   
End Sub


Grüße und einen schönen Start in die Woche

database

Hallo,

Wenn du den Code hinter deinm Button tatsächlich so stehen hast wie du ihn hier 'reinkopiert hast, kann das m.E. nicht laufen!
Die Sortierung setzt du da ja in der Fehlerbehandlung!

Nimm die Sortierung raus:

Me.OrderByOn = vbNullString
Me.OrderByOn = False


Den 'alten' Filter löschst du am Besten mit

Me.Filter = vbNullString

und dann nimmst du die Filterung raus mit:

Me.FilterOn = False

und erst DANACH setzt du den neuen Filter und gleich anschließend die Sortierung


Me.Filter = "DeinFilterKriterium" 'entspricht einer gültigen WHERE Klausel ohne Schlüsselwort WHERE
Me.FilterOn = true
'-----------------------------------
' Formular Sortieren
'-----------------------------------
Dim fstr As String

If Me.FilterOn Then
    If Not IsNull(Me.Filter) Then
        fstr = Me.Filter
        If Len(fstr) > 0 Then
           Me.OrderBy = "[Nächster Termin]" 'DESC optional
           Me.OrderByOn = True
        End If
    End If
End If



...und danach folgt erst die Fehlerbehandlung

Das sollte eigentlich schon so  funktionieren ??? :-\

Grüße

MarkusN

Ich enttäusche dich ja nur sehr ungerne, aber 2 Probleme habe ich noch.

  'Sortierung entfernen
    Me.OrderByOn = vbNullString    "Laufzeitfehler 5" Ungültiger Prozessaufruf oder ungültiges Argument


    'Neuen Filter setzen                     
    Me.Filter = "nächster Termin"    "Laufzeitfehler 2448" Sie können diesem Objekt keinen Wert zuweisen

Bei dem setzen des Filters würde ich gerne so etwas machen wie     Me.Filter = "nächster Termin len >0"

War wohl doch nichts mit dem einfacheren Problem.  ???

DF6GL

Hallo,

es muss so heißen:

Me.OrderBy = vbNullString
Me.OrderByOn = False


Nach was willst Du denn filtern?

Me.Filter = "nächster Termin len >0"

ist unverständlich.

Wenn Du alle DS anzeigen willst, bei denen im Feld (Spalte) [nächster Termin]  (Leerzeichen vermeiden!, mindestens aber Eckklammern benutzen!!) etwas eingetragen ist, dann eher so:

Me.Filter = "[nächster Termin] is not null"
Me.FilterOn=True

MarkusN

Genau, ich will alle Datensätze angezeigt bekommen, bei denen im Feld "Nächster Termin" ein Wert eingetragen ist.

Leider bekomme ich immer noch die Fehlermeldung.    "Laufzeitfehler 2448" Sie können diesem Objekt keinen Wert zuweisen
und das an 4 Stellen, wenn ich jeweils die vorherigen Zeilen entferne.       

     'Sortierung entfernen
        Me.OrderBy = vbNullString
        Me.OrderByOn = False
     
    'alten Filter löschen
    Me.Filter = vbNullString
   
    'Filterung rausnehmen
    Me.FilterOn = False
   
    'Neuen Filter setzen
    Me.Filter = "[nächster Termin] is not null"
    Me.FilterOn = True


MarkusN

Willst du dir das wirklich antun?  ;D

Die Datenbank bin ich gerade komplett am überarbeiten.
Da kommen 2 Tabellen mehr rein. Das mit der Firmentabelle ist grausam, aber das ist ein
anderes Problem.

Viel Spass damit, danke schön und nicht zuviel lachen.
obwohl lachen ist ja gesund.

lg

[Anhang gelöscht durch Administrator]

DF6GL

#11
Hallo,

na, es ist eher zum Weinen...  :'(      ;D


Ich habe nur den thema-bezogenen Code angesehen, der so funktioniert:

Private Sub Befehl118_Click()
   DoCmd.RunCommand acCmdRemoveFilterSort
   Me.Filter = "[nächster Termin] is not null" 'entspricht einer gültigen WHERE Klausel ohne Schlüsselwort WHERE
   Me.FilterOn = True
   Me.OrderBy = "[Nächster Termin]" 'DESC --> ABSTEIGEND
    Me.OrderByOn = True
End Sub



Das ursächliche Problem zur Fehlermeldung war, dass im "formularbasierten Filter" -Modus des Forms die OrderBy- und Filter- Eigenschaften nicht gesetzt werden können (was ja doppelt gemoppelt wäre...)





database

Hallo,

@DF6GL

es muss so heißen:

Me.OrderBy = vbNullString
Me.OrderByOn = False

...man(n) soll beim schreiben nicht am Kopf stehen ...  oder doch die Reihenfolge überprüfen wenn man die Argumente vorsortiert  ;D >:( ;D
mein Fehler *grrrr*

MarkusN

Na so lange keine grauen Haare wachsen, sind es keine bleibenden Schäden.  :D

Na das funktioniert schon sehr gut.
Ein kleiner Schönheitsfleck gibt es noch.
Wenn ich erst den automatischen Filter verwende, und danach den manuellen, steht im Feld "nächster Termin" noch "ist nicht null".
Aber Heute packe ich nur noch einige Kartons. Bin im Vorumzugsstress oder so.  :-\

Vielen Dank euch beiden für die Hilfe.
Du kennst jetzt die Datenbank und wirst wissen das ich bald wieder nach Hilfe schreie.  ;D

Schönen Abend noch.

database

Hallo,

ZitatNa so lange keine grauen Haare wachsen
tja das hättest du mir früher sagen sollen --- jetzt hab ich das Zeugs schon ein paar Jahre und werds nimmer los  :'(

:D :D :D