检索所有包含分号的查询

问题描述 投票:0回答:1

我正在尝试通过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
excel vba adodb
1个回答
0
投票

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

' 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, ";")

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

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

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

  Next i


  ' Close connection
  con.Close

End Sub

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

© www.soinside.com 2019 - 2024. All rights reserved.