如何让Access数据表视图窗体显示交叉表查询的全部字段?
如何让Access数据表视图窗体同步交叉表查询的新增字段?
能否在以Datasheet(数据表)视图显示的窗体中添加字段?观察窗体设计可知,每个字段对应一个控件后才会以数据表形式展示,因此推测运行时可能无法直接实现。
我通过以下VBA代码创建了一个示例数据库:
Sub CreateDB() DoCmd.RunSQL "CREATE TABLE EmployeeDetail " & _ "(ID AUTOINCREMENT PRIMARY KEY, " & _ "Forename TEXT(255), " & _ "Surname Text(255))" DoCmd.RunSQL "CREATE TABLE HourlyRateTypes " & _ "(ID AUTOINCREMENT PRIMARY KEY, " & _ "RateType TEXT(255),SortOrder INTEGER)" DoCmd.RunSQL "CREATE TABLE EmployeeHourlyRates " & _ "(ID AUTOINCREMENT PRIMARY KEY, " & _ "EmployeeID INTEGER CONSTRAINT FK_Employee REFERENCES EmployeeDetail (ID), " & _ "RateID INTEGER CONSTRAINT FK_Rate REFERENCES HourlyRateTypes (ID), " & _ "RateAmount CURRENCY)" DoCmd.SetWarnings False DoCmd.RunSQL "INSERT INTO EmployeeDetail (Forename, Surname) VALUES ('Some', 'Body')" DoCmd.RunSQL "INSERT INTO HourlyRateTypes (RateType, SortOrder) " & _ "SELECT * FROM (" & _ "SELECT 'Normal' as RateType, 1 AS SortOrder FROM MSysACEs " & _ "UNION SELECT 'Time Half', 2 FROM MSysACEs)" DoCmd.RunSQL "INSERT INTO EmployeeHourlyRates (EmployeeID, RateID, RateAmount) " & _ "SELECT * FROM (" & _ "SELECT 1 AS EmployeeID, 1 AS RateID, 15.67 AS RateAmount FROM MSysACEs " & _ "UNION SELECT 1,2,20 FROM MSysACEs)" DoCmd.SetWarnings True End Sub
随后用如下交叉表SQL生成所需视图,其中SortOrder字段可保证字段顺序(字段数量不超过9个时有效):
TRANSFORM Sum(EmployeeHourlyRates.RateAmount) AS SumOfRateAmount SELECT Forename, Surname FROM HourlyRateTypes INNER JOIN (EmployeeDetail INNER JOIN EmployeeHourlyRates ON EmployeeDetail.ID = EmployeeHourlyRates.EmployeeID) ON HourlyRateTypes.ID = EmployeeHourlyRates.RateID GROUP BY Forename, Surname PIVOT [SortOrder] & ":" & [RateType]
我将该查询作为数据源,在窗体中以数据表视图展示。当我向HourlyRateTypes表新增一条记录(RateType为Double Time,SortOrder为3),并向EmployeeHourlyRates表新增对应记录(EmployeeID为1,RateID为3,RateAmount为£40)后,查询能显示新增字段,但窗体并未同步更新——因为窗体向导是基于创建时的查询字段生成的。
请问是否有办法让窗体显示交叉表查询的所有字段?改用列表框并通过VBA修改列数与宽度是否更合适?欢迎提供任何思路。
内容的提问来源于stack exchange,提问作者Darren Bartrup-Cook
相关产品推荐
相关产品推荐

