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

时间:2015-06-26 14:58:44

标签: vba ms-access access-vba ms-access-2010

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"

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

  

不是有效书签

我似乎找不到任何显示此问题的数据。

我遇到所有这些麻烦的原因是我有不同的属性可以改变列数。

1 个答案:

答案 0 :(得分:1)

DROP表并在事务中重新创建它。提交事务时使用 dbForceOSFlush "强制数据库引擎立即刷新磁盘的所有更新" 。 (见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