如果您有一个不可更新的查询,请查看 Allen Browne 关于可能导致此问题的提示:http: //allenbrowne.com/ser-61.html
MS Access 有一个缺点。如果您希望在类似列表的视图中编辑数据,通常最好将其显示在与存储在表中的基本相同的结构中。编辑:参考 Yawar 留下的关于这不是 Access 缺点的评论,我想指出,在 .NET 中开发时,数据库结构与所使用的数据模型类完全不同并不少见在您的应用程序中。在这种情况下,GUI 建立在数据模型之上,因此数据库看起来可能与您的数据模型/GUI 有所不同(或事件完全不同)。
回到 MS Access,当您使用表连接为数据表表单或连续表单创建记录源/记录集时,我的理解是只有一个表是可更新的。换句话说,只有连接的一侧是可更新的。在许多情况下,由于 DAO 引擎被混淆,记录集根本不可更新。更新:我从下面的链接推断出我上面写的似乎比使用 JET/ACE 后端更适用于 SQL Server。
正如 HansUp 所建议的,最常见的解决方案是使用表单/子表单方法。实际上,您可以将数据表子表单作为另一个数据表子表单的子表单,这在您的情况下非常有效。每条记录的最左侧只有一个可扩展的加号,因此您可以在 tblTwo 中添加/编辑/删除记录。
另一种选择是使用 ActiveX 网格控件,例如 10tec 的 iGrid,这意味着您将为各种事情编写相当多的代码,例如加载记录集、将更改/添加/删除写回数据库、处理格式细胞等
另一种选择是使用伪造的 ADO 记录集。这是一种非常笨拙的方法,我不能说我真的见过它在使用中,主要是尝试过它并从理论上阅读它。问题是您必须创建一个与您生成的记录集几乎相同的虚构记录集,然后您必须循环遍历并将所有记录从生成的记录集中复制到您的虚构记录集中。这是一个巨大的开销,尤其是对于这么多的记录。然后,您必须再次编写代码以将所有添加/更改/删除写回数据库。处理新主键的创建可能很棘手。这种特殊的方法并不容易或简单,我不建议 VBA 初学者处理。
如果您使用的是 SQL Server,您应该查看 Microsoft 网站上的以下文章。它涵盖了各种材料,包括从单个记录源/视图更新多个表。http://technet.microsoft.com/en-us/library/bb188204%28v=sql.90%29.aspx