Neuigkeiten:

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

Mobiles Hauptmenü

Formular verliert nach Sortierung Filter

Begonnen von frapu, August 05, 2011, 15:36:38

⏪ vorheriges - nächstes ⏩

frapu

Ich hab es ja probiert. Es funktioniert nur wenn ich Namen angebe und weiß eben nicht. Dein Bsp. funktioniert nur wenn ich den Namen direkt angeben. So müsste ich aber für jedes Kombinationfeld eine eigene Sortierenfunktion schreiben.

DF6GL

Hallo,


naja, irgendwie mußt Du ja das betreffende Kombi "mitteilen" , indem Du vorausgehend in das Kombifeld klickst und gleich danach auf eine passende Schaltfläche, die den Code ausführt.  Sonst liefert Screen.PreviousControl nicht das gewünschte Steuerelement.

Statt PreviousControl kannst Du ja auch "Beim Hingehen" eine Public-Variable mit dem St.-El.-Namen setzen und die anschliessend im Code verarbeiten.

database

Hi,

@Franz
ZitatSelbst wenn Du den Namen der gebundenen Spalte ermittelst
Was nicht so einfach sein dürfte - die Spalten der Datenherkunft haben keine Namens-Eigenschaft - oder sollte ich das was übersehen haben?
Mir ist nur die Column(x) - Anrede bekannt.

Eventuell über irgendeine gut verrammelte API-Funktion zu ermitteln?

DF6GL

Hallo,

man könnte ja die SQl der Rowsource auslesen und die Select-Liste abklappern....

M. E. gibt es gerade deswegen dieses Lookup_ (-Objekt oder -Klasse oder was auch immer), die über deren Name-Eigenschaft eben den Spaltenenamen liefert.


Ein ganz anderer Weg, um zum Ziel zu kommen, wäre, in der Datenherkunft des Forms alle "Kombifelder"-Tabellen zu verknüpfen und lediglich das/die zu sortierenden Spalten in der Abfrage mit aufzunehmen. Dann kann man gleich den (evtl. über den im Kombi-Steuerelement stehenden) Spaltennamen beim OrderBy angeben.

Aber auch da muß das entspr. Kombi erst mal angeklickt werden, damit das Screen-Objekt sich das St.-El. "merkt". (unter der Voraussetzung, dass eine allgemeingültige Funktion errreicht werden soll.)


Ich denke aber mal, dass frapu in der "Fokus"-Falle hängt und Screen.ActiveControl (bzw. PreviousControl) die falschen St.-El. während der Code-Ausführung liefert, weil "falsch" geklickt wurde.



database

Hallo,

ja so ungefähr habe ich mir das auch schon gedacht.
Ehrlich gesagt habe ich mich mit so etwas (funktional gesehen) noch nie beschäftigt.

Dass die RowSource gescannt werden könnte - OK - klar
Dass Spaltennamen im Kombi mit aufgenommen werden könnten - auch OK

Aber ich glaube dennoch, dass der ganze Auwand nicht lohnt...

Tja und das Ding mit der Focus-Falle ... kommt erschwerend dazu :o

;D

frapu

Zitat von: DF6GL am August 12, 2011, 14:37:01
Hallo,

man könnte ja die SQl der Rowsource auslesen und die Select-Liste abklappern....

M. E. gibt es gerade deswegen dieses Lookup_ (-Objekt oder -Klasse oder was auch immer), die über deren Name-Eigenschaft eben den Spaltenenamen liefert.

wie soll das gehen? wie greife ich auf die Namen-Eigenschaft zu?

mit

ZitatMe.OrderBy = "Lookup_" & Screen.PreviousControl.Name & ".Name Desc"

gehts nicht, da .Name mir nicht den Namen liefert, sondern "Name" der Name ja schon ist.

Zitat
Ein ganz anderer Weg, um zum Ziel zu kommen, wäre, in der Datenherkunft des Forms alle "Kombifelder"-Tabellen zu verknüpfen und lediglich das/die zu sortierenden Spalten in der Abfrage mit aufzunehmen. Dann kann man gleich den (evtl. über den im Kombi-Steuerelement stehenden) Spaltennamen beim OrderBy angeben.

der Weg ist zu aufwendig. Da ich jedes Formular anpassen muss und das ist nicht realisierbar.

Zitat
Aber auch da muß das entspr. Kombi erst mal angeklickt werden, damit das Screen-Objekt sich das St.-El. "merkt". (unter der Voraussetzung, dass eine allgemeingültige Funktion errreicht werden soll.)

das Anklicken des Feldes ist Vorraussetzung, das soll ja auch nicht wegfallen. Ich will ja nur die Access eigene Sortierfunktion ersetzen und bei der muss ich ja in das Feld klicken nach dem ich sortieren will.

Zitat
Ich denke aber mal, dass frapu in der "Fokus"-Falle hängt und Screen.ActiveControl (bzw. PreviousControl) die falschen St.-El. während der Code-Ausführung liefert, weil "falsch" geklickt wurde.

ich hänge in keiner Fokus-Falle. Das ist ja nicht das Problem. Es funktioniert ja mit allen Textfeldern, Fokus passt. Bei den KombiFeldern hab ich auch den richtigen Fokus wenn ich das Feld anklicken, weiß aber halt nicht wie ich auf Namen zugreife.



frapu

Zitat von: database am August 12, 2011, 14:58:43
Aber ich glaube dennoch, dass der ganze Auwand nicht lohnt...

so siehts aus

Zitat
Tja und das Ding mit der Focus-Falle ... kommt erschwerend dazu :o

Fokus-Falle gibts nicht

So wie es aussieht gibts anscheinend keine richtige Lösung für mein Problem. Da werd ich wohl erst mal damit leben müssen nur auf Textfeldern sortieren  zu können.

Vielleicht behebt ja Microsoft den Bug zeitnah. Ist ja leider nicht der einzige der mit bei der Umstellung auf Access 2007 auf die Füße fällt.

database

Hallo, Guten Morgen,

ZitatVielleicht behebt ja Microsoft den Bug zeitnah
Naja, ob es dann auch wirklich ein Bug ist ...?

Derartige Probleme sind immer wieder Anlass zu Spekulationen um Bugs und vergessene Funktionen.
Bei der Neugestaltung des Office-Pakets ist ja nicht die alte Version um ein paar Sachen erweitert worden
sondern das ganze Paket wurde erneuert.
Jetzt stellt sich aber beispielsweise DEINE Problematik nur bei einem Teil jener Leute ein,
die diese Funktionalität aus der alten Version heraus weiter nutzen möchten, weil sie dort in einer individuellen Applikation auffällig in Verwendung gewesen ist.
Menschen, die mit Access 2007 einsteigen haben das Problem nicht - sie kennen die 2003-er Möglichkeit nicht und werden daher auch keine Einschränkung erkennen könen.
Ähnlich verhält es sich bei 2003 / 2010 oder 2007 / 2010.

Was hilft dir das jetzt...
Eigentlich nicht besonders viel, ich weiß ...
Wie Thomas Möller in dem von dir zitierten Beitrag in einem anderen Forum empfohlen hat - ändern.
Was sicherlich einiges an Aufwand mit sich bringt aber auch nur einmalig zu erledigen sein wird.

frapu

Für mich ist das Verhalten eindeutig ein Bug, denn:
- wenn man in einem gefilterten Formular in der Datenblattansicht  nach einem Feld sortiert bleibt der Filter erhalten
- wenn man in einem gefilterten Formular in der Formularansicht  nach einem Feld sortiert bleibt der Filter erhalten
- wenn man die Ansicht wechselt bleibt der Filter erhalten
- wenn man in einem gefilterten Formular in der Formularansicht in die Datenblattansicht wechselt und  nach einem Feld sortiert bleibt der Filter erhalten
- der Filter fliegt nur raus wenn in einem gefilterten Formular in der Datenblattansicht in die Formularansicht wechselt und dort sortiert

Für mich gibt's da keine logische Erklärung, dass dieses Verhalten gewollt sein soll.

database

Hallo,

verstehe ...

Ich möchte ja in gar keiner Weise deine Abeitsgewohnheiten kritisieren aber warum schaltet man zwischen Datenblattansicht und Formularansicht hin und her?

ZitatFür mich gibt's da keine logische Erklärung, dass dieses Verhalten gewollt sein soll.

In Access 2007 gibt es doch die Möglichkeit ein 'Geteiltes Formular' zu verwenden.
So viel ich weiß ist es damit möglich nach allen Regeln der Kunst zu sortieren, Filtern und die Daten zu bearbeiten.
Hast du das schon mal ausprobiert?

Vielleicht erklärt das dann, warum dieser Punkt ...
Zitat- der Filter fliegt nur raus wenn in einem gefilterten Formular in der Datenblattansicht in die Formularansicht wechselt und dort sortiert
...nicht ganz so wie von dir erwartet läuft.

Schönes WE!

frapu

#40
Zitat von: database am August 13, 2011, 11:42:32
Hallo,

verstehe ...

Ich möchte ja in gar keiner Weise deine Abeitsgewohnheiten kritisieren aber warum schaltet man zwischen Datenblattansicht und Formularansicht hin und her?

Datenblattansicht wird genutzt wenn man sich mehre Datensätzen anschauen/vergleichen will.
Formularansicht wird genutzt, wenn man sich nur einen Datensatz betrachtet bzw. anlegt

Zitat
ZitatFür mich gibt's da keine logische Erklärung, dass dieses Verhalten gewollt sein soll.

In Access 2007 gibt es doch die Möglichkeit ein 'Geteiltes Formular' zu verwenden.
So viel ich weiß ist es damit möglich nach allen Regeln der Kunst zu sortieren, Filtern und die Daten zu bearbeiten.
Hast du das schon mal ausprobiert?

ich habs mir mal angeschaut, aber auch keine Lösung, da es zu aufwendig ist alle Formular umzustellen und ich dort für die jeweilige Ansicht nur die Hälfte des Platzes habe

Zitat
Vielleicht erklärt das dann, warum dieser Punkt ...
Zitat- der Filter fliegt nur raus wenn in einem gefilterten Formular in der Datenblattansicht in die Formularansicht wechselt und dort sortiert
...nicht ganz so wie von dir erwartet läuft.

Schönes WE!

nö erkärt es nicht. So wie ich das Verhalten im Post #38 beschrieben habe, ergibt es für mich keinen Sinn. Entweder der Filter bliebt erhalten oder er fällt jedesmal raus.

Es ist ja ähnlich wie bei dem Menü Fenster, wo alle geöffneten Formulare angezigt werden. Diese funktioniert unter Access 2007 auch nicht mehr so wie es soll und deutet auf einen weiteren Bug hin.

database

Hallo,

"...aber auch keine Lösung, da es zu aufwendig ist alle Formular umzustellen..."
Auf diesen Umstand habe ich versucht hinzuweisen.

"...Diese funktioniert unter Access 2007 auch nicht mehr so wie es soll ..."
Ich würde auch hier eher sagen - es funktioniert nicht so wie du es von 2003 her gewohnt warst.
Einen Bug würde ich persönlich - in Hinblick darauf, dass unterschiedliche Versionen verschiedene
Funktionalitäten bieten - weder in der einen noch in der anderen Sache sehen.

Aber wenn du mit der Begrifflichkeit 'Bug' leichter lebst  - dann soll's einer sein.  ;)

Wünsch' einen schönen Feiertag!  ;D

frapu

So kleines Update. Ich hab die Sortieren-Funktion noch soweit angepasst, dass diese auch bei Controls in Unterformularen funktioniert.

Public Function sbl_sort(typ As String)
    Dim cs As String
    cs = Screen.ActiveControl.ControlSource
    If Screen.ActiveControl.ControlType = acTextBox Then
        If InStr(1, cs, "=") > 0 Then Exit Function
        If Screen.ActiveForm.Name = Screen.ActiveControl.parent.Name Then
            Screen.ActiveForm.OrderBy = cs & "  " & typ
            Screen.ActiveForm.OrderByOn = True
        Else
            Screen.ActiveForm.ActiveControl.Form.OrderBy = cs & "  " & typ
            Screen.ActiveForm.ActiveControl.Form.OrderByOn = True
        End If
    End If
End Function