VB6 + Access(ADO / JET)随机获取“磁盘或网络错误”或“无法在数据库Y上找到输入表或查询X”

时间:2013-09-04 14:46:15

标签: database ms-access vb6 ado jet

我们有一个约15年的实践管理系统。我一直在努力工作大约12年,直到最近我才遇到过这个问题,我们无法理解。

它是用VB6编写的,它使用ADO / JET访问网络上的Access .mdb文件。应用程序在启动时打开连接,在打开时保持打开状态,并在退出时关闭它。它在数据库中做了大量工作 - 系统处理患者账户,费用,付款,安排约会以及大约一百万个其他事情。我们有几十个使用这个程序的客户,每个客户都有自己的数据库,其中大多数是“异地”,他们有自己的服务器,一些工作站,1到20个用户,每天24小时在系统中冲击,每周7天,除了偶尔的DB字段错误或不得不压缩/修复DB,它非常稳定。

大约3个星期前,我们开始看到一个我们以前没见过的问题。 我们有一个“内部”系统设置供我们使用:数据库位于我们的服务器上,其中可能包含10个其他数据库,只有少数人连接到此系统。 我们开始注意到,如果有人登录系统,直接进入我们的调度程序屏幕,然后闲置大约5-10分钟,他们可能会收到“磁盘或网络错误”或“无法找到输入表或查询X”数据库Y“。

奇怪的是,只有当两个或更多人从不同的计算机登录到该数据库时才会发生这种情况,然后其中一个人会得到错误(随机?),但其他2个用户会没事。

在系统的'主'MDI Parent窗体上有一个定时器,它可以唤醒大约一分钟(有些东西会将间隔改为更短的间隔,并且有些东西会禁用定时器,但是我们认为在这种情况下不会发生其中任何一种情况)。它在数据库上执行一个非常基本的SQL查询:SELECT loggedin FROM Users WHERE UserId = 'DBUPDATER'这是SQL查询似乎总是触发其中一个错误。

当用户登录时,还会有一个大约每2分钟运行一次的计时器,以检查电子邮件以及在此期间运行的其他一些事情。 由于它们位于Scheduler屏幕上,因此每隔30s左右运行一次计时器,它会检查数据库是否有任何对调度程序的更改,以确定是否需要刷新屏幕。

还有一些其他奇怪的事情: DB和Users表似乎完全没问题。当获得错误的人登录到系统时 - 通常只提前5分钟 - 系统必须查看Users表以将其标记为已登录,并且我几乎100%确定它正在死的查询已经已经至少运行过一次 - 可能是它死前的4-5次。

一旦用户收到此错误,如果他们将Error的MessageBox留在屏幕上(不退出.exe),如果他们尝试以任何方式访问该DB文件,则会出现“磁盘或网络错误” - 这包括如果他们试图在Access中打开该数据库。但是,他们仍然可以很好地进入网络,甚至打开同样的文件夹中的其他mdb文件作为他们无法打开的文件。其他计算机上的其他人可以打开该mdb而没有任何错误。一旦用户确认错误,并允许exe关闭,他们就可以再次打开该DB文件。

我被告知这不是网络问题。我们的IT人员说他运行ping和跟踪以及各种测试以确保网络连接不会被丢弃。 我还在DB上运行了一些东西,以确保它没有损坏,看起来很好 - 我们可以在其他数据库上实现它。

如果有人见过这样的东西并且知道可能的解决办法,我将非常感谢!谢谢!

新信息(9/5/13 - 10:30 am)

我们注意到,同时我们收到此错误,在获取错误的计算机上的错误日志中显示一条警告事件:

{延迟写入失败} Windows无法保存文件\ MEDTECHSERVER \ MEDTECH DATA \ VB \ SCHEDTEST2 \ MEDTECH.MDB的所有数据;数据已丢失。该错误由文件所在的服务器返回。请尝试将此文件保存在其他位置。

0 个答案:

没有答案