我有一个支持 sql server 的 MSAccess .mdb 文件。当我试图打开一个表单时,需要很长时间才能显示我知道我在表单的加载事件上有东西。
有没有办法像 SQL Profiler 一样跟踪 MSAccess 中的执行时间?
我有一个支持 sql server 的 MSAccess .mdb 文件。当我试图打开一个表单时,需要很长时间才能显示我知道我在表单的加载事件上有东西。
有没有办法像 SQL Profiler 一样跟踪 MSAccess 中的执行时间?
法希姆;我从来没有见过这样的跟踪软件。
一个简单的“老派”方法:在每个函数调用的末尾放置一个 msgBox。一旦你确定了哪个函数的运行时间比预期的要长,请检查该函数。您的记录集是否使用索引字段?避免同时打开多个记录集。你是否尽量减少循环的使用?你的循环优化了吗?
要检查的另一件事是使用 Access 宏来计算聚合(总和、平均值)。这会导致 Access 重复运行单个查询。如果您遇到的情况是处理超过 100,000 条记录和 2 打列,则 Access 宏将触发 2 打(每列一次)。
使用上面概述的方法,我采用了一个大型 DB Warehouse 应用程序(主数据表中的 25 万条记录,40 列)并简化了报告,需要一个小时来处理到 5 秒。客户非常高兴。
我真的不知道您所说的“我知道我在表单的加载事件上有东西”是什么意思。您不能检查附加到您的表单的宏/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"
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
另外,检查您的表单设计。是否有很多子表单/主/子链接?有多少聚合?等等。