表单筛选能否替代SQL查询及DLOOKUP中的公司/业务单元限制代码?
关于表单筛选替代SQL/DLOOKUP权限过滤的方案
完全可以用表单筛选来省去这些重复的权限过滤代码,还能大幅降低后续维护成本,具体实现思路如下:
设置表单全局筛选
打开表单设计视图,在「数据」选项卡的「筛选」属性中,直接写入当前用户的公司与业务单元过滤条件,示例代码:[公司ID] = Forms!用户信息表单!当前公司ID And [业务单元ID] = Forms!用户信息表单!当前业务单元ID这里假设你有一个启动时自动加载登录用户权限数据的表单(比如
用户信息表单)。设置完成后,表单及其关联子表单的所有基础数据交互都会自动应用这个筛选,无需在绑定SQL中重复编写权限条件。简化DLOOKUP调用
表单应用筛选后,若DLOOKUP的数据源与表单绑定数据源一致,无需再在DLOOKUP中追加权限条件——表单的筛选上下文会自动限定DLOOKUP的查询范围。如果是获取当前表单记录的字段值,甚至可以直接用Me.Recordset.Fields("目标字段").Value替代DLOOKUP,效率更高。补充注意事项
- 子表单需同步设置筛选属性,或通过主表单的筛选事件联动更新子表单数据范围,确保权限一致。
- 对于独立查询、报表这类脱离表单上下文的场景,可把权限条件封装成公共函数(比如
GetUserPermissionFilter()),在SQL中直接调用WHERE " & GetUserPermissionFilter(),避免重复编写代码。 - 用户权限变更时,需触发表单筛选的重新加载,保证数据范围实时匹配最新权限。
内容的提问来源于stack exchange,提问作者Dale
相关产品推荐
相关产品推荐

