为什么我看到的是缓存数据而不是更新数据?

Why am I seeing cached data instead of the updated data?

DoCmd.OpenTable之后显示的信息是数据之前的状态,不是当前状态。

CurrentDb().QueryDefs.Delete "qry_attributeData"
Set attriQryDef = CurrentDb().CreateQueryDef("qry_attributeData")
sqlStr = Replace(sqlStr, "#catReplace#", replaceVal)
attriQryDef.Connect = cxString1
attriQryDef.SQL = sqlStr
attriQryDef.Close
CurrentDb.Execute "Drop Table [tbl_attributeData]", dbFailOnError
CurrentDb.Execute "SELECT qry_attributeData.* INTO tbl_attributeData FROM qry_attributeData", dbFailOnError
DoCmd.OpenTable "tbl_attributeData"

它正在显示临时缓存数据,然后抛出错误:

Not a valid bookmark

我似乎无法在任何地方找到任何显示此问题的数据。

我遇到这些麻烦的原因是我有一个不同的属性来改变列数。

DROP table 并在事务中重新创建它。提交事务时使用 dbForceOSFlush,即 "forces the database engine to immediately flush all updates to disk"。 (参见 Workspace.CommitTrans Method

全部完成后,DoCmd.OpenTable 应该会显示新数据。

Dim wrk As DAO.Workspace
Set wrk = DBEngine(0)
wrk.BeginTrans
CurrentDb.Execute "Drop Table [tbl_attributeData]", dbFailOnError
CurrentDb.Execute "SELECT qry_attributeData.* INTO tbl_attributeData FROM qry_attributeData", dbFailOnError
wrk.CommitTrans dbForceOSFlush
wrk.Close
DoCmd.OpenTable "tbl_attributeData"
Set wrk = Nothing