Access表单过滤:按附件字段有无文件筛选记录的代码实现
Access表单按附件字段筛选的正确方法
你之前用 Me.Filter = [Fichero].AttachmentCount = 0 无效的原因是:Filter属性需要的是字符串形式的SQL筛选条件,而AttachmentCount是字段对象的属性,不能直接嵌入到Filter的条件字符串里。以下是两种可行的解决方法:
方法1:直接用Exists子查询筛选
利用Access为附件字段自动生成的隐藏子表判断是否存在附件,这是最高效的方式:
筛选无附件的记录
Me.Filter = "NOT EXISTS (SELECT * FROM [Documentación_Fichero] WHERE [ParentID] = [Documentación].[Id])" Me.FilterOn = True
筛选有附件的记录
Me.Filter = "EXISTS (SELECT * FROM [Documentación_Fichero] WHERE [ParentID] = [Documentación].[Id])" Me.FilterOn = True
注意:Documentación_Fichero 是系统自动生成的隐藏子表,命名规则为「原表名_附件字段名」,如果你的表名或附件字段名有变动,需要对应调整这个子表名称。
方法2:修改基础查询,添加附件计数字段
如果需要更直观的筛选条件,可以先给基础查询增加一个计算附件数量的字段,再基于这个字段筛选:
第一步:更新查询语句
SELECT Documentación.Fecha, Documentación.Categoría, Documentación.Médico, Documentación.Paciente, Documentación.Fichero, Documentación.Fichero.FileName, Documentación.Papel, (SELECT Count(*) FROM Documentación_Fichero WHERE ParentID = Documentación.Id) AS 附件数量 FROM Pacientes RIGHT JOIN (Médicos RIGHT JOIN (Categorías RIGHT JOIN Documentación ON Categorías.Id = Documentación.Categoría) ON Médicos.Id = Documentación.Médico) ON Pacientes.Id = Documentación.Paciente ORDER BY Documentación.Fecha;
第二步:表单中用新字段筛选
筛选无附件:
Me.Filter = "[附件数量] = 0" Me.FilterOn = True
筛选有附件:
Me.Filter = "[附件数量] > 0" Me.FilterOn = True
内容的提问来源于stack exchange,提问作者Manuel
相关产品推荐
相关产品推荐

