我正在使用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」改爲你的表和字段的實際名稱。