当前位置:  开发笔记 > 后端 > 正文

当我从另一个进程读取时,为什么我的Access数据库不是最新的?

如何解决《当我从另一个进程读取时,为什么我的Access数据库不是最新的?》经验,为你挑选了1个好方法。

在我的应用程序中,我做了以下事情:

    使用Jet/ADO和VB6打开Access数据库(.mdb)

    使用新数据清除并重新填充表格

    关闭数据库

    启动另一个处理新数据的进程.

问题是有时第二个进程无法找到新数据.有时表只是空的,有时RecordCount> 0,但EOF是真的,我不能做MoveFirst或MoveNext.简而言之:各种奇怪的事物.

我目前的解决方法是在关闭数据库和启动第二个进程之间添加延迟.

这里发生了什么?

我能为此做些什么吗?(除了使用不同的数据库)

onedaywhen.. 7

只是一个猜测,但我可能是由于Jet引擎具有读取缓存和惰性写入的事实:

如何在Jet 4.0和ADO 2.1中实现多用户自定义计数器

"Microsoft Jet有一个读取缓存,每隔PageTimeout毫秒更新一次(默认为5000毫秒= 5秒).它还有一个惰性写入机制,它在与主处理的单独线程上运行,从而异步地将更改写入磁盘.机制有助于提升性能,但在某些需要高并发性的情况下,它们可能会产生问题."

本文建议使用Jet的RefreshCache方法并将Jet OLEDB:事务提交模式设置为1毫秒(对于Jet,ADO优于DAO的一个优点是您可以在不更改注册表中的值的情况下更改此设置).

PS你应该考虑编辑Access数据库(.mdb)来提及'Jet'而不是使用'Jet'标签,否则你会得到某个SO用户的评论,这些用户对这些事情是不诚实的:)



1> onedaywhen..:

只是一个猜测,但我可能是由于Jet引擎具有读取缓存和惰性写入的事实:

如何在Jet 4.0和ADO 2.1中实现多用户自定义计数器

"Microsoft Jet有一个读取缓存,每隔PageTimeout毫秒更新一次(默认为5000毫秒= 5秒).它还有一个惰性写入机制,它在与主处理的单独线程上运行,从而异步地将更改写入磁盘.机制有助于提升性能,但在某些需要高并发性的情况下,它们可能会产生问题."

本文建议使用Jet的RefreshCache方法并将Jet OLEDB:事务提交模式设置为1毫秒(对于Jet,ADO优于DAO的一个优点是您可以在不更改注册表中的值的情况下更改此设置).

PS你应该考虑编辑Access数据库(.mdb)来提及'Jet'而不是使用'Jet'标签,否则你会得到某个SO用户的评论,这些用户对这些事情是不诚实的:)

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有