在没有人工交互的时间表上运行4个表查询

时间:2009-12-10 19:00:18

标签: ms-access

我有四个make table查询需要按特定顺序和每日时间表运行。我尝试创建一个宏,它将按顺序打开它们,但它需要人工交互退出警告,它无法转到第二个查询。有什么想法吗?

4 个答案:

答案 0 :(得分:1)

不要运行make table。将表保留在那里,但只需使用删除查询清除记录。

另请参阅我网站上的TempTables.MDB页面,该页面说明了如何在您的应用中使用临时MDB。这可以避免膨胀数据库文件。

答案 1 :(得分:0)

我建议您使用一些代码并执行。引用ms-access - how to automatically select yes in warning message boxes


在这种情况下,通常最好使用Execute来捕获错误:

Dim db As Database, qdf As QueryDef, strSQL As String

Set db = CurrentDb
Set qdf = db.QueryDefs("Query17")
qdf.Execute dbFailOnError
Debug.Print qdf.RecordsAffected

或者

strSQL="UPDATE SomeTable SET SomeField=10"
db.Execute strSQL, dbFailOnError
Debug.Print db.RecordsAffected

使用dbFailOnError捕获错误和错误陷阱或多或少是必不可少的,Execute Statement

还有许多其他有用的方面

答案 2 :(得分:0)

我同意Tony Toews的说法,你应该避免使用MakeTable。当我第一次使用Access时,我会使用MakeTable查询来更新表中的数据。我很快发现这是一种非常不稳定的做事方式。

我建议您将MakeTable查询转换为追加查询,并为每个删除原始表中每个项目的表单独创建“删除查询”(我还创建了一个“通用”删除查询使用相应的方法传递,该方法接受表名,然后在通用删除方法中重写SQL以匹配该表。但是,创建单独的删除查询可能更容易。)

然后我可能会编写一个程序来progamatically执行查询。我很确定下面的代码应该可行(尽管我通常使用DAO并为db(currentDb)和qdf(查询def)创建局部变量,在本例中我只需从CurrentDb()运行它,我相信它会起作用。

Sub UpdateMyTables()
    'Turn Warnings Off              '
    DoCmd.SetWarnings False

    'Wipe Data from Tables        '
    CurrentDb().QueryDefs("qryDelete Table1").Execute
    CurrentDb().QueryDefs("qryDelete Table2").Execute

    'Update the tables with the new data from append       '
    CurrentDb().QueryDefs("qryAppend Table1").Execute
    CurrentDb().QueryDefs("qryAppend Table2").Execute

    'Turn Warnings back On        '
    DoCmd.SetWarnings True
End Sub

答案 3 :(得分:-1)

首先想到:你试过添加

吗?
On Error Resume Next

到您的宏?不是最干净的做事方式,但它会完成工作。