IT Fjernundervisning

Sortering af data

Beskrivelse

Sortering af data

Afhængigt af hvilken recordset type man arbejder med kan man få sorteres sine data:

Table

Her skal man bruge index metoden - et lille eksempel hentet fra hjælpefilen:

Sub IndexPropertyX()      Dim dbsNorthwind As Database     Dim tdfEmployees As TableDef     Dim rstEmployees As Recordset     Dim idxLoop As Index      Set dbsNorthwind = OpenDatabase("Northwind.mdb")     Set rstEmployees = dbsNorthwind.OpenRecordset("Employees")     Set tdfEmployees = dbsNorthwind.TableDefs!Employees      With rstEmployees          ' Enumerate Indexes collection of Employees table.         For Each idxLoop In tdfEmployees.Indexes             .Index = idxLoop.Name             Debug.Print "Index = " & .Index             Debug.Print "  EmployeeID - PostalCode - Name"             .MoveFirst              ' Enumerate Recordset to show the order of records.             Do While Not .EOF                 Debug.Print "    " & !EmployeeID & " - " & _                     !PostalCode & " - " & !FirstName & " " & _                     !LastName                 .MoveNext             Loop          Next idxLoop          .Close     End With      dbsNorthwind.Close  End Sub

Dynaset

Her kan man bruge Sort metoden på recordsettet. Et lille eksempel jeg har bikset sammen:

Public Sub Gennemloeb()
    Dim db As Database
    Dim rs, rs2 As Recordset
    Dim intAntal As Integer
    Set db = CurrentDb()
    Set rs = db.OpenRecordset("Kunder", dbOpenDynaset)
    rs.Sort = "KøbIalt"
    rs.MoveFirst
    Set rs2 = rs.OpenRecordset
   
    Do While Not rs2.EOF
        Debug.Print rs2("Kundenr") & " " & rs2("Firma") & " " & rs2("KøbIalt")
        rs2.MoveNext
    Loop
    rs.Close
    rs2.Close
End Sub

Og her er forklaringen på at der skal bruges 2 recordsets:

"When you set this property for an object, sorting occurs when a subsequent Recordset object is created from that object."

SQL

Endelig kan man når man henter informationerne ind via et SQL kald med det samme sørge for at de er sorterede:

strSQL = "SELECT * FROM Kunder WHERE KøbIalt >= 100000 ORDER BY KøbIalt"

Hvis du vil lære mere om SQL kan jeg anbefale et kursus :-)

 - eller at du kigger på www.w3schools.com

 


Øvelse

Opret en kopi af en af de tidligere databaser og kald den "Sortering.mdb".

Lav en procedure der tester de to metoder ovenfor.

 


Pak databasen sammen eller omdøb den og send den til mig.


Løsning

Hent mit forslag til løsningen her

Koden ser sådan her ud:

Sub IndexMetoden()     Dim db As Database     Dim rs As Recordset     Dim tblDef As TableDef     Dim idx As Index     Set db = CurrentDb     Set rs = db.OpenRecordset("Kunder")     Set tblDef = db.TableDefs!Kunder          For Each idx In tblDef.Indexes         rs.Index = idx.Name         Debug.Print "Index = " & rs.Index                  rs.MoveFirst         Do While Not rs.EOF             Debug.Print rs("Firma") & " " & rs("PostNr")             rs.MoveNext         Loop     Next     rs.Close     db.Close End Sub
Sub Gennemloeb()     Dim db As Database     Dim rs, rs2 As Recordset     Dim intAntal As Integer     Set db = CurrentDb()     Set rs = db.OpenRecordset("Kunder", dbOpenDynaset)     rs.Sort = "KøbIalt"     rs.MoveFirst     Set rs2 = rs.OpenRecordset     Do While Not rs2.EOF         Debug.Print rs2("Kundenr") & " " & rs2("Firma") & " " & rs2("KøbIalt")         rs2.MoveNext     Loop     rs.Close     rs2.Close     db.Close End Sub
Sub SqlEksempel()     Dim db As Database     Dim rs As Recordset     Dim strSql As String     strSql = "SELECT * FROM Kunder WHERE KøbIalt >= 100000 ORDER BY KøbIalt"     Set db = CurrentDb     Set rs = db.OpenRecordset(strSql)     Do While Not rs.EOF         Debug.Print rs("Kundenr") & " " & rs("Firma") & " " & rs("KøbIalt")         rs.MoveNext     Loop     rs.Close     db.Close End Sub

Brug for hjælp til VBA, VSTO eller SQL?

Scient Data tilbyder professionel IT-konsulentbistand

Kontakt Scient Data →