VBA ADODB记录集已关闭

时间:2016-10-31 18:25:28

标签: sql-server excel vba excel-vba ado

我正在尝试使用Excel VBA查询数据库并写入工作表。我对一个服务器/数据库的VBA代码工作得很好,但是当我尝试从另一个数据库中提取数据时,它会搞砸。

当我在这个数据库上运行它时,我收到一条错误,指出“当对象关闭时不允许操作”。在With mrs行。我不明白为什么在我之前打开它之前对象是关闭的。

SQL查询包含nocount onansi_warnings off

以下是相关的VBA代码:

Dim strFileContent As String
Dim massiveString As String

Sub runSelectedQueries()
    Call runQuery(Sheet3, "dbp07", "OLBRET", "C:\Queries\query.sql")
End Sub

Private Sub runQuery(outputSheet As Worksheet, serverVar As String, databaseVar As String, queryLoc As String)
    Dim sSQLQry As String
    Dim ReturnArray
    Dim Conn As New ADODB.Connection
    Dim mrs As New ADODB.Recordset
    Dim DBPath As String, sconnect As String
    sconnect = "Provider=SQLOLEDB;driver={SQL Server}; server=" & serverVar & "; Integrated Security=SSPI; database=" & databaseVar & ";"
     MsgBox (sconnect)

    'run readFile sub
    readAnyFile (queryLoc)

    'parse SQL file into string    
    sSQLString = massiveString

    Conn.Open sconnect
    mrs.Open sSQLString, Conn

    'write in the master record set (mrs) into a sheet
    With mrs
       For i = 1 To .Fields.Count
           outputSheet.Cells(1, i) = .Fields(i - 1).Name
       Next i
    End With
    outputSheet.Range("A2").CopyFromRecordset mrs

    'Close Recordset
    mrs.Close

    'Close Connection
    Conn.Close

End Sub

'reads any file as input (text) not binary using EOF, stripping the metadata at begining of a file    
Sub readAnyFile(queryLoc As String)

    Dim FileNum As Integer
    Dim DataLine As String
    massiveString = ""

    FileNum = FreeFile()
    Open queryLoc For Input As #FileNum

    While Not EOF(FileNum)
        Line Input #FileNum, DataLine ' read in data 1 line at a time
        massiveString = massiveString + DataLine
    Wend

    massiveString = Right(massiveString, Len(massiveString) - 2)

    MsgBox ("Read Successfully")
    MsgBox (massiveString)

End Sub

当我调试并推出从文件中读取的SQL代码时,我得到了SQL Server Management Studio中的内容。 SQL语句在MS Query,Python和SQL Server Management Studio中运行正常,由VBA解析,所以我不认为这是问题,但我可以发布它。

0 个答案:

没有答案