Recordset不可更新(从两个表中查询)

时间:2017-07-16 09:31:15

标签: sql ms-access sharepoint ms-access-2013

我正在使用带有Sharepoint列表的Microsoft Access 2013,我有两个表:

  • 学生:ID,全名,移动版,Start_Date(他们开始在我的中心学习的日期)以及一些不相关的字段

=>有很多学生有不同的开始日期

  • [周休息] :ID,原因,From_Date(中心暂时关闭的日期),[周数](中心临时关闭的周数从From_Date开始) )

=>在每个学生的学习时间里,他们可能会有一些“休假”,这些都没有计入他们学习的总周数中。

我正在创建一个查询来计算学生从Start_Date开始学习的周数。

SELECT

students.ID,
students.[Full name],
students.Mobile,
students.Start_Date,
Round((Date()-students.[Start_Date])/7,0) - 
( SELECT SUM(
    IIF( [Weeks Off].[From Date]> students.[Start_Date] and [Weeks Off].[From Date]<Date(), 
         [Weeks Off].[Number of Weeks], 0 )
   ) 
  FROM [Weeks Off]
) AS [Studied Weeks],

FROM students;

现在的问题是,即使查询成功显示所有学生显示其“已学习周”的列,Recordset也不可更新。

如何让它再次更新?

来自评论:

我将其改为:

(Round( ( Date()- students.Start_Date)/7,0) - 
 DSum("[Number of Weeks]", "[Weeks Off]", 
      "[From Date]>= students.Start_Date And [From Date]<= Date()") 
) AS [Studied Weeks] 

但是它说:微软找不到名字student.Start_Date你在表达式中输入了。所以我仍然被困在这里。

1 个答案:

答案 0 :(得分:2)

请参阅:Dealing with Non-Updateable Microsoft Access QueriesAllen Browne: Why is my query read-only?

来自后者:

  

它在SELECT子句中使用First(),Sum(),Max(),Count()等。聚合记录的查询是只读的。

如果您将计算放入单独的查询并将其(在Student.ID上)加入Students表,它可能会有效。

如果将SUM计算转换为DSum()表达式,它将起作用(但可能会更慢)。然后只有该列才是只读的。

修改

students.Start_DateDSum调用中的变量,因此它必须位于条件中的常量字符串之外。

使用Gustav的CSql() function格式化日期并将其与其余日期连接起来。

(Round( ( Date()- students.Start_Date)/7,0) - 
 DSum("[Number of Weeks]", "[Weeks Off]", 
      "[From Date]>=" & CSql(students.Start_Date) & " And [From Date]<= Date()") 
) AS [Studied Weeks] 

应该这样做。