Supportnet / Forum / Datenbanken
Problem mit statischer Variable
Frage
Hallo zusammen,
Ich habe ein Formular erstellt welches
tabellarisch gängige Informationen
über Mitarbeiter (Lohn+Gehalt) darstellt.
Über den einzelnen Tabellenspalten (Name, PrNr.) ist jeweils ein zugehöriger Button definiert um die
Tabelle entsprechend zu sortieren. Ich möchte beim einmaligen klicken aufsteigend sortieren und beim zweiten- mal ABSTEIGEND sortieren.
Dieser Status
mittels Wahr für AUF und Falsch für ABsteigend istin der Boolean Variable
"flag" gespeichert.
Aber jedesmal, wenn die Ereignisprozedur aufgerufen wird
ist "flag" stets mit Falsch initialisiert obwohl "flag" statisch ist, und so sich doch seinen Status merken müsste!
Sub SortierenNach(feld As String)
Dim SortBegriff As String
Static flag As Boolean
SortBegriff = "[Mitarbeiter_BeAbzüge]![" & feld & "]"
If flag = True Then
' Aufsteigend sortieren
SortBegriff = SortBegriff & " ASC"
flag = False
Else
' Absteigend sortieren
SortBegriff = SortBegriff & " DESC"
flag = True
End If
Me.OrderByOn = True
Me.OrderBy = SortBegriff ' Formular sortieren
End
End Sub
Für eure Hilfe wäre ich sehr sehr dankbar!
MfG, Sebastian
Antwort 1 von Phantom_Fies
Die Static-Anweisung kannst du in dem Zusammenhang getrost vergessen. Sie wird nur verwendet, um prozedurübergreifend einen Wert zu sichern. Da sich bei dir aber alles in einer Sub abspielt, kannst du dir die Anweisung schenken. Außerdem, wie soll eine Variable einen Wert behalten, wenn du ihn doch ständig selber änderst?
Warum machst du's dir nicht einfach und baust einfach zwei Buttons ein, einen für aufsteigend und einen für absteigend Sortieren? Dann kann der Benutzer auch wechseln, wie er lustig ist.
Warum machst du's dir nicht einfach und baust einfach zwei Buttons ein, einen für aufsteigend und einen für absteigend Sortieren? Dann kann der Benutzer auch wechseln, wie er lustig ist.
Antwort 2 von Nanuk
Hi Sebastian,
woher weißt Du, dass Dein flag immer auf False gesetzt ist?? Lässt Du es irgendwo ausgeben oder funktioniert einfach nur die Sortierung nicht???
Im zweiten Fall stellt sich die Frage, wo Du Deiner Funktion den Wert für die Variable "feld" übergibst?
Im ersten Fall wüsste ich nicht weiter, ich habe Dein Beispiel mal vereinfacht aufgenommen und dabei festgestellt, dass es ohne Schwierigkeiten funktioniert.
Das einzige, was mir dazu noch einfällt, ist die Frage, bei welcher Aktion die Funktion aufgerufen wird.
Gruß
Nanuk
woher weißt Du, dass Dein flag immer auf False gesetzt ist?? Lässt Du es irgendwo ausgeben oder funktioniert einfach nur die Sortierung nicht???
Im zweiten Fall stellt sich die Frage, wo Du Deiner Funktion den Wert für die Variable "feld" übergibst?
Im ersten Fall wüsste ich nicht weiter, ich habe Dein Beispiel mal vereinfacht aufgenommen und dabei festgestellt, dass es ohne Schwierigkeiten funktioniert.
Das einzige, was mir dazu noch einfällt, ist die Frage, bei welcher Aktion die Funktion aufgerufen wird.
Gruß
Nanuk
Antwort 3 von SebastianE
Hallo Nanuk!
Die Prozedur Sortierennach ist direkt
an das Formular (Mitarbeiter_BeAbzüge) gekoppelt.
Wenn ich
im Formular (Entwurfsansicht) einen
Rechtsklick (Eigenschaften) auf den Button mache (z.B. "Name") ist "Sortierennach" an das Ereignis
"Beim Klicken" gekoppelt
=Sortierennach("EPNAME")
EPNAME ist das Argument welches
in der Prozedur als Variable
"feld" übergeben wird.
Es muss doch irgendwie möglich sein
auch ohne lästigen "Button_Click_Name Code" dieses Feature (einmal klicken Aufsteigend, zweimal klicken Absteigend sortieren) zu realisieren!
PS: Es ist wirklich genial wie schnell
man hier Hilfe bekommt. Ihr seit Spitze!
:-)
Die Prozedur Sortierennach ist direkt
an das Formular (Mitarbeiter_BeAbzüge) gekoppelt.
Wenn ich
im Formular (Entwurfsansicht) einen
Rechtsklick (Eigenschaften) auf den Button mache (z.B. "Name") ist "Sortierennach" an das Ereignis
"Beim Klicken" gekoppelt
=Sortierennach("EPNAME")
EPNAME ist das Argument welches
in der Prozedur als Variable
"feld" übergeben wird.
Es muss doch irgendwie möglich sein
auch ohne lästigen "Button_Click_Name Code" dieses Feature (einmal klicken Aufsteigend, zweimal klicken Absteigend sortieren) zu realisieren!
PS: Es ist wirklich genial wie schnell
man hier Hilfe bekommt. Ihr seit Spitze!
:-)
Antwort 4 von JohnnyLoser
Hi Sebastian,
hier zwei Möglichkeiten:
1. Entferne "Static flag As Boolean". Erstelle ein Modul und füge im Deklarationsbereich die Zeile
Public flag As Boolean
ein.
2. Vergiß "flag" ganz und ersetze die Zeile
If flag = True Then
durch
If Right(Me.OrderBy, 3) = "ASC" Then
...
Else
...
End If
Gruß
Johnny
hier zwei Möglichkeiten:
1. Entferne "Static flag As Boolean". Erstelle ein Modul und füge im Deklarationsbereich die Zeile
Public flag As Boolean
ein.
2. Vergiß "flag" ganz und ersetze die Zeile
If flag = True Then
durch
If Right(Me.OrderBy, 3) = "ASC" Then
...
Else
...
End If
Gruß
Johnny

