none
Access 2010 - Sortieren und Filtern - diverse Probleme

    Frage

  • Hallo,

    ich beschäftige mich seit einiger Zeit mit mehreren Problemen beim Filtern und Sortieren, dabei habe ich folgende Ausgangssituation:

    In einem Unterformular wird der Inhalt einer Tabelle in der Datenblattansicht angezeigt - dies ist notwendig, weil ich die Filter- und Sortierfunktion in der Runtime verwenden möchte. Das UF wird in einem Formular eingebettet welches zwei Buttons enthält mit welchem zum einen alle Filter und zum anderen alle Sortierungen im Unterformular gelöscht werden können. Hierbei haben sich folgende Probleme ergeben:

    1.)   Sind ein Filter und eine Sortierung aktiv, so löst das Event „Form_ApplyFilter()“ nur dann aus, wenn sowohl Me.FilterOn als auch Me.OrderByOn auf False gesetzt werden. D.h. dass beim Deaktivieren der Sortierung, Me.Filter zwischengespeichert werden muss und Me.FilterOn zuerst auf False und anschließend wieder auf True gesetzt werden muss damit ApplyFilter feuert… Ist dies ein gewolltes Verhalten? Das Problem dabei ist nämlich, dass ich dadurch Filter und Sortierung nicht wirklich getrennt voneinander behandeln kann.

    2.)    Sind ein Filter und eine Sortierung aktiv und deaktiviert man anschließend die Sortierung, so muss bei einer neuerlichen Aktivierung der Sortierung diese 2x ausgewählt werden – beim ersten Mal wird die Spalte nicht Sortiert!

    3.)   Weiters habe ich bemerkt, dass Änderungen an Me.Filter, Me.OrderBy, Me.FilterOn und Me.OrderByOn via VBA nicht automatisch in die Formulareigenschaften gespeichert werden. D.h. dass in den Formulareigenschaften beim Start der Applikation bereits ein Filter vorhanden ist obwohl dieser vor dem Beenden aus den Variablen gelöscht wurde… Dies führt dazu, dass ich den Filter in einer eigenen Variable zwischenspeichern muss um ein zuverlässiges Verhalten zu erlangen – gibt es hier ev. eine andere Möglichkeit?

    Vielen Dank schon mal für eure Hilfe!

    Lg, Klingi


    Freitag, 26. April 2013 09:19

Antworten

  • Hallo

    Es kommt darauf an wie du das Formular schliesst. Verwendest du die Konstante acSaveNo dann werden Einträge im Filter nicht gespeichert.

    Wenn du später die Anwendung als accde betreibst werden Filter und Sortierung nie gespeichert. Darauf achten musst du nur dass vor dem Erstellen der accde Datei auf jedem Formular die entsprechenden Properties gelöscht werden (Filter und Sortierung)

    Gruss Markus

    • Als Antwort markiert klingi Dienstag, 21. Mai 2013 07:46
    Mittwoch, 15. Mai 2013 08:14

Alle Antworten

  • Hallo,

    1.)   Sind ein Filter und eine Sortierung aktiv, so löst das Event „Form_ApplyFilter()“ nur dann aus, wenn sowohl Me.FilterOn als auch Me.OrderByOn auf False gesetzt werden. D.h. dass beim Deaktivieren der Sortierung, Me.Filter zwischengespeichert werden muss und Me.FilterOn zuerst auf False und anschließend wieder auf True gesetzt werden muss damit ApplyFilter feuert… Ist dies ein gewolltes Verhalten? Das Problem dabei ist nämlich, dass ich dadurch Filter und Sortierung nicht wirklich getrennt voneinander behandeln kann.

    Dir steht frei, Form_ApplyFilter() selbst aufzurufen, ohne erst FilterOn auf False / True zu setzen:

    Call Form_ApplyFilter

    2.)    Sind ein Filter und eine Sortierung aktiv und deaktiviert man anschließend die Sortierung, so muss bei einer neuerlichen Aktivierung der Sortierung diese 2x ausgewählt werden – beim ersten Mal wird die Spalte nicht Sortiert!

    Kann ich nicht bestätigen. Zeig mal deinen Code.

    3.)   Weiters habe ich bemerkt, dass Änderungen an Me.Filter, Me.OrderBy, Me.FilterOn und Me.OrderByOn via VBA nicht automatisch in die Formulareigenschaften gespeichert werden. D.h. dass in den Formulareigenschaften beim Start der Applikation bereits ein Filter vorhanden ist obwohl dieser vor dem Beenden aus den Variablen gelöscht wurde… Dies führt dazu, dass ich den Filter in einer eigenen Variable zwischenspeichern muss um ein zuverlässiges Verhalten zu erlangen – gibt es hier ev. eine andere Möglichkeit?

    Na zum Glück wird er nicht gespeichert, wäre noch schöner, dass ein Benutzer durch Standard-Bedienfunktionen das Design ändern könnte. ;-)

    Wenn du ihn speichern willst, musst du das Formular im Entwurfsmodus öffnen, Filter/Sortierung setzen, speichern und dann normal öffnen.

    Gruss - Peter

    Donnerstag, 2. Mai 2013 07:20
    Moderator
  • Hallo Peter,

    vielen Dank für deine Antwort.

    1.) Wird mir wohl nichts anderes übrig bleiben... Ich hätte mir halt nur gedacht, dass sowohl FilterOn als auch OrderByOn jeweils für sich selbst "Form_ApplyFilter()" auslösen sollten...

    2.) Ich habe eine Testdatenbank ohne Zusatzfunktionen erstellt - auch diese zeigt das gleiche Verhalten wenn die Sortierung öfters zu- und weggeschaltet wird:

    https://dl.dropboxusercontent.com/u/21227893/TestFilter.accdb

    3.) Ja, da hatte ich wahrscheinlich einen Denkfehler. Ich vermute ich habe einmal via VBA den Filter geändert während das Formular in der Entwurfsansicht war wodurch sich vielleicht der Filter in die Formulareigenschaften eingetragen hat...

    lg, Christian

    Donnerstag, 2. Mai 2013 11:22
  • Hallo,

    2.) Ich habe eine Testdatenbank ohne Zusatzfunktionen erstellt - auch diese zeigt das gleiche Verhalten wenn die Sortierung öfters zu- und weggeschaltet wird:

    https://dl.dropboxusercontent.com/u/21227893/TestFilter.accdb

    Jetzt weiß ich, was du meinst. Ist in der Tat so, wenn du über das Ribbon gehst. Wenn du dir selbst 2 Buttons dafür baust, passiert das nicht.

    3.) Ja, da hatte ich wahrscheinlich einen Denkfehler. Ich vermute ich habe einmal via VBA den Filter geändert während das Formular in der Entwurfsansicht war wodurch sich vielleicht der Filter in die Formulareigenschaften eingetragen hat...

    Der Filter wird dann weggeschrieben, wenn du mit gesetztem Filter bzw. Sortierung das Formular speicherst. Das passiert aber nicht automatisch.

    Gruss - Peter

    Freitag, 3. Mai 2013 00:03
    Moderator
  • Guten Morgen,

    ich hab jetzt die Buttons eingebaut (wie auch in meinem eigentlichen Projekt) und kann jetzt damit Problem Nr. 3 simulieren:

    https://dl.dropboxusercontent.com/u/21227893/TestFilter2.accdb

    Testfall:

    1. Filter setzen "Firstname"
    2. OrderBy setzen "Phone"
    3. OrderBy mittels Button löschen
    4. Filter mittels Button löschen
    5. frmDaten schließen
    6. frmUFDaten in der Entwurfsansicht öffnen --> in den Formulareigenschaften befindet sich nun der letzte Wert im Feld OrderBy

    Der Ablauf funktioniert auch wenn man die Reihenfolge von Filter und OrderBy vertauscht - dann befindet sich allerdings ein Wert im Feld Filter...

    Leider konnte ich hierbei keinen eindeutigen Ablauf herausfinden mit welchem sich auch Problem Nr. 2 simulieren ließe, obwohl es auch hier aufgetreten ist.

    Ich glaube ja, dass Problem 2 und 3 den selben Hintergrund haben - nur komme ich nicht drauf...

    Danke und lg, Christian

    Freitag, 3. Mai 2013 07:02
  • Hallo,

    klingi wrote:

    https://dl.dropboxusercontent.com/u/21227893/TestFilter2.accdb

    Testfall:

    1. Filter setzen "Firstname"
    2. OrderBy setzen "Phone"
    3. OrderBy mittels Button löschen
    4. Filter mittels Button löschen
    5. frmDaten schließen
    6. frmUFDaten in der Entwurfsansicht öffnen --> in den
    Formulareigenschaften befindet sich nun der letzte Wert im Feld OrderBy

    Stimmt. Ich hab auch probiert, den Wert beim Schliessen wieder zu loeschen
    ...

    Me.OrderBy = ""

    bzw. im Hauptformular:

    Me!frmUFData.Form.OrderBy = ""

    Beides bleibt wirkungslos. Die Frage ist: stoert dich das?
    Dein urspruengliches Problem, dass nach Aufhebung der Sortierung der erste
    Sortierversuch ins Leere geht, ist mit den Buttons allerdings behoben.

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Dienstag, 7. Mai 2013 10:02
    Moderator
  • Hallo Peter,

    ja, hab ich mich auch schon gefragt - ich glaube ich kann mit dem Ergebnis leben - die Anwendung ist nicht so kritisch ;-) Ich wollte nur ausschließen, dass es nicht ein selbst verursachter Fehler war...

    Danke für deine Bemühungen!

    Ps: Ich werden den Thread nicht als "gelöst" markieren, da ich finde, dass es sich dabei ev. um einen Bug handelt.

    Dienstag, 14. Mai 2013 10:33
  • Hallo

    Es kommt darauf an wie du das Formular schliesst. Verwendest du die Konstante acSaveNo dann werden Einträge im Filter nicht gespeichert.

    Wenn du später die Anwendung als accde betreibst werden Filter und Sortierung nie gespeichert. Darauf achten musst du nur dass vor dem Erstellen der accde Datei auf jedem Formular die entsprechenden Properties gelöscht werden (Filter und Sortierung)

    Gruss Markus

    • Als Antwort markiert klingi Dienstag, 21. Mai 2013 07:46
    Mittwoch, 15. Mai 2013 08:14
  • Hi Markus,

    danke, jetzt funktioniert es so wie ich mir das vorstelle.

    lg, Christian

    Dienstag, 21. Mai 2013 07:46
  • Hallo,

    klingi wrote:

    danke, jetzt funktioniert es so wie ich mir das vorstelle.

    Welcher der beiden Vorschlaege hat dich denn weitergebracht? acSaveNo oder
    accde?

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Freitag, 24. Mai 2013 07:23
    Moderator
  • Eigentlich beide, obwohl ich acSaveNo nicht implementiert habe, da ich die Datenbank jetzt einfach als accde zur Verfügung stelle.

    lg, Christian

    Mittwoch, 29. Mai 2013 09:18