执行存储在Excel单元格中的SQL查询,然后将结果集传输到.txt文件中

时间:2018-03-01 21:25:35

标签: excel vba excel-vba

  

我有一个SQL查询存储在我使用以下VBA代码执行的Excel工作表单元格中:

Sub run()

Dim dtStart As Date
Dim dtEnd As Date

Dim MRC As Variant

'Get the SQL text(s)
    MRC = "" & Worksheets("SQL Text").Range("D4").Value & ""




    'Check for UNDF queries
    If MRC = 0 Then
        MsgBox ("Query has not yet been defined, please make a new selection")
        Exit Sub
    Else

    End If


'Set up query


Application.StatusBar = "Data Refresh: 1 of 1 "

'Update subTabs

     Sheets("Summary").Select
                With ActiveWorkbook.Connections("connection1").OLEDBConnection
                    .CommandText = MRC
                    .CommandType = xlCmdSql
                End With
    ActiveWorkbook.Connections("connection1").Refresh


End Sub
  

除了上面的VBA代码之外,我还有另一个VBA代码,它执行不同的SQL视图,并将SQL视图结果集传输到.txt文件并将其保存到特定文件夹中。请参阅下面的代码

Sub TEXT()

Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strCon, strSQL As String

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

strSQL = "SELECT * FROM table1" 'Sql Query

Folder = "U:\"  'Path in U drive
Filename = "file_name_" & Format(Now(), "YYYYMMDD") & ".txt"  'Name of Text document
fpath = Folder & Filename

cn.Open strCon
rs.ActiveConnection = cn
rs.Open strSQL

Set fs = CreateObject("Scripting.FileSystemObject")
Set A = fs.CreateTextFile(fpath)
A.Write (rs.GetString(adClipString, , , vbCrLf, ""))

rs.Close
cn.Close
Set cn = Nothing

MsgBox ("file name " + fpath)


End Sub
  

目前我有兴趣应用第二个VBA逻辑将结果集数据传输到.txt文件到我的第一个VBA逻辑,它负责执行存储在其中一个Excel工作表单元格中的SQL查询。

     

简单地说,我想执行存储在Excel单元格中的SQL查询,然后将结果集传输到.txt文件

1 个答案:

答案 0 :(得分:0)

如果我理解这一点,那么这两个潜艇都会以不同的方式查询数据库。

在第一个示例中,您在工作表中获得了数据库连接,并且您正在使用单元格来更新该连接。 在第二个中,您已获得与数据库的vba / adodb连接。如果你想做的只是在excel中引用一个单元格来查询,那么只需更改一行:

strSQL = "SELECT * FROM table1" 'Sql Query

更像是:

strSQL = Worksheets("SQL Text").Range("D4").Value