首次运行后访问VBA速度很慢

时间:2015-01-20 09:10:45

标签: performance vba ms-access access-vba

我有一个普遍的问题。我认为这与代码无关。 我有一个使用表单,SQL和VBA的小型访问程序。

VBA主要计算非常简单的东西,但是有很多数据和一些SQL运行。我有一个状态栏,我可以看到"完成百分比"。 我通过清除所有表来启动脚本,然后运行所有查询以确保它们为空。 然后我浏览数据。它运作良好。 大约需要2分钟。

然后我再做一次。 但现在需要10分钟。对于相同的程序。

如果我重新开始访问,第一次需要2分钟,之后需要10分钟。

当我重新开始访问时,表仍然填充。所以不是因为它们是空的。

是否有命令清除所有内存或可能需要的内容?

有什么建议吗?

运行速度慢10倍的代码:

For counter = 1 To n_bins
    Application.Echo False

    DoCmd.OpenQuery "q_PowerBinned"
    If DCount("*", "q_PowerBinned") = 0 Then
        DoCmd.OpenQuery "q_000"
        DoCmd.RunSQL "DELETE * FROM q_000"
        DoCmd.Close
        strTMP = (counter - 1) * [Forms]![f_main]![PowerBinCombo] & " - " & counter * [Forms]![f_main]![PowerBinCombo] & " kW"
        strSQL = "INSERT INTO q_000 (Bin, Zero1, Zero2, Zero3, Zero4, Zero5) VALUES ('" & strTMP & "','0','0','0','0','0');"
        DoCmd.RunSQL strSQL
        DoCmd.OpenQuery "q_Move000"
        DoCmd.Close
    Else
        DoCmd.Close
    End If

    DoCmd.OpenQuery "q_Average_Temp"
    DoCmd.Close
    DoCmd.OpenQuery "q_MoveAverage"

    DoCmd.OpenQuery "q_PowerBinned_VG"
    If DCount("*", "q_PowerBinned_VG") = 0 Then
        DoCmd.OpenQuery "q_000_VG"
        DoCmd.RunSQL "DELETE * FROM q_000_VG"
        DoCmd.Close
        strTMP = (counter - 1) * [Forms]![f_main]![PowerBinCombo] & " - " & counter * [Forms]![f_main]![PowerBinCombo] & " kW"
        strSQL = "INSERT INTO q_000_VG (Bin, Zero1, Zero2, Zero3, Zero4, Zero5) VALUES ('" & strTMP & "','0','0','0','0','0');"
        DoCmd.RunSQL strSQL
        DoCmd.OpenQuery "q_Move000_VG"
        DoCmd.Close
    Else
        DoCmd.Close
    End If

    DoCmd.OpenQuery "q_Average_Temp_VG"
    DoCmd.Close
    DoCmd.OpenQuery "q_MoveAverage_VG"
    Application.Echo True

    ' Theoretical of Measured Power Curve

    Percentage = ((counter) / (n_bins)) * 100
    strStatus = "Binned " & Percentage & " %"

    Call dsp_progress_AfterUpdate
    Me.Refresh
    dsp_progress.SetFocus
    dsp_progress.SelStart = 0
    dsp_progress.SelLength = 0
    DoEvents
Next counter

1 个答案:

答案 0 :(得分:1)

我的一个访问数据库会发生这种情况。我发现如果在清空适当的表后执行compact & repair,则vba运行时将再次返回到短时间。不是我必须承认的最优雅的解决方案。