我有四个make table查询需要按特定顺序和每日时间表运行。我尝试创建一个宏,它将按顺序打开它们,但它需要人工交互退出警告,它无法转到第二个查询。有什么想法吗?
答案 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
到您的宏?不是最干净的做事方式,但它会完成工作。