是否可以通过组合框值列表进行排序?

问题描述 投票:0回答:3

我正在使用 Access,正在编写一个 SQL 查询,我想按组合框值列表顺序进行排序。例如,如果行源类型的 Combox 列表:值列表和行源:星期一、星期二、星期三等...

将根据组合框中找到的顺序而不是按字母顺序排序。

sql database ms-access ms-access-2010
3个回答
3
投票

按照你的写法,答案是“否”。不是动态的。

您应该做的是将组合框项目存储在表格中。使用值列表永远不是一个好主意,这正是您不应该使用值列表的明显原因之一。

将值存储在表中,并使用排名字段。像这样:

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 上进行 left join 以获得排序顺序:

Select MyTable.*, tblCombo.ComboRank from MyTable Left Join tblCombo on MyTable.DayValue = tblCombo.ComboValue Order By tblCombo.ComboRank

这是您将编写的查询,用于显示所有数据,并按组合框的顺序排序。显然,您需要将“MyTable.DayValue”更改为表和字段的实际名称。


1
投票
您可以使用 IIF 来设置顺序。

ORDER BY IIf([FIELD]="Monday", 0, IIf([Status]="Tuesday", 1, 2))

因此,您可以在 vba 中构建 SQL,从 ComboBox 中获取值并将其构建到您的 ORDER BY 子句中。

假设您的组合名为 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。


0
投票
您好,我感谢一些帮助,我有一个包含 3 列的 Listbox1。 学生姓名、班级和性别。我需要 Listbox1 根据 ComboBox1 中的选择进行更新。

'下面的代码不起作用:

"SELECT [Student_Name], [Homeroom], [Gender] " & _ "FROM [dataSheet1$] " & _ "WHERE ([Nationality] LIKE " & ComboBox1.Value & ") " & _ "ORDER BY [Student_Name] ASC "
'当国家/地区被硬编码时,以下代码工作正常:

"SELECT [Student_Name], [Homeroom], [Gender] " & _ "FROM [dataSheet1$] " & _ "WHERE ([Nationality] LIKE 'Germany') " & _ "ORDER BY [Student_Name] ASC "
    
© www.soinside.com 2019 - 2024. All rights reserved.