手機邊親愛的你還好嗎?
大家開工了嗎,這個超長假期過的怎麼樣?
我們在開發中應該都會遇到各種各樣的排序問題,今天給大家分享數值的排序(成績的排序)。
我們先來講一下需求,現有一組數值,需要得到按從大到小的順序得到數值的順序,如果數值相同則得到相同的順序。
我們還是老規矩,一步步的來操作。
01
一、建表
首先,如圖需要先建一張表
接下去輸入一些數據
02
二、建窗體
這次窗體有些複雜,窗體的默認視圖爲連續窗體,記錄集類型爲快照,清空排序的按鈕名稱爲btnCancel,排序的按鈕名稱爲btnOrder。
類似像下圖的連續窗體,以後我們會講,這裏就不贅述了。
03
三、添加代碼
代碼已經給大家寫好了,大家可以拿來直接用。
清空排序按鈕單擊事件
1Private Sub btnCancel_Click()
2
3 CurrentDb.Execute "UPDATE tblHochsprung SET tblScore.Rang = 0;"
4 Me.Requery
5End Sub
排序按鈕單擊事件
1Private Sub btnOrder_Click()
2 If Not RangBerechnen("tblScore", "Score") Then
3 MsgBox "排序失敗"
4 End If
5 Me.Requery
6End Sub
排序自定義函數
1Private Function RangBerechnen(TableName As String, LeistungFeld As String) As Boolean
2 On Error GoTo ErrorHandler
3 Dim rst As Object ' Recordset
4 Dim iRang As Byte
5 Dim iLeistung As Integer
6 Dim iGleicherRang As Integer
7 Set rst = CurrentDb.OpenRecordset("SELECT * FROM " & TableName & " ORDER BY " & LeistungFeld & " DESC", dbOpenDynaset)
8 iRang = 1
9
10
11 Do While Not rst.EOF
12 iLeistung = rst.Fields(LeistungFeld)
13 rst.Edit
14 rst!Rang = iRang
15 rst.Update
16 rst.MoveNext
17 If rst.EOF Then Exit Do
18 iGleicherRang = 0
19 Do While (rst.Fields(LeistungFeld) = iLeistung) '判斷是否是相同的數值,如果是相同的,順序+1
20 rst.Edit
21 rst!Rang = iRang
22 rst.Update
23 iGleicherRang = iGleicherRang + 1
24 rst.MoveNext
25 If rst.EOF Then Exit Do
26 Loop
27 iRang = iRang + 1 + iGleicherRang
28 Loop
29 rst.Close
30
31 RangBerechnen = True
32 Set rst = Nothing
33Exit_Rang:
34 Exit Function
35
36ErrorHandler:
37 MsgBox Err.Description, vbCritical
38 RangBerechnen = False
39 Resume Exit_Rang
40
41End Function
04
四、運行測試
運行結果如下圖
好了,大家快去試一下吧。
武漢加油,中國加油!