访问VBA:运行时错误3734

时间:2008-11-14 11:34:49

标签: vba ms-access access-vba

任何人都可以向我提供

的详细信息
  

运行时错误3734

在Access vba中

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

获取它

How to run a loop of queries in access?

Sub plausibt_check()

Dim rs As DAO.Recordset
Dim rs2 As ADODB.Recordset
Dim db As database
Dim strsql As String
Dim tdf As TableDef




Set db = opendatabase("C:\Codebook.mdb")
Set rs = db.OpenRecordset("querycrit")

Set rs2 = CreateObject("ADODB.Recordset")
rs2.ActiveConnection = CurrentProject.Connection


For Each tdf In CurrentDb.TableDefs ' in this line the error occurs

2 个答案:

答案 0 :(得分:1)

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

您的代码中没有循环的证据,因此除非您的代码被循环调用,否则我认为知识库文章说明不适用。

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

这将是这样的:

  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

在该代码中,您正在使用当前在用户界面中打开的MDB,但这并不重要 - 无论您打开哪个数据库并在其对象中循环,都只应在循环外打开一次。 / p>

如果要将循环置于从主代码调用的子例程中,则将数据库变量作为参数传递给子例程。子程序将是这样的:

  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打开的数据库。由于我们不知道您实际想要完成什么,因此几乎不可能就您应该在代码中更改的内容提供良好的建议。

答案 1 :(得分:0)

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