在列表框中显示所有记录

Posted

技术标签:

【中文标题】在列表框中显示所有记录【英文标题】:Show all records in a list box 【发布时间】:2016-08-28 23:48:53 【问题描述】:

我目前正在制作数据库,用于记录教师和学生的身份以及他们计划上课的时间。我有一个从查询中获取数据的列表框,该查询被从表中获取数据的组合框过滤。

过滤器正在工作,但无法显示查询中的所有记录。

有没有办法在组合框中添加一个选项,以将查询中的所有记录拉到列表框中,而不是过滤掉一些?

PS。最好使用嵌入式宏,必要时使用VB

组合框的行源('Teachers'为表格):

SELECT [Teachers].[TeacherID], [Teachers].[Forename], [Teachers].[Surname] 
FROM Teachers 
ORDER BY [Surname], [Forename], [TeacherID];

列表框的行源('TodayLessons'是查询,'TeacherID'是使用表单上组合框的条件):

SELECT [TodayLessons].[LessonID], [TodayLessons].[SlotID], [TodayLessons].[Lesson Date], 
       [TodayLessons].[Lesson Time], [TodayLessons].[TeacherID], [TodayLessons].[StudentID] 
FROM TodayLessons 
ORDER BY [Lesson Date], [Lesson Time], [TeacherID];

导致问题的行源(我尝试在“UNION”之前添加“FROM Teacher”)

SELECT -99 AS TeacherID, "* All *" AS Forename, "" AS Surname UNION SELECT [Teachers].[TeacherID], [Teachers].[Forename], [Teachers].[Surname] FROM Teachers ORDER BY [Surname], [Forename], [TeacherID];

【问题讨论】:

请显示列表框的当前RowSource(编辑您的问题并添加到那里)。 【参考方案1】:

如果你想使用列表框,你可以这样做:

组合框,使用 UNION 查询添加“全部”选择​​:

SELECT -99 AS TeacherID, "* All *" AS Forename, "" AS Surname
UNION
SELECT [Teachers].[TeacherID], [Teachers].[Forename], [Teachers].[Surname] 
FROM Teachers 
ORDER BY [Surname], [Forename], [TeacherID];

列表框:

SELECT [TodayLessons].[LessonID], [TodayLessons].[SlotID], [TodayLessons].[Lesson Date], 
       [TodayLessons].[Lesson Time], [TodayLessons].[TeacherID], [TodayLessons].[StudentID] 
FROM TodayLessons 
WHERE (TeacherID = Forms!yourForm!cboTeachers)
   OR (Forms!yourForm!cboTeachers = -99)
ORDER BY [Lesson Date], [Lesson Time], [TeacherID];

如果选择了组合框的特殊条目,则 WHERE 子句的“或”部分使所有记录为真。

-99 只是一个任意数字,如果 TeacherID 是自动编号,您也可以使用 0 代替。

【讨论】:

我不断收到错误消息:查询表达式中的语法错误(缺少运算符)“(TeacherID = Forms!Today's Schedule!TodaySch-Teacher)或(Forms!Today's Schedule!TodaySch-Teacher = -99) "。 @Ben:使用这些表单/控件名称,您必须将它们放入 [方括号]。:Forms![Today's Schedule]![TodaySch-Teacher] 现在,每当我单击组合框时,都会收到错误消息“查询输入必须包含至少一个表/查询”。每当我打开表单时,语法错误就会停止出现,所以我认为这是固定的。如果有帮助,TeacherID 将被存储为一个长整数(从 1 开始)。 嗯。请编辑问题并添加产生错误的当前 SQL 行源。 @本 可能找到了另一种方法。组合框代码只是在组合框中添加了另一行。查询“TodayLessons”使用 TeacherID 作为要在列表框中显示哪些记录的条件。如果我只是将新行的 TeacherID 设置为 >0,那么 ID 大于 0 的所有教师(即所有教师)都会出现。然后将列表框的行源设置为查询。我尝试在组合框行源中输入 >0 代替 -99,但它一直显示错误“查询表达式 '>0' 中的语法错误(缺少运算符)。”。【参考方案2】:

如果您使用子表单而不是列表框(但作为开发人员和最终用户都可以更好地进行交互),那么您可以设置 Filter on Empty Master = No。这意味着如果 Link Master Fields 为 null 则子(subform) 将显示所有记录,而不是一个都不显示。

【讨论】:

以上是关于在列表框中显示所有记录的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 2003 - 自动在表单的列表框中显示最后一条记录,而不是第一条

根据多个组合框过滤查询,但如果组合框为空,则显示所有记录,包括空,

MS Access 2013 - 根据文本框中的值过滤列表框中的值

C#匿名委托实现递归,将所有部门根据上下级关系显示在一个列表中,用于展示到下拉框中

根据 Access 列表框中的选择打开子表单

如何重命名列表框中所有文件的后缀?