You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 04:13:25