MS-Access连接表在两个互斥列表之间插入/删除(2个列表框)

时间:2010-07-29 21:21:51

标签: ms-access listbox mutual-exclusion junction-table

使用此kind of design,我想创建一个功能,用于添加和删除junction table中的记录。

案例来自编辑员工并选择他们可以参加的考试。在左侧列表框中将是他们不符合条件的考试(无论如何)以及他们在右侧列表框中符合条件的考试。

表格是这样的:

TABLE EmpExam 
(
  EmpID,
  ExamID
)

EmpID始终是已知的,但ExamID将从左侧列表框中选择。右侧列表框中的记录可能必须同时包含EmpIDExamID才能删除。

一旦他们进入各自的盒子不需要即时删除/插入(他们可以等到表格关闭)。

在Access中有没有一种好的/标准的方法来实现这一目标?

2 个答案:

答案 0 :(得分:1)

为什么在必须使用代码向表中添加项目然后使用代码删除它们时才使用列表框?

对于您想要做的事情,子表单是通常的解决方案。此外,您可以使用子表单的recordsetclone。请注意,您应该在该设置中有一个日期时间字段。此外,如果ExamID是唯一的,并且启用了级联删除,则从主表中删除将从子表中删除。

答案 1 :(得分:0)

我最终使用两个列表框,其中包含一个添加按钮和一个删除按钮,用于触发执行原始SQL的VBA On Click方法。

该方法如下所示:

If IsNull(cboInEligible.Column(1))
  Exit Sub
End If

CurrentDB.Execute ("INSERT INTO tblEmpExam (ExamID, EmpID) " & _
                   "VALUES (" & ExamID & ", " & lstInEligible.Column(1) & ")")

lstInEligible.Requery
lstEligible.Requery

删除查询也是类似的。

这两个列表框是互斥的。

SELECT EmpID, EmpName
FROM Employee
WHERE EmpID NOT IN (SELECT EmpID FROM tblEmpExam WHERE ExamID = [txtExamID]);

txtExamID是表单上隐藏的(但对设计者来说很明显)控件,因为我不能通过控件或绝对命名来引用表单的ExamID。

其他列表框包含EmpID IN而不是EmpID NOT IN,以使其独占。