我有一个连接表链接到另外两个表。这提供了多对多连接。
两个链接表已经有一些数据,我可以手动将其放入联结表中。
但是如何将输入到两个表之一或两个表中的新数据添加到同一记录中的连接表中?
两个表各有一个主键,需要插入到Junction表中。有我可以使用的表单设置吗?
我应该使用VBA吗?如何确保表中的两个主键都安装到同一个连接表记录中。
图片和/或详细说明会有帮助。
谢谢你 约翰·施赖伯 [电子邮件受保护]
我只设置了带有几条记录的连接表来进行测试。 我正束手无策,试图弄清楚如何继续。
在访问中,您可以制作表格来帮助输入数据,而不是直接在表格中输入数据。 这是关于轻松和效率。 例如,如果有人向船只分配星际舰队军官怎么办? 对于分配者(?)来说,从任务、军官和船只的角度思考是最有效的,但数据是数字和字符串的表格。 该表格会自动完成并协助翻译。
上面是解释为什么,正如 parfait 评论的那样,我通常开始使用连接表和标题中的一些控件为我的连接表设置数据条目,但我很少在那里完成。
进入示例:
Access 表单具有处理主键和外键的内置功能,但不要忘记使用关系工具明确告诉 Access 有关表关系的结构:
之后!指定关系 Access 知道如何处理插入自动编号和外键。 因此,从联结表创建一个默认表单,并将控件添加到联结表中每个属性的表单标头,联结表主键 ShipAssignmentID(它是自动编号)除外。 当我继续进行时,我会调整标题和详细信息部分中的控件以显示业务术语而不是表格条目。
此时利用这个表格来研究access如何插入和更新表。 如果控件已绑定,您可以通过删除控件源来取消绑定,并查看控件现在如何对选定的表行执行任何操作。 详细信息部分中的控件也可以取消绑定。 重新绑定所有内容并仔细观察外键如何更新以及自动编号 ShipAssignmentID 如何创建。
完成后,继续调整控件以显示业务术语中的所有内容,包括删除显示 ShipAssignmentID 的详细信息部分中的控件。 ShipAssignmentID 仍然在表单记录源中,因此 sql 可以工作,但它是表设置方式的一部分,而不是数据库代表的业务的一部分。
如果我要继续改进此表单,我可能会添加按钮来打开表单以添加军官或船只。 在更快的数据输入下,当需要将大量军官分配到新船时该怎么办? 我可以调整此表单或创建一个几乎重复的表单,其中我用军官多选列表框替换标题中的军官组合框。 我希望我已经完成了这个示例,因为它只添加了列表框的循环。 相反,我为输入的每个日期添加 400 年,以使我可以输入的最快日期更加艰难。
首先取消绑定标头中的所有控件。 随着我们做的事情越来越多,我们需要自己改变表格。 相反,我们将连接之前未提到的分配官员按钮。
Private Sub cmdAssignOfficer_Click()
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("ShipAssignments")
rs.AddNew 'ShipAssignmentsID assigned
rs!OfficerID = Me.cmbOfficerNickName 'default value of cmbOfficerNickName is set up to be OfficerID
rs!ShipID = Me.cmbShipName
rs!AssignmentStart = DateAdd("yyyy", 400, CDate(Me.txtAssignmentStart)) 'make date more treky
rs.Update
Me.Requery 'show changes in the recordsource
End Sub