SQL Server ODBC连接问题

SQL Server ODBC连接问题,sql,sql-server,excel,vba,excel-2007,Sql,Sql Server,Excel,Vba,Excel 2007,我一直在尝试创建一个通过批处理文件运行的宏来生成报告,并且在连接SQL Server时遇到了一些非常恼人的问题,可能是因为我犯了一些愚蠢的错误 我创建连接的代码如下所示: Dim dbs As Database Dim qdf As QueryDef Dim rst As Recordset Set dbs = OpenDatabase("", False, False, connect) Set qdf = dbs.CreateQueryDef("") 其中“connect”是包含连接详细

我一直在尝试创建一个通过批处理文件运行的宏来生成报告,并且在连接SQL Server时遇到了一些非常恼人的问题,可能是因为我犯了一些愚蠢的错误

我创建连接的代码如下所示:

Dim dbs As Database
Dim qdf As QueryDef
Dim rst As Recordset

Set dbs = OpenDatabase("", False, False, connect)
Set qdf = dbs.CreateQueryDef("")
其中“connect”是包含连接详细信息的字符串

我的问题是,无论出于何种原因,Excel(2007)似乎对该块的最后一行有问题。我在dbs变量中添加了一个观察者,它看起来非常好,那么为什么它不喜欢qdf呢

更奇怪的是,如果我在宏的最开始处放置一个“Stop”命令,从批处理文件开始执行,然后在到达停止点时手动继续执行,那么它工作得很好,并且完全符合我的要求

我已尝试查看DBEngine.Errors,这表明我存在以下问题:

  • 常规错误:无效的窗口句柄
  • 连接未打开
同样,这对我来说毫无意义,特别是考虑到它是在手动执行的情况下工作的,谷歌也没有给出任何答案


注:如果这一点不清楚,请再看一看,它似乎在问同样的问题,但没有答案。

因此,使用科学方法,我和一位同事能够找出问题是什么,尽管我不知道这有什么意义,也不知道它为什么会成为一个问题。宏的布局大致如下:

Dim dbs As Database
Dim qdf As QueryDef
Dim rst As Recordset

Set dbs = OpenDatabase("", False, False, connect)
Set qdf = dbs.CreateQueryDef("")
  • 测试数据库连接并关闭它
  • 创建新工作簿
  • 再次连接到数据库并通过数据库调用填充工作簿
然而,由于某种原因,解决方案是VBA不喜欢我们在创建工作簿之前和之后都在做连接的事情。将程序流更改为:

  • 创建新工作簿
  • 测试数据库连接并关闭它
  • 再次连接到数据库并通过数据库调用填充工作簿
成功了。再一次,我不知道为什么这解决了我们的问题,或者如果改变这个序列的顺序改变了代码中更重要的东西,但是它现在起作用了!如果有人对为什么会这样有任何想法,请随时发表评论