2015-09-14 117 views
0

我正在使用Access,我在写一个SQL查询,我想按组合框值列表顺序排序。例如,如果Combox的行来源列表类型为:值列表和行来源:星期一,星期二,星期三等...是否可以通过组合框值列表进行排序?

按照在组合框中找到的顺序排序,而不是按字母顺序排列。

回答

1

您可以使用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。

3

你写它的方式,答案是“否”。不是动态的。

你应该做的是将你的组合框项存储在一个表中。这是从来没有一个好主意,使用价值清单,这正是你不应该的明显原因之一。

将值存储在表中,并使用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”改为你的表和字段的实际名称。

相关问题