Я нашел этот код в Интернете для запроса Access и ввода данных в Excel (2003), но он намного медленнее, чем должен быть:
Sub DataPull(SQLQuery, CellPaste)
Dim Con As New ADODB.Connection
Dim RST As New ADODB.Recordset
Dim DBlocation As String, DBName As String
Dim ContractingQuery As String
If SQLQuery = "" Then
Else
DBName = Range("DBName")
If Right(DBName, 4) <> ".mdb" Then DBName = DBName + ".mdb"
DBlocation = ActiveWorkbook.Path
If Right(DBlocation, 1) <> "\" Then DBlocation = DBlocation + "\"
Con.ConnectionString = DBlocation + DBName
Con.Provider = "Microsoft.Jet.OLEDB.4.0"
Con.Open
Set RST = Con.Execute(SQLQuery)
Range(CellPaste).CopyFromRecordset RST
Con.Close
End If
End Sub
Проблема в том, что этот код занимает очень много времени. Если я открою Access и просто запущу там запрос, это займет примерно 1/10 времени. Есть ли способ ускорить это? Или по какой-то причине это может занять так много времени? Все мои запросы представляют собой простые запросы на выборку с простыми операторами where и без объединений. Даже запрос select * from [test]
занимает гораздо больше времени, чем следовало бы.
РЕДАКТИРОВАТЬ: я должен указать, что строка
Range(CellPaste).CopyFromRecordset RST
был тот, который занимал много времени.
CopyFromRecorset
. Кроме того, вам следует серьезно подумать о том, чтобы переименовать эту ветку и удалить все ненужное из вашего сообщения. Доступ явно к проблеме не имеет никакого отношения, ИМХО. - person Ryan Shannon   schedule 16.10.2009