Как измерить время запроса для нескольких запросов, выполняемых в функции VBA в Microsoft Access? - PullRequest
0 голосов
/ 28 января 2019

Я выполняю группу запросов в функции в 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 голосов
/ 28 января 2019

Как часть макроса, вы можете создать 2 вставки в таблицу журнала.первый, когда начинается, и второй, когда он заканчивается.

Другой вариант - создать функцию в VBA и сделать то же самое.откройте таблицу и войдите.

Надеюсь, это поможет.

0 голосов
/ 28 января 2019

Просто создайте такую ​​таблицу, query_log с полями для query_name (краткий текст) и start_datetime (дата / время).Затем создайте запрос на добавление для запуска перед каждым запросом.Используйте параметризацию для передачи соответствующих значений:

SQL (сохранить ниже как объект запроса с использованием значения по умолчанию 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

Или подход 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
0 голосов
/ 28 января 2019

Боюсь, что вы должны сделать это вручную.Вставьте строку кода до и после каждого макроса, регистрируя метку времени.В отличие от SQL Server, в MS Access не так много автоматизации.Единственный интерфейс автоматизации - это VBA.

Вы можете создать функцию регистрации временной метки, а затем использовать эту функцию в каждом макросе в качестве первого и последнего шага макроса.

...