带有连接的访问查询将复选框返回为空值
Posted
技术标签:
【中文标题】带有连接的访问查询将复选框返回为空值【英文标题】:Access query with join returns checkbox as null value 【发布时间】:2016-09-13 12:47:26 【问题描述】:即使我对 Access 的了解有限,这也很奇怪。背景信息:我正在创建一个数据库来跟踪与我一起工作的人。老板想要一份关于离职人员和更换人员的报告,所以我认为这可能会奏效。但是,当我加入信息时,会导致复选框显示 NULL 值。我确保将默认设置设置为 NO,并且据我所知,它没有设置为三态复选框。
这只是它的外观示例:
Table
我正在使用字段 IDReplicate 和 Replacement ID 来加入表和查询。 IDReplicate 只是主键的副本。使用主键作为 JOIN 中的第一个字段会产生类型不匹配
我的查询以获取有关替换人员的信息:
选择 tblExample.IDReplicate、tblExample.Arrival、tblExample.City、tblExample.Package、tblExample.LName FROM tblExample;
我的查询加入了离开和到达的人:
选择 tblExample.LName、tblExample.Departure、tblExample.ReplacementID、qryReplacement。* FROM tblExample LEFT JOIN qryReplacement ON tblExample.ReplacementID = qryReplacement.[IDReplicate];
Resultant Query Datasheet
【问题讨论】:
因为您使用的是 LEFT JOIN,所以在没有加入记录的地方是否存在空值? 看起来是这样,如果我尝试使用 RIGHT JOIN,结果是相反的,我会丢失姓名和出发日期。看来是 JOIN 属性导致了我的错误。我会使用内部联接,但我不会保留任何离开但尚未被分配替代的人。您知道不使用 JOIN 获得相同结果的任何其他方法吗?换句话说,构建一个表或查询来显示每个人的离开,以及他们是否在同一行中用他们的信息替换? 您可以将qryReplacement.Package
包装在 Nz 中,例如 Nz(qryReplacement.Package,false)
,然后对于那些空值,它应该显示为 0。您将失去复选框的外观。但这可能很好。如果您将报表设为实际的报表对象,则可以取回它(您可以在绑定到查询的表单上执行相同操作)。
【参考方案1】:
听起来你可能有一个三态复选框,你想要一个二态,查看这个 SO 帖子了解详细信息:
Determine whether a Access checkbox is checked or not
IMO,复选框很麻烦,最好避免。我的建议是将字段更改为带有约束的文本字段,以将条目限制为是或否,默认为否。这样,您就可以准确地知道表中的真实数据,而不是依靠 Access 将界面元素转换为数据。如果您在 Access 表设计界面中执行此操作,它将如下所示:
【讨论】:
好建议,谢谢。我可能只是使用带有是或否的下拉框作为选项来避免这个问题。奇怪的是,查询中还有另外两个是/否复选框,它们不会产生相同的错误。此外,在 JOIN 之前,SponsorPackage 字段不显示任何空值,仅显示真/假。我什至确保将它的默认值设置为 NO。当我明天有时间时,我将发布代码。也许有一些我错过的东西会导致这种情况。 我在我的示例中尝试了您的建议,在文本字段中使用“是”或“否”而不是复选框。我随机用 Yes 和 No 填充表,运行查询后,所有 No 都消失了,就好像它们也是空的一样。开始认为问题根本不在于复选框。 @Kronos1A9 是的,如果文本字段返回 null,则说明其他情况。要检查的一件事是任何使用另一个 null 变量的数据处理或计算;涉及空值的计算可能会返回空值,而不是您期望的空白值的行为。以上是关于带有连接的访问查询将复选框返回为空值的主要内容,如果未能解决你的问题,请参考以下文章