繁体   English   中英

检索所有包含分号的查询

[英]Retrieve all of query containing semi-colons

我正在尝试通过 VBA 中的 ADODB 记录集从 SQL 中提取数据。 当 SQL 查询包含分号时,我很难从它的每个部分获取结果。 想知道是否有任何方法可以在不将我的查询拆分为单独的查询(以消除分号问题)并为每个查询使用单独的记录集的情况下执行此操作。

请参阅下面的简单示例。 当我运行它时,F2=1,G2=Failed - 我想要 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

我会通过做类似下面的事情来解决它。

' 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 列开始的列中的输出。

我相信您需要将 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM