2017-03-27 38 views
0

私は、45k行と48列のデータを取り出すADODB接続を持っています。クエリは1秒未満で実行されますが、copyformrecordset行は実行に15分以上かかります。それはなぜそんなに遅いのですか?ADODBペースト非常に遅い

更新:Connection.CursorLocation = adUseClientを追加すると、遅延がレコードセットのオープンラインに移動し、copyfromrecordsetがほぼ即時になります。それがまだ15分かかっている理由を絞り込むのに役立つかどうかはわかりません。私は他の人がわずか数秒で60k +行を投稿しているのを見ました。

Sub HarvestData() 

Application.ScreenUpdating = False 

    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 Rs1 = New ADODB.Recordset 

'Making the call to the database 
    ConnectionString = Myconnectionstringishere 

'The query that is being pulled 
    SQL = Sheets("SQL").Range("B13").Value 

'This is executing the SQL query 
    Connection.Open ConnectionString 
    Rs1.Open SQL, Connection, adOpenForwardOnly, adLockReadOnly 

'This is defining a location for the data to be pasted 
    Set Location = ActiveWorkbook.Sheets("Sheet1") 

'This is pasting the data 
    Location.Range("b2").CopyFromRecordset Rs1 

'These are closing the connections I opened 
    Rs1.Close 
    Connection.Close 
Application.ScreenUpdating = True 

End Sub 
+0

'Cells.NumberFormat =" @ "' – omegastripes

+0

のようにターゲットセルをテキストとして最初にフォーマットしてみてください。 – Katie

+0

は実際には1秒で実行されるクエリですか、それとも最初のレコードを返すだけの時間ですか?あなたがEOFを打つまでレコードセットをループすれば、どれくらいかかるのですか?これはローカルのデータソースですか? –

答えて

0

私はあなたのSQLクエリが何であるかを伝えることはできませんが、私は私のペーストコマンドとしてこれを使用して...

With ActiveSheet.Cells(2, 2)    
    rec_QTY = .CopyFromRecordset(Rs1) 
End With 

私は、データベースレコードの数が多いに手を出す...と、このコマンドがあります通常かなり速い。 セル(2,2)は範囲( "B2")と同じです

+0

コード内でrec_QTYとは何ですか? – Katie

+0

rec_QTYは、変数であり、コード内の上記の文の前後には定義されていません。 (2、2) rec_QTY = .CopyFromRecordset(Rs1) End With –

+0

ありがとう、しかし運がありません。 – Katie