2015-01-26 2 views
1

SQL의 테이블을 Excel로 옮깁니다.
데이터를 가져 와서 워크 시트에 붙여 넣기 위해서만 레코드 세트를 이동할 필요가 없습니다.SQL Server에서 Excel로 붙여 넣기 테이블을 복사하는 가장 빠른 ADO

레코드 집합의 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

나에게 좋아 보인다 위해 유용 할 것이다. –

+0

[MSDN] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms675544(v=vs.85) .aspx)에 따르면 인수가 정확합니다. 'stringSQL'이 그렇게 복잡하지 않고'RecordSet'이 그렇게 크지 않다면, 이것은 즉시되어야합니다. – L42

+0

@ L42 결코 5 천분의 5 행 × 10 열? – whytheq

답변

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/ –

관련 문제