gpt4 book ai didi

ms-access - Access VBA QueryDef.Execute() 错误 3420

转载 作者:行者123 更新时间:2023-12-04 13:59:47 25 4
gpt4 key购买 nike

这里的一个非常简单的代码片段构成了一个非常烦人的问题。这是一个更大的子程序的一部分,但唯一的相关信息应该在这里找到。

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 快照”保存在一个变量中并从那里创建 QueryDef 以确保它不会被丢弃。一些额外的细节:
  • 我已经验证在代码
  • 的其他地方没有命名冲突
  • 此模块中的其他任何地方都没有引用 CurrentDb

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

    最佳答案

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

    Set qdfNewHospital = db.CreateQueryDef("")

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

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

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

    当你创建一个临时的 QueryDef通过设置其 .Name 对象到一个空字符串对象不保存在 QueryDefs收藏因此您无需担心使用后的“清理”。

    (感谢@MaciejLos 建议改进此答案。)

    关于ms-access - Access VBA QueryDef.Execute() 错误 3420,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27972199/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com