【问题标题】:ASC/DESC sorting in MS AccessMS Access 中的 ASC/DESC 排序
【发布时间】:2021-08-07 09:10:36
【问题描述】:

我有一张这样的桌子:

Name     Country      Grade
Lily     Germany      A
Anna     USA          C
Leon     Slovenia     -
Mia      Italy        
Carlos   Mexico       B

并且有两个按钮:

1. ASC button
2. DESC button

我正在尝试按 asc/desc 顺序对表格进行排序,但问题是我有 A、B、C 字母,但实际上是等级。使用我的代码:

Private Sub cboAufS_Click()

If Me.cboFilData = "KK" Then
        Me.Text1163.SetFocus
        DoCmd.RunCommand acCmdSortAscending
    End If
End Sub

Private Sub cboAbS_Click()
If Me.cboFilData = "KK" Then
        Me.Text1163.SetFocus
        DoCmd.RunCommand acCmdSortDescending
    End If
End Sub

这段代码给了我错误的结果,对于 ASC,我得到:“”,-,A,B,C 并且需要“”,-C,B,A,对于 DESC,我得到 C,B,A,- , " " 我需要 A, B, C, -, " "

有人可以帮帮我吗?

【问题讨论】:

    标签: vba sorting ms-access columnsorting


    【解决方案1】:

    计算查询中的字段以应用排序并将该查询用作表单或报告记录源。

    Switch(Grade="A",5, Grade="B",4, Grade="C",3, Grade="-",2, True,1) AS SortOrd
    

    在表单中,在按钮事件中使用代码,例如:

    Me.OrderBy = "SortOrd ASC"
    

    Me.OrderBy = "SortOrd DESC"
    

    在一个简单的报表中,可以使用类似的代码来动态设置排序顺序。在设计中使用排序和分组实用程序的复杂报表的代码会更复杂。

    【讨论】:

      【解决方案2】:

      您可以使用查询:

      SELECT 
          Table1.Name, 
          Table1.Country, 
          Table1.Grade
      FROM 
          Table1
      ORDER BY 
          Abs(Nz([Grade]) = "") DESC, 
          Abs([Grade] = "-") DESC, 
          Table1.Grade DESC;
      

      将 DESC 替换为 ASC 以进行反向排序。

      【讨论】:

        猜你喜欢
        • 2015-03-05
        • 2018-05-26
        • 2010-10-20
        • 2017-10-27
        • 2014-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多