Recordset 不可更新(从两个表中查询)
Posted
技术标签:
【中文标题】Recordset 不可更新(从两个表中查询)【英文标题】:Recordset is not updatable (query from two tables) 【发布时间】:2017-07-16 09:31:15 【问题描述】:我正在使用带有 Sharepoint 列表的 Microsoft Access 2013,并且我有两个表:
学生:ID、全名、手机、Start_Date(他们开始在我中心学习的日期)以及一些不相关的字段=> 有很多学生的开始日期不同
[Weeks Off]:ID、Reason、From_Date(中心暂时关闭的日期)、[Number of Weeks](中心从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]
但它说:Microsoft 找不到您在表达式中输入的名称 students.Start_Date。所以我还是卡在这里。
【问题讨论】:
【参考方案1】:请参阅:Dealing with Non-Updateable Microsoft Access Queries 和 Allen Browne: Why is my query read-only?
来自后者:
它在 SELECT 子句中使用 First()、Sum()、Max()、Count() 等。聚合记录的查询是只读的。
如果您将计算放入单独的查询中并将其(在 Student.ID 上)连接到 Students 表,它可能会起作用。
如果将 SUM 计算转换为 DSum()
表达式,它将起作用(但可能会更慢)。那么只有该列将是只读的。
编辑
students.Start_Date
是您的DSum
调用中的一个变量,因此它必须在条件中的常量字符串之外。
使用 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]
应该这样做。
【讨论】:
嗨,我把它改成了:(Round((Date()-students.Start_Date)/7,0)-DSum("[周数]","[周休]", "[From Date]>= students.Start_Date And [From Date]以上是关于Recordset 不可更新(从两个表中查询)的主要内容,如果未能解决你的问题,请参考以下文章