2015-01-26 142 views
1

我正在將數據表從sql-server移動到Excel中。
我不需要通過記錄集來獲取數據並將其粘貼到工作表中。最快的ADO從sql-server複製粘貼表格到Excel

我是否使用正確的參數爲記錄集的Open方法?

Dim recSet As ADODB.Recordset 
Set recSet = New ADODB.Recordset 
aConnection.Open 
recSet.Open stringSQL, aConnection, adOpenForwardOnly, adLockReadOnly, adCmdText 
wb.Sheets(sName).Cells(1, 1).CopyFromRecordset recSet 
recSet.Close 
If Not (recSet Is Nothing) Then 
    If (recSet.State And 1) = 1 Then recSet.Close 
    Set recSet.ActiveConnection = Nothing 
    Set recSet = Nothing 
End If 
+0

對我來說很好。 – 2015-01-26 23:30:51

+0

根據[MSDN](https://msdn.microsoft.com/en-us/library/windows/desktop/ms675544(v = vs.85).aspx),是的,你的論點是正確的。如果你的'stringSQL'不那麼複雜,你的'RecordSet'不是那麼大,這應該是即時的。 – L42 2015-01-26 23:35:11

+0

@ L42從不超過5000行×10列? – whytheq 2015-01-26 23:40:30

回答

3

這是一種方法,我用它來抓住從數據的MSSQLServer,也許這將是有用的,你

Sub test() 
    Dim Connection As ADODB.Connection 
    Dim rs As ADODB.Recordset 
    Dim QT As Excel.QueryTable 
    Dim ConnectionString As String 
    Dim SQL As String 
    Set Connection = New ADODB.Connection 
    Set rs = New ADODB.Recordset 

    ConnectionString = "" 
    SQL = "SELECT * FROM SomeTable" 
    Connection.Open ConnectionString 
    rs.Open SQL, Connection, adOpenStatic, adLockReadOnly 

    Set QT = ActiveSheet.QueryTables.Add(rs, ActiveSheet.Cells(1, 1)) 
    QT.Refresh: rs.Close: QT.Delete: Connection.Close 
End Sub 
+1

這很好,因爲QueryTables保留列名,與Range.CopyFromRecordset方法不同。 以下鏈接提供了將現有Excel數據複製到記錄集的方法。我知道它可能與第一個問題沒有關係,但與您的答案結合起來可以完成缺失的部分,並可以使用excel中的許多方法來處理記錄集,謝謝。 https://usefulgyaan.wordpress.com/2013/07/11/vba-trick-of-the-week-range-to-recordset-without-making-connection/ – 2016-12-06 04:10:15