将数据从单一表单 Access 数据库添加到多个表

Posted

技术标签:

【中文标题】将数据从单一表单 Access 数据库添加到多个表【英文标题】:Adding Data to multiple tables from single form Access Database 【发布时间】:2015-08-28 13:59:16 【问题描述】:

我有一个连续的表格,它将根据表格标题中的组合框过滤表格。到目前为止,一切都通过一种形式运行,没有子形式。我希望允许用户编辑现有记录以及添加新记录。编辑似乎没有给我带来任何问题,它正在尝试添加新记录。

我不久前问过下面的问题,一切都正常化了。为了将所有信息集中在一个地方,我使用了查询,但是无法通过查询编辑记录,所以我只是根据结果制作了一个表格。当子表单基于查询但不起作用时,我尝试通过子表单编辑数据。自从我创建了包含查询结果的表以来还没有尝试过。

基本上问题是我无法添加记录,例如全新的供应商,因为供应商在表格中不存在。我需要将数据添加到多个表(供应商、供应商代码、联系信息、上一个 3 中的所有信息)。真正不需要添加任何东西的是联系人类型表。

我在某处读到,需要发生这样的事情是一种糟糕的结构,但如果一切都需要规范化,这似乎是矛盾的。https://social.msdn.microsoft.com/Forums/Lync/en-US/3877ce6a-34d9-4732-9af3-4c2704e50a62/adding-data-to-multiple-tables-using-one-form-in-access-2010?forum=accessdev

Show All Records For Given Field Filter In Access 2010 Table

我之前没有考虑过的是更新查询。这适用于这种情况吗?我以前没有使用过,但总是愿意学习新的东西。唯一的问题是我对 SQL 不满意,但如有必要会使用它,如果有的话,我更喜欢使用 VBA。

编辑

SELECT tblSuppliers.Supplier, 
       tblSupplierCodes.[Supplier Code], 
       tblContactType.Type, 
       tblContactInfo.[Contact Name],  
       tblContactInfo.[Contact Email]

FROM (tblSuppliers INNER JOIN tblSupplierCodes ON 
     tblSuppliers.ID = tblSupplierCodes.[Supplier ID]) 
     INNER JOIN (tblContactType INNER JOIN tblContactInfo ON 
     tblContactType.TypeID = tblContactInfo.TypeID) ON 
     tblSuppliers.ID = tblContactInfo.SupplierID

WHERE (((tblSuppliers.Supplier)=[Forms]![frmContacts]![cboChooseSupplier])) OR ((([Forms]![frmContacts]![cboChooseSupplier]) Is Null))

ORDER BY tblContactType.Type, tblContactInfo.[Contact Name];

【问题讨论】:

【参考方案1】:

但是记录不能通过查询来编辑

这是一种误解。具有格式良好的内部连接的查询是可更新的。 1:n 关系的“1”侧必须是主键。

还有其他可能导致您的查询为只读的原因,请参阅http://allenbrowne.com/ser-61.html 或http://www.fmsinc.com/Microsoftaccess/query/non-updateable/index.html

您的查询中不能有 GROUP BY、DISTINCT、UNION 或 OUTER JOIN。

如果您没有找到原因,请发布您的 SQL,以便我们查看。

【讨论】:

既然你提到了,大多数表都有一个自动编号的主键,所以一些链接并不是一直来源于主键。那很可能是我的问题。 具有不在关键字段上的多表连接的查询从第二个链接中提取的引用我认为最能识别我遇到的问题 请在该 SELECT 字符串中添加一些换行符,以便更好地阅读。 --- 但没有什么明显的突出。尝试一次删除一个表并检查哪个表阻止了查询可更新。 如果我尝试向现有供应商添加新记录,例如 tblSuppler.Supplier,并且两个 tblContactInfo 字段都会产生问题。不确定这是否有助于缩小范围 嗯,不,不是。我建议你多尝试一些。如果一切都失败了,您可以将数据库的“匿名”版本上传到某个文件托管商。 我最终使用带有子表单的表单来添加尚未存在的供应商,将遵循相同的一般概念添加到现有供应商

以上是关于将数据从单一表单 Access 数据库添加到多个表的主要内容,如果未能解决你的问题,请参考以下文章

Access 2010 - 一个报价 ID 拥有多个产品

如何在保持表关系完整性的同时从 MS Access 数据输入表单添加数据

我可以用事务包装 Access 表单吗?

数据表视图中的 MS Access 表单交叉表查询

从 Access 数据库获取数据到 Excel VBA 表单

MS Access 表单以更新多个表而无需子表单