热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

访问VBAQueryDef.Execute()错误3420

如何解决《访问VBAQueryDef.Execute()错误3420》经验,为你挑选了1个好方法。

这里有一段非常简单的代码,这是一个非常烦人的问题.这是一个较大的子程序的一部分,但应在此处找到唯一的相关信息.

Dim db As DAO.Database
Set db = CurrentDb

' If the associated hospital is new, add it first
If newHName = True Then
    Dim qdfNewHospital As DAO.QueryDef
    Set qdfNewHospital = db.CreateQueryDef
    qdfNewHospital.SQL = "INSERT INTO tblHospital (HospitalName)" & _
        " VALUES ('" & hName & "')"
    qdfNewHospital.Execute dbFailOnError
    Dim iAffected As Integer
    iAffected = qdfNewHospital.RecordsAffected
    Debug.Print "Inserting hospital " & hName & " affected " & iAffected & " row(s)"
End If

我在此行收到错误3420"对象无效或不再设置":

qdfNewHospital.Execute dbFailOnError

这似乎表明我知道QueryDef创建的常见问题如下:

CurrentDb.CreateQueryDef

由于CurrentDb如何在内部工作,过早处置.这个问题的常见解决方案显然是我在这里所做的,在变量中保存"CurrentDb snapshot"并从那里创建QueryDef以确保它不被处理掉.一些额外的细节:

我已经验证代码中的其他地方没有命名冲突

此模块中的其他任何地方甚至没有引用CurrentDb

我已经搜索了Stackoverflow和各种帮助论坛试图找到这个看似简单的问题的解决方案,并且在任何情况下类似于此的解决方案总是"不要直接调用CurrentDb,而是将其存储在变量中".但我已经这样做了,问题仍然存在.任何对此的见解将不胜感激.



1> Gord Thompso..:

您收到该错误,因为QueryDef您创建的对象没有.Name属性.通常,当我们创建一个临时QueryDef对象时,我们将该.Name属性作为方法的空字符串参数提供CreateQueryDef:

Set qdfNewHospital = db.CreateQueryDef("")

或者,如果你愿意,我想你可以分两步完成......

Set qdfNewHospital = db.CreateQueryDef
qdfNewHospital.Name = ""

......但第一种方式更为常见.

QueryDef通过将临时对象设置.Name为空字符串来创建临时对象时,该对象不会保存在QueryDefs集合中,因此您在使用它之后无需担心"清理".

(感谢@MaciejLos建议改进这个答案.)


推荐阅读
author-avatar
Metoo婧婧
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有