检索所有包含分号的查询

时间:2019-12-06 09:42:02

标签: excel vba adodb

我试图通过VBA中的ADODB记录集从SQL中提取数据。当SQL查询包含分号时,我很难从SQL查询的每个部分获取结果。想知道是否有任何方法可以将我的查询拆分为多个单独的查询(以消除分号问题),并且不对每个查询使用单独的记录集。

请参见下面的简单示例。当我运行它时,F2 = 1,G2 =失败-我想要F2 = 1,G2 = 2。

' Sub to test using semi-colons in SQL queries
Sub getDataSimple0(server As String, database As String)

  ' Initialise variables
  Dim con As ADODB.Connection
  Dim rs As ADODB.Recordset

  Set con = New ADODB.Connection
  Set rs = New ADODB.Recordset

  ' Open Connection using Windows Authentication
  con.ConnectionString = "Provider=SQLOLEDB;Data Source=" & server & ";Initial Catalog=" & database & ";Trusted_connection=Yes;Integrated Security=SSPI;Persist Security Info=True;"
  con.Open

  ' Open recordset
  rs.Open "SELECT 1; SELECT 2", con

  ' Add data to worksheet
  Range("F2").CopyFromRecordset rs

  rs.NextRecordset
  If rs.State > adStateClosed Then
    Range("G2").CopyFromRecordset rs
  Else
    Range("G2").Value = "Failed"
  End If

  ' Close connection
  con.Close

End Sub

2 个答案:

答案 0 :(得分:1)

我将通过执行以下操作来解决此问题。

' Sub to test using semi-colons in SQL queries
Sub getDataSimple0(server As String, database As String)

  ' Initialise variables
  Dim con As ADODB.Connection
  Dim rs As ADODB.Recordset
  Dim SQL_String As String
  Dim SQL_Array() As String
  Dim i As Integer

  Set con = New ADODB.Connection
  Set rs = New ADODB.Recordset

  ' Open Connection using Windows Authentication
  con.ConnectionString = "Provider=SQLOLEDB;Data Source=" & server & ";Initial Catalog=" & database & ";Trusted_connection=Yes;Integrated Security=SSPI;Persist Security Info=True;"
  con.Open

  'Multiple queries
  SQL_String = "SELECT 1; SELECT 2"

  'Split into array
  SQL_Array = Split(SQL_String, ";")

  'Add data to worksheet
  For i = LBound(SQL_Array) To UBound(SQL_Array)

     rs.Open SQL_Array(i), con
     Range("F2").Offset(0, i).CopyFromRecordset rs

  Next i


  ' Close connection
  con.Close

End Sub

在这里,我接受多个查询并将它们拆分为一个循环的数组。假设您想要从F列开始的列中输入输出。

答案 1 :(得分:0)

我相信您需要将rs设置为NextRecordset的结果,因此代码如下所示:

' Sub to test using semi-colons in SQL queries
Sub getDataSimple0(server As String, database As String)

  ' Initialise variables
  Dim con As ADODB.Connection
  Dim rs As ADODB.Recordset

  Set con = New ADODB.Connection
  Set rs = New ADODB.Recordset

  ' Open Connection using Windows Authentication
  con.ConnectionString = "Provider=SQLOLEDB;Data Source=" & server & ";Initial Catalog=" & database & ";Trusted_connection=Yes;Integrated Security=SSPI;Persist Security Info=True;"
  con.Open

  ' Open recordset
  rs.Open "SELECT 1; SELECT 2", con

  ' Add data to worksheet
  Range("F2").CopyFromRecordset rs

  Set rs = rs.NextRecordset
  If rs.State > adStateClosed Then
    Range("G2").CopyFromRecordset rs
  Else
    Range("G2").Value = "Failed"
  End If

  ' Close connection
  con.Close

End Sub