打开的对象

时间:2017-04-12 20:23:17

标签: sql-server excel vba

我正在努力解决这个问题

我有一个查询,当我在MSSQL服务器管理工​​作室中运行它给我18行,它存储在一个单元格中。数据库连接到实时服务器,我们希望从中创建Excel仪表板,以便使用实时数据刷新并创建图形等....

*****编辑*****

我尝试了一个非常简单的查询,它可以实现,例如

从表中选择max(datetime),我确实有最新的同步。

事情是:我的查询有

1)用于验证的声明表 2)临时表"表格为();"对所有数据进行排序并使用一些过滤对它们进行排序" RowNumber"稍后使用where语句调用,该语句只接受一些行号以避免重复

我认为在连接之间必须关闭,可以吗?

通常这段代码可以解决,但对于这台服务器,我得到:

"当对象关闭时,不允许运行时错误3704操作"

我搜索了论坛和谷歌没有运气

Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
Dim query As String
Set con = New ADODB.Connection
Set rs = New ADODB.Recordset

strCon = "Provider=SQLOLEDB.1;" _
           & "Password=*******;" _
           & "Persist Security Info=True;" _
           & "User ID=********;" _
           & "Initial Catalog=*******;" _
           & "Data Source=***.**.**.**;" _
           & "Use Procedure for Prepare=1;" _
           & "Auto Translate=True;Packet Size=4096;" _
           & "Use Encryption for Data=False;" _
           & "Tag with column collation when possible=False"

con.Open (strCon)

rs.ActiveConnection = Con 'modified with suggestion below

strSQLQuery = Worksheets("Query").Range("B2").Value

rs.Open strSQLQuery
      For i = 0 To rs.Fields.Count - 1
Sheet2.Cells(1, i + 1) = rs.Fields(i).Name
Next i

Worksheets("Result").Range("A2").CopyFromRecordset rs
rs.Close

Set rs = Nothing
con.Close
Set cn = Nothing

魔术师可以帮帮我吗?因为现在我正在使用excel VBA作为演示,但我想将它推广到VB工具,并希望确保它不是与服务器相关的问题。

提前谢谢

1 个答案:

答案 0 :(得分:3)

con.Open (strCon)
rs.ActiveConnection = strCon

应该是

con.Open strCon
rs.ActiveConnection = con

即。您应该将ActiveConnection设置为刚刚打开的Connection对象,而不是连接字符串。