Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: linuxluder am Oktober 25, 2013, 10:27:38

Titel: Sortierung mit Zähler
Beitrag von: linuxluder am Oktober 25, 2013, 10:27:38
Hi,

ich habe in einem Endlosformular die 12 Monate. Beim Klick auf den jeweiligen Monat soll erst absteigend, beim nächsten Klick aufsteigend usw. sortiert werden.

Meine VBA hierfür lautet

Private Sub okt_Bezeichnungsfeld_Click()
   Dim strsql As String
   Dim a As Integer
   a = 1
   If a Mod 2 = 0 Then
   strsql = "SELECT lehrer.* FROM lehrer ORDER BY lehrer.okt ASC;"
   Else
   strsql = "SELECT lehrer.* FROM lehrer ORDER BY lehrer.okt DESC; "
   End If
   Me.RecordSource = strsql
End Sub


Leider wird die Variable a immer wieder auf 1 gesetzt. Mann könnte sie vermutlich in eine Hilfstabelle schreiben/lesen.

Wie löse ich das Problem am besten?

Vielen Dank
Jo

P.S.: Meine VBA-Kenntnisse sind realtiv gering!
Titel: Re: Sortierung mit Zähler
Beitrag von: bahasu am Oktober 25, 2013, 12:21:42
Hi,

der Teil
  Dim a As Integer  
  a = 1
stört hier.


1. im Modul deklarieren:
 Public a as integer        ' byte oder boolean wären auch verwendbar

2. Im Formular beim Ereignis "beim Öffnen" die Zeile hinzufügen:
  a = 1

Harald
Titel: Re: Sortierung mit Zähler
Beitrag von: linuxluder am Oktober 25, 2013, 15:16:53
Herzlichen DANK!!! Klappt perfekt!
Titel: Re: Sortierung mit Zähler
Beitrag von: linuxluder am Oktober 25, 2013, 16:22:04
Ich habe doch noch ein Problem

Da ich nach den Werten in den Monaten Sep - Aug sortieren will, sieht mein Modul so aus:

Option Compare Database

Public a As Integer
Public b As Integer
Public c As Integer
Public d As Integer
Public e As Integer
Public f As Integer
Public g As Integer
Public h As Integer
Public i As Integer
Public j As Integer
Public k As Integer
Public l As Integer


Beim Formular habe ich unter "Bei Laden"  folgendes eingetragen
a=1;b=1;c=1;d=1;e=1;f=1;g=1;h=1;i=1;j=1;k=1;l=1
Ich bekomme jetzt immer den Fehler .... (siehe Anlage)
Titel: Re: Sortierung mit Zähler
Beitrag von: DF6GL am Oktober 25, 2013, 16:32:51
Hallo,


""Bei Laden"  ???


Was verfolgst Du damit?
Titel: Re: Sortierung mit Zähler
Beitrag von: linuxluder am Oktober 25, 2013, 16:46:01
Habe mich vertan: steht natürlich bei "Beim Öffnen".

Geht aber trotztdem nicht?!
Titel: Re: Sortierung mit Zähler
Beitrag von: bahasu am Oktober 25, 2013, 16:56:18
Hi

Zitat von: linuxluder am Oktober 25, 2013, 16:22:04
a=1;b=1;c=1;d=1;e=1;f=1;g=1;h=1;i=1;j=1;k=1;l=1

kann es sein, dass Du von der Pascal-Programmierung kommst?

Auch wenn mir der Sinn noch nicht klar, sollte die obige Zeile aufgeteilt werden:
a=1
b=1
c=1
d=1
e=1
f=1
g=1
h=1
i=1
j=1
k=1
l=1


Du solltest die Fragen von Franz beantworten:
Was ist Dein Ziel?
Danach kann man den Weg versuchen zu gehen.

Harald
Titel: Re: Sortierung mit Zähler
Beitrag von: DF6GL am Oktober 25, 2013, 17:12:40
Hallo,


ich denke mal, der "Code" steht direkt in der Zeile der "Beim Laden"- oder "Beim Öffnen"-Eigenschaft  anstelle in der entspr. Ereignisprozedur....


Es sollte halt so aussehen:
In der Eigenschaften-Zeile des" Beim-Laden"-Ereignissses:

[Ereignisprozedur]

und der dazugehörenden Prozedur-Code:


Private Sub Form_Load()
a=1
b=1
c=1
d=1
e=1
f=1
g=1
h=1
i=1
j=1
k=1
l=1
End Sub



Zur Ausgangsfrage:

Zitatich habe in einem Endlosformular die 12 Monate. Beim Klick auf den jeweiligen Monat soll erst absteigend, beim nächsten Klick aufsteigend usw. sortiert werden.


Was hat die Sortierung mit dem "jeweiligen" Monat zu tun?  Entweder wird die Datensätze aufsteigend oder absteigend bezgl. der Monatszahl (oder halt des Monatsnamens, dann aber alphanumerische Sortierung)  sortiert....


Soll beim Klick auf das (beim Endlosform auf irgendein) Monatsfeld ("MeinMonatsfeld")  abwechselnd sortiert werden, dann könnte das so realisiert werden:

Sub MeinMonatsfeld_Click()
If Me.Orderby = "MeinMonatsfeld Desc" Then
Me.Orderby = "MeinMonatsfeld Asc"
Else
Me.Orderby = "MeinMonatsfeld Desc"
End If
Me.OrderbyOn =true
End Sub
Titel: Re: Sortierung mit Zähler
Beitrag von: linuxluder am Oktober 25, 2013, 18:47:13
Hi, vielen Dank für eure Antworten. Der Fehler lag daran, dass ich die Variablen zum Laden beim Öffnen des Formulars nicht in das Modul kopierte. Jetzt klappt.
Wie ich jetzt gerade hier sehe, hätte ich mir das mit den 12 Variablen sparen können.

Aber bitte gestattet mir in diesem Zusammenhang noch eine Frage.

Ich lasse mir jeweis die Summe von drei Monaten in ein "neues" Formular-Feld schreiben.
Im Steuerelementinhalt schreibe ich =[sep]+[okt]+[nov]
Wie kann ich nun am einfachsten nach den Werten dieses Feldes sortieren?
Titel: Re: Sortierung mit Zähler
Beitrag von: DF6GL am Oktober 25, 2013, 18:59:00
Hallo,

irgendwie versteh ich nicht, was du vorhast...


Wenn Du im Form 4 Felder (entsprechend der Jahresquartale) hast und in denen jeweils die Summen aus den entspr. Monats(-beträgen) stehen,  was soll denn da sortiert werden?

Titel: Re: Sortierung mit Zähler
Beitrag von: linuxluder am Oktober 25, 2013, 19:05:21
Vielen Dank für deine Geduld.
Bei angehängtem Bild siehst du die drei Monate, Sep-Nov. Aus deren Werte errechnet sich das gelb markierte Feld.
Nun möchte ich, außer der Sortierung nach den Monaten, die ja nun klappt, auch nach diesem Feld auf- oder absteigend sortieren.
Titel: Re: Sortierung mit Zähler
Beitrag von: DF6GL am Oktober 25, 2013, 19:12:53
Hallo,

berechne die Quartalssummen in einer berechneten Abfrage (für das Formular) und sortiere nach diesen Feldern
Titel: Re: Sortierung mit Zähler
Beitrag von: linuxluder am Oktober 25, 2013, 19:15:39
Würde es mit VBA in dem gleichen Stil wie die Sortierung nach Monaten auch gehen. Wie ich das Formular mit eine Abfrage kombinieren soll, weiß ich leider nicht.
Titel: Re: Sortierung mit Zähler
Beitrag von: DF6GL am Oktober 25, 2013, 19:31:34
Hallo,

probier mal:

Sub MeinMonatsfeld_Click()
If Me.Orderby = "[sep]+[okt]+[nov] Desc" Then
Me.Orderby = "[sep]+[okt]+[nov] Asc"
Else
Me.Orderby = "[sep]+[okt]+[nov] Desc"
End If
Me.OrderbyOn =true
End Sub
Titel: Re: Sortierung mit Zähler
Beitrag von: linuxluder am Oktober 25, 2013, 19:40:51
geht leider nicht
Titel: Re: Sortierung mit Zähler
Beitrag von: linuxluder am Oktober 25, 2013, 19:42:39
Wenn ich das berechnete Feld in eine Tabelle schreibe, wäre es dann besser?
Titel: Re: Sortierung mit Zähler
Beitrag von: DF6GL am Oktober 25, 2013, 22:03:00
Hallo,

WAS geht nicht?


Gibt es die Felder in der Tabelle?


Wird der Code abgearbeitet?

Ist der Order-String EXACT in der If-Bedingung angegeben?


Änder den Code in dieses:

Sub MeinMonatsfeld_Click()
If Instr(Me.Orderby,"Desc")  Then
Me.Orderby = "[sep]+[okt]+[nov] Asc"
Else
Me.Orderby = "[sep]+[okt]+[nov] Desc"
End If
Me.OrderbyOn =true
End Sub
Titel: Re: Sortierung mit Zähler
Beitrag von: linuxluder am Oktober 26, 2013, 07:24:47
Hallo Franz,

danke für deine nochmalige Antwort.
Also, dein zuletzt geposteter Code klappt, allerdings erfolgt die Sortierung nur absteigend. Bei einem nochmaligen Klick bleibt die Sortierung erhalten.
Sag mir bitte einfach nur, ob du mir noch einen Vorschlage schicken willst. Sonst mache ich es einfach wieder mit "modulo". Allerdings müsste ich dazu das berechnete Feld erst in eine Tabelle schreiben, oder?

Schöne Größe von der Donau an den Bodensee
Jo
Titel: Re: Sortierung mit Zähler
Beitrag von: DF6GL am Oktober 26, 2013, 09:23:33
Hallo,

wir sollten die Ursache für das Fehlverhalten suchen und eliminieren, nicht auf andere fragwürdige Lösungswege ausweichen.


Setz mal einen Haltepunkt an den Code-Anfang und durchlaufe ihn mit Einzelschritt..  Dabei prüfst Du den jeweils den Inhalt der Orderby-Eigenschaft und auch die "Instr" -Funktion.


Titel: Re: Sortierung mit Zähler
Beitrag von: linuxluder am Oktober 26, 2013, 09:58:41
Vielen Dank, aber da fehlen mir, wie bereits erwähnt, die VBA Grundlagen. Wenn ich am Anfang des Codes "Private Sub ..." einen Haltepunkt setze und dann kommt mit der Taste F8 (Einzelschritt) nur ein "Pling" aus dem Lautsprecher. Ist mir jetzt echt peinlich, das so zu schreiben :'(
Titel: Re: Sortierung mit Zähler
Beitrag von: DF6GL am Oktober 26, 2013, 11:54:44
Hallo,

erst muss mal die Prozedur durch den normalen Ablauf aufgerufen werden, sprich durch Klick auf das Feld....
Titel: Re: Sortierung mit Zähler
Beitrag von: linuxluder am Oktober 26, 2013, 12:11:33
So, jetzt:
Ich klicke auf das entsprechende Feld, und dann immer auf F8
Die Sortierung ist sofort absteigend.

Private Sub Bezeichnungsfeld112_Click()
If InStr(Me.OrderBy, "Desc") Then                           -> InStr (Me.OrderBy, "Desc")=0       ;    Me.OrderBy = "[sep]+[okt]+[nov] Asc"
Me.OrderBy = "[sep]+[okt]+[nov] Asc"                    -> wird nicht angesprungen     
Else                                                                          -> Sprung in dies Zeile
Me.OrderBy = "[sep]+[okt]+[nov] Desc"                  -> wird ausgeführt
End If
Me.OrderB



Bin ich mit F8 in der letzten Zeile, so werden alle Felder, in den die zu sortierenden Werte enthalten sind, mit #Fehler gefüllt.
Das geschieht bei der Ausführung ohne Einzelschritte nicht.
Titel: Re: Sortierung mit Zähler
Beitrag von: DF6GL am Oktober 26, 2013, 12:40:12
Hallo,


welche Acc-Version benutzt Du?

Kannst Du die Db (datenreduziert und komprimiert/repariert und gezippt)  hier hochladen?


Ich habe dieses Prinzip an einer Acc2013 32Bit (und 64-Bit) Version   unter Win7  erfolgreich getestet...


Es muss natürlich solange F8 gedrückt werden, bis die Prozedur vollständig durchlaufen ist  (und der Haltepunkt auch wieder entfernt werden) .

Titel: Re: Sortierung mit Zähler
Beitrag von: linuxluder am Oktober 26, 2013, 13:19:18
Danke im Voraus.
Titel: Re: Sortierung mit Zähler
Beitrag von: DF6GL am Oktober 26, 2013, 13:44:19
Hallo,


es fehlen
Option Compare Database
Option Explicit

in den Modul-Köpfen.



Zudem ist runcommand acSaveRecord überflüssig, solange man aus dem Form heraus keinen Bericht aufruft, der die aktuellen Formular-Daten anzeigen soll.


Option Compare Database
Option Explicit
 
Private Sub Bezeichnungsfeld112_Click()
If InStr(Me.OrderBy, "Desc") Then
Me.OrderBy = "[sep]+[okt]+[nov] Asc"
Else
Me.OrderBy = "[sep]+[okt]+[nov] Desc"
End If
Me.OrderByOn = True
End Sub
 
Private Sub Befehl77_Click()
DoCmd.RunCommand acCmdSaveRecord

   DoCmd.OpenReport "dozenten", acViewNormal, , _
                    "[lid]=" & Me!lid
End Sub
 
Private Sub Befehl153_Click()
Me!sep = Nz(Me!sep, 0) - 1

End Sub
 
Private Sub Befehl154_Click()
Me!sep = Nz(Me!sep, 0) + 1

End Sub
Titel: Re: Sortierung mit Zähler
Beitrag von: linuxluder am Oktober 26, 2013, 14:13:07
Herzlichen Dank!!!
Würde es dir viel ausmachen, mir die DB hier zurück ins Netz zu stellen?
Titel: Re: Sortierung mit Zähler
Beitrag von: DF6GL am Oktober 26, 2013, 14:19:19
..
Titel: Re: Sortierung mit Zähler
Beitrag von: linuxluder am Oktober 26, 2013, 14:34:28
VIELEN LIEBEN DANK!!!
Ich denk an dich, wenn ich das nächste mal nach Zürich fahre!
Titel: Re: Sortierung mit Zähler
Beitrag von: linuxluder am Oktober 02, 2014, 08:58:10
Hallo,

es ist zwar schon lange her, aber ich habe nochmal eine Frage, die jetzt erst aufgetaucht ist. Beim Klick auf ein Feld wird ASC sortiert, nochmaliges Klicken für zur DESC-Sortierung. Warum bekomme ich aber negative Werte nie zuerst angezeigt?

Danke
Jo
Titel: Re: Sortierung mit Zähler
Beitrag von: MaggieMay am Oktober 02, 2014, 11:20:16
Hallo,

in der Beispiel-DB funktioniert das aber, wie hast du es denn umgesetzt?
Titel: Re: Sortierung mit Zähler
Beitrag von: linuxluder am Oktober 02, 2014, 14:12:49
Hi,

ich habe es so umgesetzt:

Private Sub okt_Bezeichnungsfeld_Click()
   Dim strsql As String
   c = c + 1
   If c Mod 2 = 0 Then
   strsql = "SELECT menge.* FROM menge ORDER BY menge.okt ASC;"
   Else
   strsql = "SELECT menge.* FROM menge ORDER BY menge.okt DESC; "
   End If
   Me.RecordSource = strsql
End Sub



EDIT

Danke, ich habs. Es lag daran, dass ich statt 0 einfach nichts in den Feldern hatte und somit klappte die Sortierung nicht ordentliche, das erst die leeren Felder gelistet wurden.