OpenRecordset不返回可用记录集/.edit无法正常工作?

时间:2019-03-16 01:21:50

标签: vba ms-access recordset

在Access上处理数据库,尝试运行查询以查找具有最新日期和“ where”条件的记录。 返回的错误是“运行计时器错误'3027'无法更新。数据库或对象为只读”

以下条件: 在包含“ fCheckInFor”文本字段的表单上单击按钮。 数据库“工具测试”字段 “签出”的日期格式为“ 2019/3/15下午5:35:31” “签入”的日期格式为“ 2019/3/15下午5:35:31” “ CheckInFor”是一个文本字段 “工具编号”是一个文本字段

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行,我不确定从这里开始。扔掉整个东西并从另一个方向去做也是很好的选择。

1 个答案:

答案 0 :(得分:0)

如果您说对了,您想更新具有特定ToolNumber的记录。因此,如果要使用子查询,则需要在主查询和子查询中都使用该条件,或者使用该字段将子查询与主查询链接:

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")