2

我有一个支持 sql server 的 MSAccess .mdb 文件。当我试图打开一个表单时,需要很长时间才能显示我知道我在表单的加载事件上有东西。

有没有办法像 SQL Profiler 一样跟踪 MSAccess 中的执行时间?

4

3 回答 3

2

法希姆;我从来没有见过这样的跟踪软件。

一个简单的“老派”方法:在每个函数调用的末尾放置一个 msgBox。一旦你确定了哪个函数的运行时间比预期的要长,请检查该函数。您的记录集是否使用索引字段?避免同时打开多个记录集。你是否尽量减少循环的使用?你的循环优化了吗?

要检查的另一件事是使用 Access 宏来计算聚合(总和、平均值)。这会导致 Access 重复运行单个查询。如果您遇到的情况是处理超过 100,000 条记录和 2 打列,则 Access 宏将触发 2 打(每列一次)。

使用上面概述的方法,我采用了一个大型 DB Warehouse 应用程序(主数据表中的 25 万条记录,40 列)并简化了报告,需要一个小时来处理到 5 秒。客户非常高兴。

于 2014-02-06T15:01:47.310 回答
0

我真的不知道您所说的“我知道我在表单的加载事件上有东西”是什么意思。您不能检查附加到您的表单的宏/VBA 吗?你在负载上做什么?

  • 您的表单中有多个子表单吗?在使用具有多个子表单的表单时,我经历了很长的打开/加载时间。尤其是当子表单从非常大的记录源中提取一小部分数据时。

检查此链接: http ://bytes.com/topic/access/answers/204374-timer-function-determining-code-execution-speed

Dim sngStart As Single
Dim sngEnd As Single
Dim sngElapsed As Single
Dim time As Single

sngStart = Timer ' Get start time


'your code here

sngEnd = Timer 'get stop time
sngElapsed = sngEnd - sngStart

time = Format(sngElapsed, "######0.0000000000")
MsgBox "Time elapsed: " & time, vbInformation, "Time Elapsed"
于 2013-03-11T19:40:06.350 回答
0
Option Compare Database
Option Explicit

Private Declare Function timeGetTime _
Lib "winmm.dll" () As Long
Private mlngStartTime As Long

Private Function ElapsedTime() As Long
ElapsedTime = timeGetTime() - mlngStartTime
End Function

Private Sub StartTime()
mlngStartTime = timeGetTime()
End Sub

Public Function MyTest()

Call StartTime
DoCmd.OpenQuery "Query1"
DoCmd.GoToRecord acDataQuery, "Query1", acLast

Debug.Print ElapsedTime() & _

Call StartTime
DoCmd.OpenQuery "Query2"
DoCmd.GoToRecord acDataQuery, "Query2", acLast

Debug.Print ElapsedTime() & _
End Function

看这里

另外,检查您的表单设计。是否有很多子表单/主/子链接?有多少聚合?等等。

于 2014-02-28T21:32:50.420 回答