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 不可更新(从两个表中查询)的主要内容,如果未能解决你的问题,请参考以下文章

VBA 将整个 ADODB.Recordset 插入表中

从两个表中选择更新 Linq 查询?

VBA Excel - 访问查询不可更新

访问:使用从另一个查询中选择的 DAO.recordset 运行查询

更新查询从库存表中减去相同的销售模型行?

由于空格,ADODB.Recordset 到 SQL Server 查询失败