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 →