是否可以在组查询中编辑一个字段
我有一张关于薪水的表:tPay
+-------------+--------------+---------------+---------------+
| idPay | PayDate | Pay | Taxes |
+-------------+--------------+---------------+---------------+
| 1 | 2018-01-12 | 1000,01 | 50,01 |
| 2 | 2018-01-26 | 1500,01 | 75,01 |
| 3 | 2018-02-04 | 1200,20 | 65,14 |
+-------------+--------------+---------------+---------------+
我按月查询分组:qryPay_groupByMonth(QRY#01)
SELECT DateSerial(Year([PayDate]),Month([PayDate]),1) AS Month,
Sum(tPay.Pay) AS PayOfMonth,
Sum(tPaie.Taxes) AS TaxesOfMonth
FROM tPay
GROUP BY DateSerial(Year([DateFinPeriode]),Month([DateFinPeriode]),1);
+-------------+--------------+---------------+
| Month | PayOfMonth | TaxesofMonth |
+-------------+--------------+---------------+
| 2018-01 | 2500.02 | 125.02 |
| 2018-02 | 1200.20 | 64.14 |
+-------------+--------------+---------------+
我创建如下的tTaxesPaid表以与上一个查询联接
+---------+-------------+
| Month | TaxesPaid |
+---------+-------------+
| 2018-01 | 125.02 |
| 2018-02 | 62.04 |
+---------+-------------+
我得到了Followign查询(QRY#02),其中TaxesPaid必须是一个可编辑的字段,而TaxesDiif必须是一个计算字段(应交税款和已付税款之间的差)。
SELECT tTaxesPaid.Month,
tTaxesPaid.TaxesPaid,
qryPay_groupByMonth.TaxesOfMonth.TaxesOfMonth,
Round([TaxesPaid]-[TaxesOfMonth],2) AS TaxesDiff
FROM tTaxesPaid LEFT JOIN qryPay_groupByMonth ON tTaxesPaid.Month = qryPay_groupByMonth.Month;
+---------+-----------+------------+----------------------+-----------------+
| Month | Pay | Taxes | TaxesPaid (editable) |TaxesDiff (calc) |
+---------+-----------+------------+----------------------+-----------------+
| 2018-01 | 2500.02 | 125.02 | 125.02 | |
| 2018-02 | 1200.20 | 64.14 | 62.04 | 2.10 |
+---------+-----------+------------+----------------------+-----------------+
当我尝试在QRY#02中编辑Taxs时总是出现错误:无法更新记录集。我尝试将每种记录类型都设为dyn(全局更新),但仍无法编辑。
有人有解决这个问题的想法吗?
我是否需要在临时表中复制QRY#01的结果才能在单个表报告中显示每个字段并能够编辑已付税款?
答案 0 :(得分:0)
由于查询的一部分(特别是qryPay_groupByMonth
)使用汇总,因此无法编辑值。在MS Access中,任何在执行过程中使用聚合的查询返回的记录集都是不可更新的。
您可以通过使用域聚合函数(例如DSum
)来计算每月总计,因为这是在查询执行之外进行评估的,这意味着查询保持可更新。
您也可以将汇总值输出到临时表(先清除表的内容后使用追加查询[insert into TempTable select ... from ...
],或删除后的生成表查询[select ... into TempTable from ...
]该表(如果已存在[drop TempTable
]));然后可以将这种临时表加入您的未聚合查询中,以使查询保持可更新状态。