【问题标题】:Vba Excel ADODB pre-load in cash dataset to query faster a big Access dataset 500000 rowsVba Excel ADODB 预加载现金数据集以更快地查询大型 Access 数据集 500000 行
【发布时间】:2015-05-25 15:47:20
【问题描述】:

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

在我打开的开幕活动中的代码我运行这个宏:

'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

主宏:

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

如何为 Access 定义处理 SQL 正确字符串的参数? 是使用参数的正确方法还是将整个数据库上传到RAM中更好?

谢谢 恩里科

【问题讨论】:

  • 您还可以通过在Code Review 上发帖获得有关此主题的一些好的、集中的帮助。
  • 虽然您已经就您的问题提供了很好的细节,但这个主题是如此广泛,以至于我首先想知道的是您使用的是 SSD 还是主轴驱动器,问题只会从那里成倍增加。
  • 不使用固态硬盘
  • 您需要只检索表格中的一行、仅几行、大部分行还是所有行?
  • 您能否发布您用于该过程的所有代码

标签: sql excel vba ms-access adodb


【解决方案1】:

将数据复制到工作表时,请尽量避免在完成之前对其进行更新。使用:

Application.ScreenUpdating = False 

Application.ScreenUpdating = true

【讨论】:

  • 已解决:以编程方式索引 Access 中表的第一列:已达到 6 秒
【解决方案2】:

已解决:在 Access 中以编程方式索引表的第一列

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-26
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    相关资源
    最近更新 更多