在列表框中显示所有记录
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 - 根据文本框中的值过滤列表框中的值