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