首页 > 解决方案 > 如何保存未触及的新记录

问题描述

在这个论坛(以及其他论坛)上阅读了很多之后,我仍然没有找到解决我问题的方法。这是一个经典场景:客户创建一个订单,而订单又拥有OrderItems。所以我的表格如下:

tbl_Customer
cust_Id as Long(主键,自动增量)
cust_Name as String
cust_Adress as String
cust_Phone as String

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

tbl_OrderItem
oi_OrdId as Long(引用为表tbl_Order中的外键字段ord_Idoi_ArtId as Long(引用为表 tbl_Article 中的外键字段 art_Id,在此场景中不相关)oi_Count as Integer(文章数量)oi_Price as Double (物品价格)


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

除了这些表之外,我在 Access 中创建了一个表单frmCustomer(基于 tbl_Customer),它拥有一个子表单frmOrder(基于 tbl_Order)。这两种形式由cust_Idord_CustId字段连接。SubForm frmOrder又具有一个 subForm frmOrderItem(基于表 tbl_OrderItem)。它们通过字段ord_Idoi_OrdId连接。

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

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

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

非常感谢您的帮助

ulofb

标签: ms-access-2010recordautosavesubform

解决方案


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

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


推荐阅读