首页 > 解决方案 > 如何测量在 Microsoft Access 的 VBA 函数中运行的多个查询的查询时间?

问题描述

我在 Microsoft Access 的一个函数中运行一组查询,并希望在每个单独的查询开始时创建一个时间戳。

我想记录每个查询开始的日期、小时和分钟。

有谁知道这样做的好方法?

例如,我运行查询的函数如下所示:

Function RunAllQueriesNow()

    DoCmd.SetWarnings False
    DoCmd.OpenQuery "Query 1"
    DoCmd.OpenQuery "Query 2"
    DoCmd.OpenQuery "Query 3"
    DoCmd.OpenQuery "Query 4"
    DoCmd.OpenQuery "Query 5"
    DoCmd.SetWarnings True

End Function

标签: sqlfunctionms-accessvbatimestamp

解决方案


只需创建这样一个表query_log,其中包含query_name(短文本)和start_datetime(日期/时间)字段。然后,创建一个附加查询以在每个查询之前运行。使用参数化传递相应的值:

SQL (使用 default 保存为查询对象Now(),假设创建了 query_log)

PARAMETERS Q_Param Text(255);
INSERT INTO query_log(query_name, start_datetime)
VALUES (Q_Param, Now());

VBA (运行每个查询,然后通过参数化执行上面的操作查询)

Function RunAllQueriesNow()
    Dim qdef As QueryDef

    Set qdef = CurrentDb.QueryDefs("mySavedQuery")

    DoCmd.SetWarnings False    
       qdef!Q_Param = "Query 1"         ' BIND PARAM
       qdef.Execute dbFailOnError       ' LOG START
       DoCmd.OpenQuery "Query 1"        ' RUN QUERY

       qdef!Q_Param = "Query 2"
       qdef.Execute dbFailOnError
       DoCmd.OpenQuery "Query 2"

       qdef!Q_Param = "Query 3"
       qdef.Execute dbFailOnError
       DoCmd.OpenQuery "Query 3"

       qdef!Q_Param = "Query 4"
       qdef.Execute dbFailOnError
       DoCmd.OpenQuery "Query 4"

       qdef!Q_Param = "Query 5"
       qdef.Execute dbFailOnError
       DoCmd.OpenQuery "Query 5"    
    DoCmd.SetWarnings True

    Set qdef = Nothing
End Function

或干燥的方法:

Function RunAllQueriesNow()
    Dim qry As Var
    Dim qdef As QueryDef

    Set qdef = CurrentDb.QueryDefs("mySavedQuery")

    DoCmd.SetWarnings False

    For Each qry in Array("Query 1", "Query 2", "Query 3", "Query 4", "Query 5")
       qdef!Q_Param = qry                    ' BIND PARAM
       qdef.Execute dbFailOnError            ' LOG START

       DoCmd.OpenQuery qry                   ' RUN QUERY    
    Next qry

    DoCmd.SetWarnings True
    Set qdef = Nothing
End Function

推荐阅读