我正在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
答案 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中创建一个函数并执行相同的操作。打开表并记录日志。
希望有帮助。