我有一个用sql server支持的MSAccess .mdb文件。 当我尝试打开表单时,显示需要很长时间 我知道我在Form的加载事件中有东西。
有没有办法跟踪MSAccess中的执行时间,如SQL Profiler?
答案 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
另外,请检查您的表单设计。是否有很多子表格/主/子链接?有多少聚合?等