我的Access应用程序有一个怪癖,我无法调试。 我有一个表单,基本上插入“已完成”表和从“待处理”表删除。除了设计偏好之外,这就是我正在做的事情而不是某种“状态”列。
我将用相关的行总结我的代码。
首先它将插入到已完成的表中,然后是简单的删除:
qr = "DELETE * FROM tblPendingClasses WHERE ((tblPendingClasses.ID = " & curr & "));" 'build the query
Debug.Print qr
MsgBox (qr)
dbMine.Execute qr, dbFailOnExecute
Form.Refresh 'refresh,requery
Form.Requery
MsgBox ("Class review complete.")
docmd.close
从debug语句和msgbox构建的查询很好,但它没有做任何事情。我查看表中的挂起的类,并且我正在尝试删除的ID的类只是坐在那里。没有意义的错误,没有。这曾经有效,有时有效,但目前无法正常工作。
想法?
答案 0 :(得分:4)
如果您的模块包含Option Explicit
,那么您应该收到编译错误,“此行未定义变量”:
dbMine.Execute qr, dbFailOnExecute
您可能希望dbFailOnError
而不是dbFailOnExecute
作为.Execute
方法的选项。将Option Explicit
添加到代码模块的声明部分,这样当您尝试使用不存在的常量名称(dbFailOnExecute
)时,VBA编译器将提醒您。然后编译并修复编译器抱怨的任何其他问题。
Database.Execute Method 帮助主题建议:
“ ...在使用Execute方法运行更新或删除查询时始终使用dbFailOnError选项。此选项会生成运行时错误,如果受影响的任何记录被锁定,则会回滚所有成功的更改不得更新或删除。“
因此dbFailOnExecute
将为您提供运行时错误消息,该消息解释了为什么没有发生预期的删除。
进行这些更改后,如果仍然没有删除任何行并且没有错误消息,请确保没有关闭SetWarnings
。
DoCmd.SetWarnings True