微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MS Access:在表单上合并查询数据

如何解决MS Access:在表单上合并查询数据

我正在整理我们联系人的 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]));

样本数据截图

Design View of Query

Table View of Query

解决方法

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

enter image description here

我们可以复制您的问题:

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;

enter image description here

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

SELECT tbl_Company.CompanyName,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.LastName;

enter image description here enter image description here 现在您有了所需的记录源,它在报告中效果很好。但是,在这种情况下,当您从新记录源创建表单时,该表单无法更新和编辑!
发生的事情是 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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。