2015-08-28 114 views
0

我有一个连续的表单,它将基于表单标题中的组合框过滤表。从现在开始,所有事情都是通过一种形式进行的,没有子表单。我希望允许用户编辑现有记录以及添加新记录。编辑似乎没有引起任何问题,它正在尝试添加新记录。将数据添加到单个表单中的多个表Access数据库

我刚才问了一会儿以下的问题,并将所有的事情都正常化了。为了将所有信息集中到一个地方,我使用了查询,但是无法通过查询编辑记录,所以我只根据结果创建了一个表格。我试图通过子窗体的方式编辑数据时,子窗体基于查询,但没有奏效。自从我创建包含查询结果的表以来没有尝试过。

基本上问题是我不能添加一个记录,如全新的供应商,因为供应商不存在于表中。我需要将数据添加到多个表(供应商,供应商代码,联系信息,来自prev 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]; 

回答

0

但记录无法通过查询

这编辑是一个misbelief。具有格式良好的内部联接的查询是可更新的。 1:n关系的“1”端必须是主键。

还有其他可能的原因您的查询是只读的,看到http://allenbrowne.com/ser-61.htmlhttp://www.fmsinc.com/Microsoftaccess/query/non-updateable/index.html

你不能有GROUP BY,DISTINCT,UNION或OUTER在查询JOIN。

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

+0

现在你已经提到它了,大多数表格都有一个自动编号的主键,所以一些链接并不总是始终来自主键。这很好,可能是我的问题。 _具有多表连接的查询不在关键字段上_从第二个链接引出的引号,我相信最符合我正在处理的问题 –

+0

请在该SELECT字符串中添加一些换行符,以便它更易读。 ---但没有任何明显的突出。尝试一次删除一个表并检查哪个表阻止查询可更新。 – Andre

+0

如果我正尝试向现有供应商添加新记录,例如tblSuppler.Supplier和两个tblContactInfo字段都会产生此问题。不知道这是否有助于缩小范围 –

相关问题