按从大到小排序
程序员文章站
2022-05-03 13:13:44
...
手机边亲爱的你还好吗?
大家开工了吗,这个超长假期过的怎么样?
我们在开发中应该都会遇到各种各样的排序问题,今天给大家分享数值的排序(成绩的排序)。
我们先来讲一下需求,现有一组数值,需要得到按从大到小的顺序得到数值的顺序,如果数值相同则得到相同的顺序。
我们还是老规矩,一步步的来操作。
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
四、运行测试
运行结果如下图
好了,大家快去试一下吧。
武汉加油,中国加油!