我正在使用Access,我在写一个SQL查询,我想按组合框值列表顺序排序。例如,如果Combox的行来源列表类型为:值列表和行来源:星期一,星期二,星期三等...是否可以通过组合框值列表进行排序?
按照在组合框中找到的顺序排序,而不是按字母顺序排列。
我正在使用Access,我在写一个SQL查询,我想按组合框值列表顺序排序。例如,如果Combox的行来源列表类型为:值列表和行来源:星期一,星期二,星期三等...是否可以通过组合框值列表进行排序?
按照在组合框中找到的顺序排序,而不是按字母顺序排列。
您可以使用IIF来设置订单。
ORDER BY IIf([FIELD]="Monday", 0, IIf([Status]="Tuesday", 1, 2))
所以你可以在vba中构建SQL,从ComboBox获取值并将其构建到你的ORDER BY claus中。
说出你的组合被称为cboDays
您可以循环组合,并获得价值。
Dim strOrderBy As String
Dim intCounter As Integer
For intCounter = 0 To cboDays.ListCount - 1
Debug.Print cboDays.ItemData(intCounter)
strOrderBy = strOrderBy & "IIf([FIELD]="& Chr(34) & cboDays.ItemData(intCounter) & Chr(34) & ", " & i & ", "
Next
'Remove the last comma
Dim intOBLen As Integer
intOBLen = Len(strOrderBy)
strOrderBy = Left(strOrderBy, intSSLen - 1)
strOrderBy = "ORDER BY " & strOrderBy & ")"
然后将此添加到您的SQL的其余部分并将窗体的RowSource设置为此SQL。
你写它的方式,答案是“否”。不是动态的。
你应该做的是将你的组合框项存储在一个表中。这是从来没有一个好主意,使用价值清单,这正是你不应该的明显原因之一。
将值存储在表中,并使用Rank字段。像这样的:现在
ComboName ComboValue ComboRank
cboDays Monday 1
cboDays Tuesday 2
cboDays Wednesday 3
cboDays Thursday 4
cboDays Friday 5
cboDays Saturday 6
cboDays Sunday 7
,为您的组合框的行来源,使用此:
SELECT ComboRank, ComboValue
FROM tblCombos
WHERE ComboName = "cboDays"
ORDER BY ComboRank;
然后,在你的组合框中设置以下属性:
Column Count: 2
Column Widths: 0, 1
Bound Column: 2
Limit To List: Yes
如果你有任何其他组合框,将它们添加到您的tblCombos并将ComboName更改为您的组合框的名称并相应地添加值和排名。
您的数据表应该存储ComboValue(理想情况下,您实际使用的是ID字段,以便尽可能少存储信息)。所以,想要做的是左连接上tblCombo让你的排序顺序:
Select MyTable.*, tblCombo.ComboRank
from MyTable
Left Join tblCombo
on MyTable.DayValue = tblCombo.ComboValue
Order By tblCombo.ComboRank
这就是你要写信给显示你所有的数据,你的组合框的顺序排序的查询。显然你需要将“MyTable.DayValue”改为你的表和字段的实际名称。