我创建了一个显示用户详细信息的表单,数据已拆分为三个表(table1、table2、table3) table1 具有链接到其他表中数据的外键
仅插入 table1 时,默认的上一个、下一个和新记录选择器工作正常。但是,在插入其他两个表后,表单无法创建新记录。
我相信这是因为 table2 和 table3 试图链接到 table1 中的外键。
当按下“新记录”时,它会返回“您无法转到指定记录”。
我创建了一个显示用户详细信息的表单,数据已拆分为三个表(table1、table2、table3) table1 具有链接到其他表中数据的外键
仅插入 table1 时,默认的上一个、下一个和新记录选择器工作正常。但是,在插入其他两个表后,表单无法创建新记录。
我相信这是因为 table2 和 table3 试图链接到 table1 中的外键。
当按下“新记录”时,它会返回“您无法转到指定记录”。
正如一位用户已经指出的那样,存储过程(如果可用)绝对是进行多表条目和编辑的首选方式。它基本上是一个事务,事务通常允许您在遇到错误时回滚。
Access 2010 在数据库引擎中内置了存储过程功能,但之前的 Access 版本没有。SQL Server 和 MySQL 等其他流行的数据库服务器也具有存储过程功能。要在这些数据库之一中运行/调用存储过程,您必须使用传递查询或使用 ADO。
Access 在表单级别确实有一个选项,可以将您的 Recordset Type 更改为 Dynaset Inconsistent Updates。这允许表单忽略查询中作为记录集基础的关系,但仍将遵守在关系窗口中定义的任何关系。你可以在这里看到一个讨论:http ://www.utteraccess.com/forum/Dynaset-Inconsistent-Upd-t1664392.html
正如在那次讨论中所指出的,我还设计了我的数据输入表单,即使我使用的是查询,它们也只构建在一个表上。然后,我将子表单用于相关表中的数据。我认为这几乎是 MS Access 中的标准设计实践。在 .NET 等环境中设计的软件更容易违反这一点,因为通常开发人员无论如何都必须为所有 CRUD 操作编写代码。这为开发人员提供了更大的灵活性。
我不确定您使用的是什么控件,但是我建议为 crud 操作编写存储过程。这是更新多个表的好方法