Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access MS Access连接表在两个互斥列表(2个列表框)之间插入/删除_Ms Access_Listbox_Mutual Exclusion_Junction Table - Fatal编程技术网

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

Ms access MS Access连接表在两个互斥列表(2个列表框)之间插入/删除,ms-access,listbox,mutual-exclusion,junction-table,Ms Access,Listbox,Mutual Exclusion,Junction Table,有了这个,我想创建一个功能,通过它可以从中添加和删除记录 案例来自编辑员工并选择他们可以参加的考试。在左侧列表框中,是他们没有资格参加的考试(无论如何),在右侧列表框中是他们有资格参加的考试 表格是这样的: TABLE EmpExam ( EmpID, ExamID ) If IsNull(cboInEligible.Column(1)) Exit Sub End If CurrentDB.Execute ("INSERT INTO tblEmpExam (ExamID, Em

有了这个,我想创建一个功能,通过它可以从中添加和删除记录

案例来自编辑员工并选择他们可以参加的考试。在左侧列表框中,是他们没有资格参加的考试(无论如何),在右侧列表框中是他们有资格参加的考试

表格是这样的:

TABLE EmpExam 
(
  EmpID,
  ExamID
)
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
EmpID
在任何时候都是已知的,但是将从左侧列表框中选择
ExamID
。右列表框中的记录可能必须同时具有
EmpID
ExamID
,才能删除

即时删除/插入在它们进入各自的框后是不必要的(它们可以等待表单关闭)


在Access中是否有一种很好的/标准的方法来实现这一点?

当您必须使用代码向表中添加项,然后使用代码删除它们时,为什么要使用列表框


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

当您必须使用代码向表中添加项目,然后使用代码删除项目时,为什么要使用列表框


对于您想要做的事情,子表单是常用的解决方案。此外,还可以使用子窗体的recordsetclone。请注意,您可能应该在该设置中有一个datetime字段。另外,如果ExamID是唯一的,并且启用了cascade delete,则从主表中删除将从子表中删除。

我最后使用了两个列表框,其中一个是add按钮,一个是remove按钮,触发了执行原始SQL的VBA单击方法

方法如下所示:

TABLE EmpExam 
(
  EmpID,
  ExamID
)
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,而不是在
中有
EmpID,以使其具有排他性。

我最后使用了两个列表框,其中有一个add按钮和一个remove按钮,它们触发了执行原始SQL的VBA单击方法

SELECT EmpID, EmpName
FROM Employee
WHERE EmpID NOT IN (SELECT EmpID FROM tblEmpExam WHERE ExamID = [txtExamID]);
方法如下所示:

TABLE EmpExam 
(
  EmpID,
  ExamID
)
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
,以使其具有排他性。

您的意思是,如果我从检查表中删除EmpExam条目,那么EmpExam条目也会被删除?如果是这样,那么这就是我的意图和设置。还有,关于你的建议有好的教程吗?是的,但它确实附带了一个警告:,然而,在这种情况下,它可能是合适的。以下是一个教程:请注意,如果运行删除查询,您可能不会收到要从多个表中删除的警告。您知道,您可以创建绑定到EmpID上连接表的子窗体,其中只有一个组合框,该组合框的行源为检查列表,绑定列为ExamID。这将为您提供大量的控制,包括通过检查recordset.recordcount是否小于或等于考试计数来防止在试题计数之外添加行?是的,如果使用CurrentDb.Execute方法,您肯定不会收到警告。您的意思是,如果我从考试表中删除,然后EmpExam条目也被删除了?如果是这样,那么这就是我的意图和设置。还有,关于你的建议有好的教程吗?是的,但它确实附带了一个警告:,然而,在这种情况下,它可能是合适的。以下是一个教程:请注意,如果运行删除查询,您可能不会收到要从多个表中删除的警告。您知道,您可以创建绑定到EmpID上连接表的子窗体,其中只有一个组合框,该组合框的行源为检查列表,绑定列为ExamID。这将为您提供大量的控制,包括通过检查recordset.recordcount是否小于或等于考试计数来防止在试题计数之外添加行的能力?是的,如果使用CurrentDb.Execute方法,您肯定不会收到警告。
SELECT EmpID, EmpName
FROM Employee
WHERE EmpID NOT IN (SELECT EmpID FROM tblEmpExam WHERE ExamID = [txtExamID]);