【问题标题】:Update Query in Access 2010-Update based on matching fieldsAccess 2010-Update 中的更新查询基于匹配字段
【发布时间】:2015-11-20 21:21:58
【问题描述】:

我是一家小公司的实习生,正在对一个已有 15 年历史的访问数据库进行一些修复,该数据库用于跟踪客户、工作等。我正在尝试编写更新查询,但无法似乎开始按我需要的方式工作。这是我的位置。

我有两张桌子。一个包含公司信息。另一个包含联系信息。 company 表的主键也在contact 表中,为一对多关系。例如,如果一家公司有 3 个联系人,则来自 Company 表主键的 CompanyID 号码与 Contacts 表中的三个联系人相关联。

好的。现在的问题是在一个名为“Company”的表单中有一些遗留代码,它同时搜索联系人和公司。问题是联系人表中有一个名为“ContactCompany”的字段正在被这个旧的搜索功能使用。如果用户使用表单更改公司名称,则公司名称会在 Company 表中更新,但不会在 Contacts 表中更新。

我决定使用更新查询来同步两个表单上的公司名称信息。我尝试对其进行设计,以便如果表之间的 ID 号匹配,则 Company 表中的公司名称将被复制到联系人表中。我的代码如下:

UPDATE Company INNER JOIN Contacts ON (Company.ID = Contacts.CompanyID) AND (Company.ContactCompany = Contacts.ContactCompany) SET Contacts.ContactCompany = [Company].[ContactCompany] WHERE (([Contacts].[CompanyID]=[Company].[ID]));

当我运行查询时,Access 告诉我它正在更新 X 条记录,但记录没有更新。

请注意,我使用了查询生成器;当我进入 SQL 视图时,SQL 代码是由 access 自动生成的。

我对 VB 不是很熟悉;我所有的知识都来自谷歌搜索。如果有人能给我一些关于我做错了什么或如何进行的指示,我将不胜感激。谢谢!

【问题讨论】:

标签: sql database ms-access vba ms-access-2010


【解决方案1】:

因为在您的加入条件中,您选择了已经具有相同 ContactCompany 名称的 Contact.ContactCompany。

AND (Company.ContactCompany = Contacts.ContactCompany)

删除“AND”部分,您的查询应该如下所示。

UPDATE Company 
INNER JOIN Contact ON Company.ID = Contact.CompanyID 
SET Contact.ContactCompany = [Company]![ContactCompany] 
WHERE (([Contact]![CompanyID]=[Company]![ID]));

附:确保在更新之前备份您的数据库

【讨论】:

  • 效果很好!非常感谢您花时间帮助初学者!
  • 一件事WHERE (([Contact]![CompanyID]=[Company]![ID])); 是多余的,因为您已经创建了join on Company.ID = Contact.CompanyID
【解决方案2】:

我使用 Access 的查询帮助

你不需要AND (Company.ContactCompany = Contacts.ContactCompany),你已经在说它们现在不同了。

UPDATE Company 
INNER JOIN Contact 
      ON Company.CompanyID = Contact.CompanyID 
SET Contact.CompanyName = [Company].[CompanyName];

您可以添加此行以仅更新那些不同的

WHERE Contact.CompanyName <> = [Company].[CompanyName]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多