Ms access 访问VBA:运行时错误3734

Ms access 访问VBA:运行时错误3734,ms-access,vba,Ms Access,Vba,有人能告诉我你的详细情况吗 运行时错误3734 在Access vba中 作为参考,我从以下线程中的代码中获取它 您似乎在当前数据库中使用ADO而不保存。在运行包含ADO的代码之前必须先保存。我不明白您想做什么。为什么要使用一个DAO记录集和一个ADO?这毫无意义。如果您已将查询保存在Access前端,那么即使后端是(比如)带有ODBC表链接的SQL Server,使用ADO也没有任何实用程序 您的代码中没有循环的证据,因此,除非您的代码被循环调用,否则KB文章的解释似乎不适用 我不知道您想做

有人能告诉我你的详细情况吗

运行时错误3734

在Access vba中

作为参考,我从以下线程中的代码中获取它


您似乎在当前数据库中使用ADO而不保存。在运行包含ADO的代码之前必须先保存。

我不明白您想做什么。为什么要使用一个DAO记录集和一个ADO?这毫无意义。如果您已将查询保存在Access前端,那么即使后端是(比如)带有ODBC表链接的SQL Server,使用ADO也没有任何实用程序

您的代码中没有循环的证据,因此,除非您的代码被循环调用,否则KB文章的解释似乎不适用

我不知道您想做什么,但是关于只打开一次数据库,而不是每次重复循环的要点,对于任何一个想到它的人来说应该是非常明显的。如果您正在运行一个循环,并且在每次循环中重复打开同一个数据库,那么很明显,该操作属于循环之外

可能是这样的:

  Dim db As DAO.Database
  Dim qdf As DAO.QueryDef

  Set db = CurrentDB()

  For Each qdf in db.QueryDef
    [do whatever here]
  Next qdf

  Set qdf = Nothing
  Set db = Nothing
  Public Sub ProcessQueries(db As DAO.Database)
    Dim qdf As DAO.QueryDef

    For Each qdf in db.QueryDef
      [do whatever here]
    Next qdf

    Set qdf = Nothing
  End Sub
在该代码中,您使用的是当前在用户界面中打开的MDB,但这并不重要——无论您打开哪个数据库并在其对象中循环,都应该在循环之外只打开一次

如果希望循环位于从主代码调用的子例程中,则将数据库变量作为参数传递给子例程。子例程如下所示:

  Dim db As DAO.Database
  Dim qdf As DAO.QueryDef

  Set db = CurrentDB()

  For Each qdf in db.QueryDef
    [do whatever here]
  Next qdf

  Set qdf = Nothing
  Set db = Nothing
  Public Sub ProcessQueries(db As DAO.Database)
    Dim qdf As DAO.QueryDef

    For Each qdf in db.QueryDef
      [do whatever here]
    Next qdf

    Set qdf = Nothing
  End Sub
你可以这样称呼它:

  Dim db As DAO.Database

  Set db = CurrentDB()    
  Call ProcessQueries(db)    
  Set db = Nothing

现在,如果您坚持从DAO获取源数据,然后通过ADO对其进行处理,那么将有一个DAO循环,在它内部还有一个ADO循环。因此,您希望在DAO循环外部而不是内部定义ADO连接。唯一的例外是,如果从DAO循环中提取的数据定义了使用ADO打开的数据库。由于我们不知道您实际想要完成的是什么,因此很难就您应该在代码中更改哪些内容给出好的建议。

发布导致错误的代码。使用ADO模式有时会很有用。我并不是说ADO永远都没有用。事实上,ADO可以用Jet 4做6件DAO做不到的事情(因为MS在他们不赞成DAO而支持ADO时故意决定不做这件事;现在他们已经改变了方向)。但对于基本的记录集操作,我看不到ADO over DAO中的任何实用程序