Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未执行VBA删除查询_Vba_Ms Access - Fatal编程技术网

未执行VBA删除查询

未执行VBA删除查询,vba,ms-access,Vba,Ms Access,我的Access应用程序有一个无法调试的怪癖。 我有一个表单,它本质上是在“已完成”表中插入,从“待处理”表中删除。撇开设计偏好不谈,这是我做这件事的方式,而不是有某种“状态”栏 我将用相关行总结我的代码 首先,它将插入到已完成的表中,然后进行简单的删除: qr = "DELETE * FROM tblPendingClasses WHERE ((tblPendingClasses.ID = " & curr & "));" 'build the quer

我的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为的类就在那里。没有有意义的错误,什么都没有。这过去是有效的,有时也有效,但目前不起作用


Ideas?

如果您的模块包含
选项Explicit
,您应该会在此行中得到一个编译错误,“变量未定义”:

dbMine.Execute qr, dbFailOnExecute
您可能打算将
dbFailOnError
而不是
dbFailOnExecute
作为
.Execute
方法的选项。将
Option Explicit
添加到代码模块的声明部分,以便VBA编译器在您尝试使用不存在的常量名称(
DBFailOneExecute
)时向您发出警告。然后编译并修复编译器抱怨的任何其他问题

Database.Execute方法帮助主题建议:
“…在使用Execute方法运行更新或删除查询时,始终使用DbFailOneError选项。如果任何受影响的记录被锁定且无法更新或删除,此选项将生成运行时错误并回滚所有成功更改。”

因此,
dbFailOnExecute
将向您提供运行时错误消息,解释预期删除没有发生的原因

进行这些更改后,如果仍然没有删除任何行并且没有错误消息,请确保没有关闭
SetWarnings

DoCmd.SetWarnings True

curr
变量的数据类型是什么?另外,对于
tblPendingClasses
中的
ID
字段是什么。如果它不是一个数字,则需要在
curr
变量周围放置
s,如下所示:
((tblPendingClasses.ID=”&curr&“);“
ID和curr都是数字,数据类型相匹配。我发现了问题所在,谢谢。@Scotch只是一个快速观察,因为删除查询只是操作行而不是单个列,您不需要指定delete*FROM,delete FROM就足够了。我将其更改为failOnError。我仍然没有收到任何信息性错误消息。我我刚刚找到问题所在。不知何故,一条空白记录(除了外键)被添加到了相关表中。当我手动尝试删除该记录时,它警告我无法删除该记录,因为“xxx”中有相关记录我不知道为什么它在运行时不会告诉我。不管怎么说,这就是问题所在——一个随机的垃圾记录,带有问题记录的外键。请检查
SetWarnings
是否已关闭。建议您也找出是谁关闭了
SetWarnings
,并找到一些有效的方法说服他们不再这样做。;-)阅读该帮助主题的其余部分(我的重点):“在Microsoft Access工作区中,如果您提供语法正确的SQL语句并具有相应的权限,则Execute方法不会失败-即使没有一行可以修改或删除。因此,在使用Execute方法运行更新或删除查询时,请始终使用dbFailOnError选项。如果任何受影响的记录被锁定且无法更新或删除,此选项将生成运行时错误并回滚所有成功更改。“+1--正是我想知道的。此引文总结了问题所在。可能会将其添加到您的答案中,因为它在注释中被折叠?