How do I custom sort a query on a subform?

时间:2018-08-31 16:27:14

标签: sql ms-access access-vba

I have a query that has a "Status" field name with possible entries of "Overdue", "Due Soon", "In-Progress" and "Complete". I can display the records in that order when opening the query using IIF, but cannot translate it over to the subform that displays the query. I'd like the query to be sorted upon Form_Open()

Private Sub Form_Open(Cancel As Integer)

Me.frm_Stability.Form.OrderBy = "Status ASC IIf([Status]='Overdue',1,IIf([Status]='Due Soon',2,IIf([Status]='In-Progress',3,IIf([Status]='Complete',4))))"
Me.frm_Stability.Form.OrderByOn = True

End Sub

Any help would be appreciated!

2 个答案:

答案 0 :(得分:0)

我意识到,如果将我的IIF语句应用于子窗体的“排序和过滤器”,它将准确地反映在主窗体上。底层查询似乎与主表单也相差一度。

答案 1 :(得分:0)

如果我对您的理解正确,则希望对子窗体和主窗体进行排序。最好的方法是在Access数据库中添加一个表。让我们将此表称为 StatusSortOrder 。在此表中,您可以这样定义值:

'Tablename: StatusSortOrder

----------------------------
ID    Status       SortOrder
----------------------------
1     Overdue      1
2     Due Soon     2
3     In-Progress  3
4     Complete     4

请勿将ID用作顺序。如果以后需要更改排序顺序,则可以轻松地更改SortOrder列中的数字,但不能更改ID。 现在,将您的表与表 StatusSortOrder 联接(联接列为 Status )。将查询命名为 qryOutput 。在此查询设计器中,您可以在 SortOrder 列ASC或DSC后面进行排序。如果您现在以主表单和子表单的形式使用此查询作为数据源,则会以正确的方式对其进行排序。