OpenRecordset 不返回可用的记录集/.edit 不工作?

OpenRecordset not returning usable recordset / .edit not working?

正在使用 Access 数据库,尝试 运行 查询以查找具有最新日期和 'where' 条件的记录。 返回的错误是 "Run Timer Error '3027' Cannot update. Database or object is read-only"

条件如下: 单击包含 'fCheckInFor' 文本字段的表单上的按钮。 数据库 'ToolTests' 个字段 "CheckOut" 是格式为“3/15/2019 5:35:31 PM”的日期 "CheckIn" 是格式为“3/15/2019 5:35:31 PM”的日期 "CheckInFor" 是一个文本字段 "ToolNumber" 是一个文本字段

Public CheckInTool as String

Private Sub CheckIn_Click()

CheckInTool = "000"
If Me.fCheckInFor = "" Then
MsgBox "Enter Returning User."

Else
    Dim dbsUE As DAO.Database
    Dim rstUE As DAO.Recordset
    Set dbsUE = CurrentDb
    Set rstUE = dbsUE.OpenRecordset("SELECT Max([CheckOut]) FROM [ToolTests] WHERE [ToolNumber]= '" & CheckInTool & "'")

    With rstUE
    .Edit 'error occurs here
    !CheckIn = Now()
    !CheckInFor = Me.fCheckInFor
    .Update
    End With
MsgBox "Checked In"
DoCmd.Close acForm, "CheckIn"
End If

End Sub

所以错误在 .Edit 行抛出,我不确定从这里去哪里。把整个东西扔掉并从不同的方向着手也可以。

如果我没看错,您想要更新具有特定 ToolNumber 的记录。所以,如果你想使用子查询,你要么需要在主查询和子查询中都使用该条件,要么 link 主查询的子查询使用该字段:

Set rstUE = dbsUE.OpenRecordset( _ &
  "SELECT CheckIn, CheckinFor FROM ToolTests WHERE" & _
  " CheckOut IN (SELECT Max(CheckOut) FROM ToolTests AS tmp WHERE ToolNumber = ToolTests.ToolNumber)" & _
  " And ToolNumber = '" & CheckInTool & "'")

或者,您可以简单地按正确顺序对记录进行排序并更新第一个:

Set rstUE = dbsUE.OpenRecordset( _ &
  "SELECT CheckIn, CheckinFor FROM ToolTests WHERE" & _
  " ToolNumber = '" & CheckInTool & "'" & _
  " ORDER BY CheckOut DESC")