MS Access的Profiler

时间:2013-03-09 21:34:07

标签: ms-access profiler sqlprofiler

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

有没有办法跟踪MSAccess中的执行时间,如SQL Profiler?

3 个答案:

答案 0 :(得分:2)

Faheem; 我从未见过这样的跟踪软件。

一种简单的“老派”方法:  在每个函数调用结束时放置一个msgBox。  一旦隔离了哪个函数的运行时间超过预期,请检查该函数。您的记录集是否使用索引字段?避免同时打开多个记录集。你是否最大限度地减少了循环的使用?你的循环是否优化?

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

使用上面列出的方法,我采用了一个大小合适的数据库仓库应用程序(主数据表中有25万条记录,40列)和简化的报告,需要一个小时才能处理到5秒钟。客户非常高兴。

答案 1 :(得分: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"

答案 2 :(得分: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

See Here

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

相关问题