按从大到小排序

手机边亲爱的你还好吗?

 

大家开工了吗,这个超长假期过的怎么样?

 

我们在开发中应该都会遇到各种各样的排序问题,今天给大家分享数值的排序(成绩的排序)。

 

我们先来讲一下需求,现有一组数值,需要得到按从大到小的顺序得到数值的顺序,如果数值相同则得到相同的顺序。

 

我们还是老规矩,一步步的来操作。

 

01

一、建表

 

首先,如图需要先建一张表

 

按从大到小排序_第1张图片

接下去输入一些数据

 

按从大到小排序_第2张图片

 

02

二、建窗体

 

这次窗体有些复杂,窗体的默认视图为连续窗体,记录集类型为快照,清空排序的按钮名称为btnCancel,排序的按钮名称为btnOrder。

类似像下图的连续窗体,以后我们会讲,这里就不赘述了。

 

按从大到小排序_第3张图片

 

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

四、运行测试

运行结果如下图

 

按从大到小排序_第4张图片

 

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

武汉加油,中国加油!

你可能感兴趣的:(Access基础,Access开发,Access查询)