我将非常感谢您的帮助,请理解为什么以下查询返回“操作必须使用可更新的查询”消息:
UPDATE QC_Costs
SET QC_Costs.No_Makes = (SELECT Count(Temp_Tbl.Unique_ID) AS MakesCount
FROM (SELECT GSR.Unique_ID,
GSR.Month_Name,
GSR.Year_No
FROM GSR
INNER JOIN Products
ON Products.Unique_ID = GSR.Product_ID
WHERE ( ( ( Products.Item_category ) = "MAKE" )
AND ( ( GSR.Transaction_Type ) = "Invoice" ) )) AS Temp_Tbl
WHERE ( ( ( Temp_Tbl.Month_Name ) = QC_Costs.Month_Name )
AND ( ( Temp_Tbl.Year_No ) = QC_Costs.Year_No ) ));
我读过很多文章,如果未正确设置更新数据库的权限,则会显示此消息。我试图对文件夹权限进行这些更改(虽然一切看起来都很好),而我不完全理解的是,如果我编写一个不同的查询,我只想让QC_Costs表中的No_Makes字段为1,查询运行正常。这让我相信问题出在我的计数查询或子查询中,但当我将查询的这一部分转换为SELECT查询并自行运行时,它会返回一个结果。
我根本不是专家 - 我今天第一次尝试使用子查询 - 所以我真的很感激一些帮助。
对于上下文 - 我有一张满是发票和信用票据(GSR)的表格。另一个名为Products的表包含具有Item_Category字段的产品列表。 GSR通过Product_ID字段链接到Products。第三个名为QC_Costs的表有一个每个月的记录和一个名为No_Makes的字段。我想在GSR中捕获给定月份的MAKE产品的发票数量,并使用该数字更新QC_Costs表中的No_Makes字段。这个号码将用于我尚未编写的另一个查询中,或者可以添加到此一个查询中,其中一定数量的成本除以No_Makes,然后根据这些记录将该值发回GSR。
我希望以上内容有道理 - 如果我需要提供更多信息,请告诉我。
谢谢
编辑:
为了回应Parfait的回答,我写了以下内容并运行 - 谢谢:
UPDATE QC_Costs
SET QC_Costs.QC_Cost_Allocation =
DLookup("SumOfQC_Costs_To_Allocate", "Sum_Of_QC_Costs","Month_Name = " & [QC_Costs].[Month_Name] & " AND Year_No = " & [QC_Costs].[Year_No]) /
DLookUp("CountofUniqueID","Count_Of_Makes","Month_Name = " & [QC_Costs].[Month_Name] & " AND Year_No = " & [QC_Costs].[Year_No]);
我非常接近,但是我收到一条消息,告诉每个记录会发生类型转换失败。目标字段的数据类型是Double,我已经确定分母Dlookup查询不是零,所以这个除法的答案应该是一个数字小数,所以任何人都可以向我解释如何解决错误的问题,好吗?
我现在不在提问题了,所以我为此道歉 - 如果我不得不重新发布一个新问题,请告诉我。
由于
答案 0 :(得分:1)
MS Access更新查询不得为read-only才能运行。它与正确的权限无关。您尝试使用COUNT()
分配给 No_Makes 的聚合查询不可更新。
考虑DLookup
函数,该函数从保存的查询中外部检索您的值:
选择查询(另存为存储的查询对象)
SELECT Count(GSR.Unique_ID) AS CountUniqueID,
GSR.Month_Name,
GSR.Year_No
FROM GSR
INNER JOIN Products
ON Products.Unique_ID = GSR.Product_ID
WHERE (((Products.Item_category) = 'MAKE')
AND ((GSR.Transaction_Type) = 'Invoice'))
GROUP BY GSR.Month_Name,
GSR.Year_No
更新查询
UPDATE QC_Costs
SET QC_Costs.No_Makes = DLookup("CountUniqueID", "mySavedQuery",
"Month_Name='" & QC_Costs.Month_Name & "'
AND Year_No = " & QC_Costs.Year_No)
除此之外 - 通常说人们不应该在数据库表中保存计算或计算,因为它们可以很容易地从查询中检索报告。而是将表存储用于原始值。