【问题标题】:Profiler for MSAccessMSAccess 分析器
【发布时间】:2013-03-09 21:34:07
【问题描述】:

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

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

【问题讨论】:

    标签: ms-access profiler sql-server-profiler


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      我真的不明白你所说的“我知道我在表单的加载事件上有东西”是什么意思。您不能检查附加到您的表单的宏/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"
      

      【讨论】:

      • 感谢您的链接和代码。很好。实际上,我需要一个软件,它可以在 MSAccess 中运行时跟踪每个语句/查询/命令。在 sql server 中,我们可以在 Sql Profiler 中查看每个细节。它从头到尾显示了事物的完整细节。
      • 既然您已连接到 SQL Server,请运行分析器,它将显示对 SQL Server 的每个查询/回复。
      【解决方案3】:
      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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-07
        • 2014-10-07
        • 2023-03-25
        • 2010-11-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多