sql - 如何测量在 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
解决方案
只需创建这样一个表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
推荐阅读
- c++ - 使用构造函数与大括号初始化列表来初始化类和结构的规则是什么?
- javascript - 在捕获组前面插入 $
- oracle-adf - 我想修剪通过 RichInputText 获得的字符串。这怎么能在 bean 中完成?
- c# - 从另一个脚本访问数组元素时出现 NullReferenceException
- python - 将 xml doc 转换为特定的点扩展 json 结构
- python - 正则表达式与切片之间的python速度差异?
- php - 如何将数组转换为此 json 模式?
- javascript - 如何修复不同屏幕尺寸的 HTML 画布元素及其坐标?
- python - 如何修复西班牙语字母的python脚本中的编码问题
- asp.net - 如何在单个验证控件上实现多个验证组的效果?