【问题标题】:How to save an untouched new record如何保存未触及的新记录
【发布时间】:2021-04-24 02:39:44
【问题描述】:

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

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

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

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

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

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

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

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

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

非常感谢您的帮助

ulofb

【问题讨论】:

    标签: ms-access-2010 record autosave subform


    【解决方案1】:

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

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

    【讨论】:

    • 您好 Gustav,非常感谢您的回答。我的问题是保存订单记录,以便在订单项目中使用新的订单号。但是 DoCmd.RunCommand acCmdSaveRecord 函数不起作用。首先必须将记录的属性dirty 设置为true。这要求表单的绑定的、可更新的字段具有焦点。所以我写了一个小程序来做这个。现在,当我单击(测试)cmd 按钮时会调用此过程。所以现在我必须找到一个好地方(事件)来放置这个程序。所以再次非常感谢你的小费 ulofb
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    相关资源
    最近更新 更多