MS Access 连续窗体关联另一表下拉选择时记录集不可更新问题咨询
核心问题原因
你当前用了带筛选的子查询做左连接,Access默认会将这类关联查询标记为只读,和员工表主键无关,完全不需要修改原表主键影响已有选择功能。
最简单实现步骤
- 先修正SQL笔误
你原SQL中ASGN.PayCode引用错误,子查询别名是ASGN_TEMP,外层没有ASGN这个别名,先修正为:
SELECT CAT.EmployeeID, CAT.FirstName, CAT.LastName, ASGN_TEMP.ShiftNum, ASGN_TEMP.PayCode, IIf(ASGN_TEMP.[ShiftNum] Is Null,0,-1) AS IsSelected FROM tblEmployees AS CAT LEFT JOIN ( SELECT ASGN.EmployeeID, ASGN.ShiftNum, ASGN.PayCode FROM tblAssignedEmployees AS ASGN WHERE ASGN.ShiftNum = Forms!frmMainMenu![txtShiftNum] ) AS ASGN_TEMP ON CAT.EmployeeID = ASGN_TEMP.EmployeeID;
- 开启查询可编辑权限
打开连续窗体的属性面板,找到「数据」选项卡下的记录集类型,选择「动态集(允许不一致更新)**,保存窗体即可,此时PayCode字段就可以正常编辑,原有选择功能的代码完全不需要修改。 - 配置PayCode下拉组合框
- 组合框控件来源绑定查询中的
PayCode字段 - 行源设置为
SELECT PayCode, Desc FROM PayCodes ORDER BY ID,行源类型选择「表/查询」 - 列数设为2,列宽设为
0;2cm,绑定列设为1,即可实现用户看到薪资类别描述、后台存储PayCode编码的效果 - 可选优化:在窗体的「当前」事件中添加以下代码,只有选中分配到当前班次的员工才能编辑PayCode,避免误操作:
Me.cboPayCode.Enabled = (Me.IsSelected = -1)
补充验证
如果调整记录集类型后仍无法更新,只需给tblAssignedEmployees表的EmployeeID+ShiftNum组合添加唯一索引,避免同一个员工同一个班次生成重复记录即可,不需要修改其他表结构。
内容的提问来源于stack exchange,提问作者user2059972
相关产品推荐
相关产品推荐

