VBA Excel ADODB预先载入现金数据集以更快速地查询一个大的Access数据集500000行

下午好,我有一个问题:Excel的速度从Access外部数据库中检索数据(47秒 – >我想达到3秒)Excel 2010 Access 2000

在打开的事件代码我打开我运行这个macros:

'I define connection and dataset as public Public conn As ADODB.Connection Public mrs As ADODB.Recordset Public cmd As ADODB.Command Public DBPath As String Public strConn As String Public strSQL As String Public Sub preloadDataset() Set conn = New ADODB.Connection Set mrs = New ADODB.Recordset DBPath = ThisWorkbook.Path & Application.PathSeparator & "Exported.mdb" With conn .Provider = "Microsoft.ACE.OLEDB.12.0" .ConnectionString = "Data source=" & DBPath .Open End With Set cmd = New ADODB.Command strSQL = "SELECT * FROM [Database_5000Rows] WHERE "PrNameHelp" = ? AND "ScCompHelp" LIKE ""%?%"" Set cmd.ActiveConnection = conn cmd.CommandText = strSQL cmd.CommandType = adCmdText cmd.Prepared = True 'MANUAL creation of parameters cmd.Parameters.Append cmd.CreateParameter("PrNameHelp", adLongVarChar, adParamInput) cmd.Parameters.Append cmd.CreateParameter("ScCompHelp", adLongVarChar, adParamInput) End sub 

主要macros观:

 Public Sub ADO_retrieve_Ext_file() cmd("PrNameHelp") = str01 cmd("ScCompHelp") = str02 cmd.Execute Application.Calculation = xlCalculationManual Sheet1.Range("A1").CopyFromRecordset mrs Application.Calculation = xlCalculationAutomatic End sub 

在结束事件中:

 Private Sub Workbook_BeforeClose(Cancel As Boolean) '********************** ''Close Recordset mrs.Close ''Close Connection conn.Close Set mrs = Nothing Set Conn = Nothing '********************** End sub 

我怎样才能定义参数照顾SQL正确的string为Access? 是使用参数的正确方法,还是最好在RAM中上传整个数据库?

谢谢Enrico

将数据复制到工作表时,请尽量避免更新,直到完成。 使用:

 Application.ScreenUpdating = False 

 Application.ScreenUpdating = true