2015-09-14 24 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」改爲你的表和字段的實際名稱。

相關問題