【问题标题】:MS Access: Consolidate Query Data on a FormMS Access:在表单上合并查询数据
【发布时间】:2021-02-02 20:52:59
【问题描述】:

出于投标目的,我正在整理我们的联系人的 MS Access 数据库。当您单击按钮时,我正处于构建中想要展开和显示公司详细信息的位置。我已经编写了按钮来运行我的查询并在表单上显示数据。我遇到的问题是:我的数据被复制了。例如:

我有一家公司 (tbl_Company)

该公司有 3 个联系人 (tbl_Contacts)

该公司还拥有 2 个许可证 (tbl_CoLic)

我的查询输出是 6 行数据,每个联系人都有每个许可证。

我的最终目标是在表格上显示每家公司的所有详细信息,而不复制其他信息。我总共有 6 个表,其中包含不同的公司详细信息,这 6 个表中的每一个都可以有一个或多个与每个公司关联的记录。

我可以运行单独的查询来为每个详细信息填充列表框,但这似乎很麻烦。有没有更好的办法?请注意,这一切都是在 MS Access 中完成的,而不是在 SQL Server 中完成的。这是我现在的查询:

    SELECT tbl_Company.[Company Name], tbl_Contact.[First Name], tbl_Contact.[Last Name], tbl_CoLic.[License Number], tbl_CoLic.[License Code], tbl_CoLic.[Primary License], tbl_CoWA.County, tbl_CoPS.[Project Size], tbl_CoRef.District, tbl_CoRat.Rating, tbl_CoRat.Notes
    FROM (((((tbl_Company INNER JOIN tbl_CoPS ON tbl_Company.[Company ID] = tbl_CoPS.[Company ID]) INNER JOIN tbl_CoRat ON tbl_Company.[Company ID] = tbl_CoRat.[Company ID]) INNER JOIN tbl_CoRef ON tbl_Company.[Company ID] = tbl_CoRef.[Company ID]) INNER JOIN tbl_CoLic ON tbl_Company.[Company ID] = tbl_CoLic.[Company ID]) INNER JOIN tbl_CoWA ON tbl_Company.[Company ID] = tbl_CoWA.[Company ID]) INNER JOIN tbl_Contact ON tbl_Company.[Company ID] = tbl_Contact.[Company ID]
    WHERE (((tbl_Company.[Company ID])=[TempVars]![Details]));

示例数据的屏幕截图

【问题讨论】:

  • 那么你需要用子表单构建表单。或者更好的是报告,而不是表格,可能带有子报告。数据应该以文本表的形式发布,而不是图像。这是一个设计问题,而不是编程问题,响应基本上是意见,因此问题并不真正适合 SO。另一种考虑stackoverflow.com/questions/54789423/…的方法
  • June7 比我知道的多得多,但我还是不同意,因为我觉得与 Access API 的交互是编程。但是我可以看到,我急于完成答案需要在这一点上进行一些润色

标签: ms-access


【解决方案1】:

Access 要求表单和报表有一个记录源。如果您有一个包含表单所需所有信息的查询或表格,您只需单击它,访问将基于该记录源构建和管理默认表单/报告。因此,一种访问友好的方法是为任何表格/报告提供一个包含它需要的所有内容的表格。因此,使用一些随机建议和一项重要更改来复制您的数据库 - 删除额外的公司名称列。

我们可以复制您的问题:

SELECT tbl_Company.CompanyName, tbl_Contact.FirstName, tbl_Contact.LastName, tbl_Colic.LicenseNumber, tbl_Colic.LicenseCode, tbl_Colic.PrimaryLicense, tbl_CoWA.County, tbl_CoWA.District, CompanyProjectSizes.ProjectSize, CompanyRatings.Rating, CompanyRatings.Notes
FROM ((((tbl_Company INNER JOIN tbl_Colic ON tbl_Company.CompanyID = tbl_Colic.CompanyID) INNER JOIN tbl_Contact ON tbl_Company.CompanyID = tbl_Contact.CompanyID) INNER JOIN tbl_CoWA ON tbl_Company.CompanyID = tbl_CoWA.CompanyID) INNER JOIN CompanyProjectSizes ON tbl_Company.CompanyID = CompanyProjectSizes.CompanyID) INNER JOIN CompanyRatings ON tbl_Company.CompanyID = CompanyRatings.CompanyID;

发生的情况是,当我们将多个表合并为 1 个时,我们遇到了一个问题,因为我们有 2 个许可证代码,每个许可证代码都有自己的行。 (使用内部联接时,将删除组合表中包含任何缺失数据的行。我们看到任何内容的原因是 Rebel Plumbing 的公司 ID 已添加到所有以前的空表中)解决方案的第一部分设置下一个问题是使用总计查询。

SELECT tbl_Company.CompanyName, tbl_Contact.FirstName, tbl_Contact.LastName, First(tbl_Colic.LicenseNumber) AS FirstOfLicenseNumber, First(tbl_Colic.LicenseCode) AS FirstOfLicenseCode, First(tbl_Colic.PrimaryLicense) AS FirstOfPrimaryLicense, First(tbl_CoWA.County) AS FirstOfCounty, First(tbl_CoWA.District) AS FirstOfDistrict, First(CompanyRatings.Rating) AS FirstOfRating, First(CompanyRatings.Notes) AS FirstOfNotes
FROM ((((tbl_Company INNER JOIN CompanyProjectSizes ON tbl_Company.CompanyID = CompanyProjectSizes.CompanyID) INNER JOIN CompanyRatings ON tbl_Company.CompanyID = CompanyRatings.CompanyID) INNER JOIN tbl_Colic ON tbl_Company.CompanyID = tbl_Colic.CompanyID) INNER JOIN tbl_Contact ON tbl_Company.CompanyID = tbl_Contact.CompanyID) INNER JOIN tbl_CoWA ON tbl_Company.CompanyID = tbl_CoWA.CompanyID
GROUP BY tbl_Company.CompanyName, tbl_Contact.FirstName, tbl_Contact.LastName;

现在您已经有了所需的记录源,它在报告中工作得很好。但是在这种情况下,当您从新记录源创建表单时,表单会悄悄地无法更新和编辑!
发生的事情是 Access 不知道如何更改表以响应表单中的更改。这里的大部分问题是我们使用的总查询。这是一个链接,描述了您何时可以将表单基于查询: https://support.microsoft.com/en-us/office/use-a-query-as-the-record-source-for-a-form-or-report-e54251f3-57ca-4a7d-8e77-e498966cd41b

此时问题中没有足够的细节来具体说明要做什么。在大多数情况下,您必须将数据输入至少分为两部分,因为我们无法将所有信息放入一个易于访问的记录源中。哪些部分取决于用户偏好以及其余数据的结构。对于提供的数据,我采用表单子表单方法中的基表,使用公司表作为表单的记录源,将联系人和许可证表作为子表单:

【讨论】:

  • 感谢您的详细回复。你的意见基本上是我怀疑的情况。我会处理表格中重复的“公司”名称,我怀疑这些名称是多余的,不需要。
猜你喜欢
  • 2017-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-18
  • 2012-12-13
相关资源
最近更新 更多