按從大到小排序

手機邊親愛的你還好嗎?

 

大家開工了嗎,這個超長假期過的怎麼樣?

 

我們在開發中應該都會遇到各種各樣的排序問題,今天給大家分享數值的排序(成績的排序)。

 

我們先來講一下需求,現有一組數值,需要得到按從大到小的順序得到數值的順序,如果數值相同則得到相同的順序。

 

我們還是老規矩,一步步的來操作。

 

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

四、運行測試

運行結果如下圖

 

 

好了,大家快去試一下吧。

武漢加油,中國加油!

發佈了11 篇原創文章 · 獲贊 8 · 訪問量 7596
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章