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 ⏩

DF6GL

Hallo,

ich verstehe nicht, was genau Du überhaupt machen willst...

Wenn Du nach einem Kombifeld(inhalt) sortieren  (Was heißt das überhaupt?) willst, dann kennst Du doch den Namen des Kombis...und damit auch den Namen der gebundenen Spalte...


Vermutlich gehst Du die Hintertür an die Sache ran...

" In Access 2003 war das nicht der Fall. "


kann ja sein, dass es da Verschlimmbesserungen gibt.


Wenn ein Form mit Docmd.Openform und Where-Condition Parameter geöffnet wird, wird ein Filter gesetzt. Wenn Du nicht filtern willst, dann setze über das Openargs-Argument  die Recordsource des Forms mit einer passenden SQL.


frapu

Zitat von: DF6GL am August 11, 2011, 18:51:34
Hallo,

ich verstehe nicht, was genau Du überhaupt machen willst...

eine eigene Sortieren Funktion bauen, da die Access eigenen Buttons im Ribbon oder Kontext Menü nicht richtig funktionieren, siehe 1. Post

Zitat
Wenn Du nach einem Kombifeld(inhalt) sortieren  (Was heißt das überhaupt?) willst, dann kennst Du doch den Namen des Kombis...und damit auch den Namen der gebundenen Spalte...

na nicht genau. ich weiß hier nicht wie ich auf diese korrekte Bezeichnung komme, damit die Sortierung in VBA nach dem Kombinationsfeld funktioniert.

Zitat
Vermutlich gehst Du die Hintertür an die Sache ran...

" In Access 2003 war das nicht der Fall. "

kann ja sein, dass es da Verschlimmbesserungen gibt.


Wenn ein Form mit Docmd.Openform und Where-Condition Parameter geöffnet wird, wird ein Filter gesetzt. Wenn Du nicht filtern willst, dann setze über das Openargs-Argument  die Recordsource des Forms mit einer passenden SQL.


Filtern funktioniert ja, das Problem ist, dass der Filter nach dem Sortieren verloren geht.

DF6GL

Hallo,

ja, aber wenn der Filter verloren geht, mußt Du halt einen Workaround benutzen...

Es gibt  m. W. keine Einstellung, die das Verhalten von A2003 nachempfindet.


(Es wird übrigens nicht nach einem Kombifeld gefiltert, sondern der Spalteninhalt (Domäne) einer Tabelle/Abfrage wird gefiltert.)



"eine eigene Sortieren Funktion bauen"



Sub btnSortSpalte1Down_Click()
Me.OrderBy="[Spalte1] desc"
Me.OrderByOn =true
End Sub

frapu

#18
Zitat von: DF6GL am August 11, 2011, 19:09:53
Hallo,

ja, aber wenn der Filter verloren geht, mußt Du halt einen Workaround benutzen...

Es gibt  m. W. keine Einstellung, die das Verhalten von A2003 nachempfindet.

also so wie es aussieht ist ein Bug im Access 2007, hier hat auch jemand das Problem http://www.ms-office-forum.net/forum/showthread.php?t=280285

Zitat
(Es wird übrigens nicht nach einem Kombifeld gefiltert, sondern der Spalteninhalt (Domäne) einer Tabelle/Abfrage wird gefiltert.)
das ist ja genau das wo nach ich suche

Zitat
"eine eigene Sortieren Funktion bauen"



Sub btnSortSpalte1Down_Click()
Me.OrderBy="[Spalte1] desc"
Me.OrderByOn =true
End Sub

meine Funktion sieht bisher so aus:

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
           Screen.ActiveForm.OrderBy = cs & "  " & typ
           Screen.ActiveForm.OrderByOn = True
       endif
   elseIf Screen.ActiveControl.ControlType = acComboBox Then
           Screen.ActiveForm.OrderBy = ??? & "  " & typ
           Screen.ActiveForm.OrderByOn = True
   End If
End Function

Ich weiß halt jetzt nicht was bei den ??? rein muss

DF6GL

Hallo,


von wo aus wird die Funktion aufgerufen?


versuch mal:

Screen.ActiveForm.OrderBy =  Screen.ActiveControl.Name & " "  & typ

frapu

Zitat von: DF6GL am August 12, 2011, 09:13:00
Hallo,


von wo aus wird die Funktion aufgerufen?
über die Symbolleiste bzw. Ribbon

Zitat
versuch mal:

Screen.ActiveForm.OrderBy =  Screen.ActiveControl.Name & " "  & typ

das funktioniert nicht, da ich damit nur den Namen des Controls bekomme. Ich muss bei den Kombinationsfeldern aber einen Konstrukt bekommen, der mit "lookup_" beginnt. Mein Problem ist halt wie ich das am besten auslesen bzw. zusammen setzen kann.

DF6GL

Hallo,

ich verstehe Dich nicht.

Das "lookup_"  ist ein von Access intern erzeugtes Objekt.  Das brauchst Du doch gar nicht.   Oder ist dem entspr. Tabellenfeld, an das das Kombi gebunden ist, ein Nachschlagefeld zugeordnet?

Ich denke mal, dass Du die TABELLENSpalte, bzw. die Form-Recordset-Spalte, an die das Kombi gebunden ist, sortieren willst.


Also muss dieser Spalten-Name herangezogen werden.  Wenn das Kombi anders heißt, dann lese dessen Steuerelementinhalt aus und nimm diesen Namen als Sortierfeld.


Versuch mal:


Screen.ActiveForm.OrderBy =  Screen.ActiveControl.Controlsource & " "  & typ



Wenn Du unbedingt  Dlookup_ davorstellen willst, dann halt so:


Screen.ActiveForm.OrderBy =  "Dlookup_" & Screen.ActiveControl.Name & " "  & typ


frapu

#22
Zitat von: DF6GL am August 12, 2011, 10:55:57
Hallo,

ich verstehe Dich nicht.

das Gefühl hab ich auch ;-)

Zitat
Das "lookup_"  ist ein von Access intern erzeugtes Objekt.  Das brauchst Du doch gar nicht.   Oder ist dem entspr. Tabellenfeld, an das das Kombi gebunden ist, ein Nachschlagefeld zugeordnet?

Ich denke mal, dass Du die TABELLENSpalte, bzw. die Form-Recordset-Spalte, an die das Kombi gebunden ist, sortieren willst.

nein danach soll nicht sortiert werden, da Access eigene Sortierung auch nicht danach sortiert.

Zitat

Also muss dieser Spalten-Name herangezogen werden.  Wenn das Kombi anders heißt, dann lese dessen Steuerelementinhalt aus und nimm diesen Namen als Sortierfeld.


Versuch mal:


Screen.ActiveForm.OrderBy =  Screen.ActiveControl.Controlsource & " "  & typ



Wenn Du unbedingt  Dlookup_ davorstellen willst, dann halt so:


Screen.ActiveForm.OrderBy =  "Dlookup_" & Screen.ActiveControl.Name & " "  & typ



ich hab hier noch mal die BSP-MDB angehangen um noch mal zu verdeutlichen was ich will. In der SBL hab ich meine Sortieren-Funktion und darunter die Access eigene.  Wenn man beide vergleicht versteht man was ich meine

[Anhang gelöscht durch Administrator]

database

Hallo,

Zitatnein, ich möchte nicht den Filtern entfernen
Durch meinen Vorschlag wird KEIN Filre entfern sondern die Sortierung gelöscht.
Aber egal ... und der Rest war eine Erklärung, warum ich ...

mit ...

MsgBox Me.OrderBy

... hast du ja schon selbst erfolgreich herausgefunden welche Sortierung aktuell angewendet wird.
Nun wird es ja nicht so schwierig sein, festzustellen welches Steuerelement gemeint ist und im Fall eines Kombifeldes welche SPALTE der Datenherkunft angesprochen wird bzw. werden soll.

Schau doch in deinem eigenen Beispiel mal genau hin!

Setzen der Sortierung mit:
Bei Kombis...
Me.OrderBy= "[Lookup_DeinKombifeld].[NameDerAngezeigtenSpalte]" und wenn du Absteigend sortieren willst noch DESC dranhängen.

und bei 'normalen' Textfeldern 

Me.OrderBy= "[NameDesFormulars].[NameDesSteuerelements]

Wie der Name eines aktiven Steuerelments zu ermitteln ist hat Franz in einer seiner vorangegangenen Antworten bereits erklärt.

Dann empfehle ich noch hier mal nachzulesen ...

http://www.donkarl.com?FAQ4.7


HTH

frapu

Zitat von: database am August 12, 2011, 11:46:00

Setzen der Sortierung mit:
Bei Kombis...
Me.OrderBy= "[Lookup_DeinKombifeld].[NameDerAngezeigtenSpalte]" und wenn du Absteigend sortieren willst noch DESC dranhängen.


genau das suche ich, allerdings hab ich bis jetzt noch nicht herausbekommen wie ich [NameDerAngezeigtenSpalte] ermitteln kann

DF6GL

#25
Hallo,

jetzt hab ich es verstanden   8)


Es sollen die DS nach der Anzeige der gebundenen Spalte eines Kombifeldes (Attribut-Spalte in einer verknüpften 1-Tabelle)  sortiert werden...
(wenn in das Kombifeld und anschliessend auf eine Schaltfläche geklickt wird)

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

bzw. bei aufsteigend:

Me.OrderBy = "Lookup_" & Screen.PreviousControl.Name & ".name "


frapu

Zitat von: DF6GL am August 12, 2011, 12:34:24
Hallo,

jetzt hab ich es verstanden   8)


Es sollen die DS nach der Anzeige der gebundenen Spalte eines Kombifeldes (Attribut-Spalte in einer verknüpften 1-Tabelle)  sortiert werden...
(wenn in das Kombifeld und anschliessend auf eine Schaltfläche geklickt wird)

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

bzw. bei aufsteigend:

Me.OrderBy = "Lookup_" & Screen.PreviousControl.Name & ".name "



genau, allerdings muss ich bei deiner Lösung den Namen der angezeigten, gebundenen Spalte wissen. Da ich aber eine allgemeingülte Lösung suche, fehlt mir noch wie ich diesen Namen der Spalte per VBA ermitteln kann (oben fett markiert)


frapu

Zitat von: DF6GL am August 12, 2011, 12:48:00
Hallo,

nein, den mußt Du nicht wissen, der stammt  eben von "lookup_"
das versteh ich nicht

dieser ".Name" aus deinem Vorschlag ist doch der Name der angezeigten, gebundenen Spalte.

wenn die Spalte z.b. "Personalname" heißt, müsste das sortieren ja so lauten:

Me.OrderBy = "Lookup_" & Screen.ActiveControl.Name & ".Personalname desc"

Diesen Name muss ich ja erst ermitteln?

DF6GL

Hallo,

nein...

Selbst wenn Du den Namen der gebundenen Spalte ermittelst, nützt der an dieser Stelle nichts. Diese Spalte (Feld) kommt ja im Form-Recordset nicht vor.


probier es doch einfach mal...  ::)