如何保存未修改的新记录

问题描述

在此论坛(以及其他论坛)上阅读了大量内容后,我仍然没有找到解决问题的方法。这是一个经典场景:Customer 创建一个 Order,而后者又具有 OrderItems。 所以我的表格如下:

tbl_Customer
cust_Id as Long(主键,自增)
cust_Name 作为字符串
cust_Adress 作为字符串
cust_Phone 作为字符串

tbl_Order
ord_Id as Long(主键,自增)
ord_CustId as Long(引用为表 tbl_Customer 中的外键字段 cust_Id
ord_Date 作为日期

tbl_OrderItem
oi_OrdId as Long(引用为表tbl_Order中的外键字段ord_Id
oi_ArtId as Long(引用为表 tbl_Article 中的外键字段 art_Id,与此场景无关)
oi_Count 作为整数(文章数量
oi_Price 为 Double(文章价格)

如您所见,客户和订购的商品之间的 m:n 关系并不复杂。

在这些表格旁边,我在 Access 中创建了一个表单 frmCustomer(基于 tbl_Customer),它拥有一个子表单 frmOrder(基于 tbl_Order)。这两个表单由字段 cust_Idord_CustId 连接。 子窗体 frmOrder 又具有子窗体 frmOrderItem(基于表 tbl_OrderItem)。它们通过字段 ord_Idoi_OrdId 连接。

插入这些表中的一些示例数据显示正确。切换客户会显示其订单和订单项。到目前为止一切顺利。

现在我想插入一个新订单,并向其中添加一些订单项。 如果我单击子表单 frmOrder 的“新建空记录”按钮(记录导航窗格),则会创建一个新的空订单记录,其中包含空字段和空子表单订单项。 当我现在插入一个新的订单项并尝试存储它时,会出现一条错误消息,指出无法存储记录,因为字段 oi_OrdId 不能为空。 确实如此,因为订单记录尚未存储,因此自动递增字段 ord_Id 尚未填充。仅当我编辑迄今为止未触及的订单记录(例如订单日期)中的字段并离开该字段时,才会存储该记录,并填充字段 ord_Id,以及字段 oi_OrdId 形式为 frmOrderItem
但是,因为字段 ord_CustId(=[Forms]![frmCustomer]![cust_Id],从父表单 frmCustomer 复制的值)和 ord_Date ( =Date() ) 有认值,我不想先编辑字段。 我想立即输入订单项。

当我输入子表单 frmOrderItem 的字段时,是否有一个事件(-procedure)可以用来自动保存未修改的订单记录(如何?)? 或者社区中有人提供了有用的解决方案?
顺便说一下,有没有办法访问一个新的、尚未保存的记录?

非常感谢您的帮助

ulofb

解决方法

现在我想插入一个新订单,并向其中添加一些订单项。如果 我点击按钮“新建空记录”(记录导航窗格) 子表单frmOrder

不要。反过来做。在子表单中插入新订单记录的块记录。插入/保存订单后,在子表单中启用记录插入。