Mehrere Datenfelder in Bericht hintereinander sortieren

  • VB6

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Gast.

    Mehrere Datenfelder in Bericht hintereinander sortieren

    Hallo @all,
    ich möchte in einem Bericht mehrere Datenfelder nacheinander sortieren.
    Also z.B. erst nach Land, dann nach Stadt, dann nach Name.
    Mit der Funktion OrderByOn für den Bericht kann ich aber nur entweder nach Land, oder Stadt oder Name sortieren.

    Ich habe ein Formular mit einem Feld (SortAW), worin ich das Datenfeld eingeben kann. Beim Öffnen des Berichtes folgende Programmierung:

    If Forms!Formular!AufAb = 1 Then
    Me.OrderBy = Forms!Formular!SortAW
    Else
    Me.OrderBy = Forms!Formular!SortAW & " DESC"
    End If


    Ich habe es auch mit einem SQL-String versucht:

    SQLString = "Select * from Abfrage Order By ([Forms]![Formular]![SortAW1],[Forms]![Formular]![SortAW2])"

    aber es wird trotzdem nur nach dem ersten Wert sortiert.

    Gibt es eine Mögichkeit, dass ich In dem Formular mehrere Felder habe und dann in der Programmierung eine Reihenfolge (Wertigkeit), nach der sortiert werden soll angebe? Bin für Tipps wirklich dankbar!
    Grüße von Anikke

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „“ ()

    Hallo Horst,
    danke für Deine Antwort, es handelt sich um einen Access-Bericht. Mit einer Grupppierung ist mir leider nicht geholfen, ich möchte die Sortierung über ein Formular steuern und nicht jedes mal in die Entwurfsansicht des Berichtes wechseln. Mit einem Datenfeld geht das auch, aber eben nicht mit mehreren nacheinander. Ich dachte, man könnte das über einen SQL-String in VSB regeln, aber das funktioniert nicht.
    Gibt es für mein Problem überhaupt eine Lösung???
    Es gibt eine Lösung für dein Problem!
    Sie ist zwar nicht sonderlich performant aber es funktioniert!
    1. Tabelle tblTemp erstellen:
    Am besten die Ausgangstabelle ohne Daten
    (nur Struktur) kopieren.
    Das erste Feld mit einer Autowert ID belegen und den
    Schlüssel darauf setzen.
    2. Formular stricken:
    In meinem Beispiel-Modul belegt mit 3 Steuerelementen:
    Kombinationsfeld1 + 2, Datenherkunft Wertliste, Inhalt
    sind die Spaltenüberschriften deiner tblTemp
    Button mit folgendem code im Klick-Ereignis:
    Private Sub Befehl0_Click()
    Call tblTempFüllen.tblTempFüllen
    DoCmd.OpenReport "tblTemp", acViewPreview
    End Sub

    3. Folgenden Quelltext in ein Modul einfügen:
    Sub tblTempFüllen()
    Dim dbs As Database, rstAllgemein As Recordset, rstTemp As Recordset
    Dim strSQL As String, SEL As String, FROM As String, ORD As String
    Dim fld As Field

    Dim i As Integer, j As Integer
    ' Verweis auf aktuelle Datenbank holen.
    Set dbs = CurrentDb
    SEL = "SELECT *"
    FROM = "FROM tblAllgemein "
    ' Sortierkriterien festlegen
    Form_Formular1.Kombinationsfeld1.SetFocus
    If Form_Formular1.Kombinationsfeld1.Text <> "" Then
    ORD = "Order BY tblAllgemein." & Form_Formular1.Kombinationsfeld1.Text
    End If

    Form_Formular1.Kombinationsfeld2.SetFocus
    If Form_Formular1.Kombinationsfeld2.Text <> "" Then
    ORD = ORD & ", tblAllgemein." & Form_Formular1.Kombinationsfeld2.Text
    End If
    ORD = ORD & " ;"


    strSQL = SEL & FROM & ORD
    Set rstAllgemein = dbs.OpenRecordset(strSQL, dbOpenDynaset)
    rstAllgemein.MoveLast
    With rstAllgemein
    .MoveFirst
    For i = 1 To .RecordCount
    Debug.Print !Nachname, !Vorname
    .MoveNext
    Next
    End With


    Set rstTemp = dbs.OpenRecordset("tblTemp", dbOpenDynaset)
    If rstTemp.RecordCount <> 0 Then rstTemp.MoveLast
    'leeren tblTemp
    If rstTemp.RecordCount <> 0 Then
    With rstTemp
    .MoveFirst
    For i = 1 To rstTemp.RecordCount
    .Delete
    .MoveNext
    Next
    End With
    End If

    'füllen tbltemp

    rstAllgemein.MoveFirst
    For i = 1 To rstAllgemein.RecordCount

    rstTemp.AddNew
    j = 1
    For Each fld In rstAllgemein.Fields

    rstTemp.Fields(j).Value = fld.Value
    j = j + 1
    Next

    rstTemp.Update

    rstAllgemein.MoveNext
    Next

    rstAllgemein.Close
    rstTemp.Close
    Set dbs = Nothing
    End Sub

    Das Modul nennst du tblTempFüllen
    jetzt tblAllgemein durch deinen Tabellennamen ersetzen.
    4. Den Bericht auf tblTemp Verweisen

    Dann sollte das Ganze funktionieren

    Bitte um Rückmeldung ob es das war, das du gesucht hast!

    Gruß Horst