如何衡量在Microsoft Access的VBA函数中运行的多个查询的查询时间?

时间:2019-01-28 18:07:21

标签: sql function ms-access access-vba timestamp

我正在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

3 个答案:

答案 0 :(得分:1)

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

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

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

或采用DRY-er方法:

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

答案 1 :(得分:0)

恐怕您必须手动执行此操作。在每个宏之前和之后插入一行代码,记录时间戳。与SQL Server不同,可以添加到MS Access的自动化很少。唯一的自动化接口是VBA。

您可以创建一个记录时间戳的功能,然后在每个宏中使用该功能作为第一步和最后一步。

答案 2 :(得分:0)

作为宏的一部分,您可以在日志表中创建2个插入。第一个开始,第二个结束。

另一个选择是在VBA中创建一个函数并执行相同的操作。打开表并记录日志。

希望有帮助。