VB操作ACCESS数据库遇到损坏后怎么修复?

yrc 2000-06-28 09:38:00
我在VB编程中用的数据库是ACCESS97,但经常遇到数据库损坏现象,有时可以用ACCESS修复, 有时却不能(如遇到数据格式不对时),主要是库中的某一个表打不开,请教高手此时怎么修复?
...全文
447 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluewater 2000-07-09
  • 打赏
  • 举报
回复
ActiveX Data Objects (ADO), version 2.1
Microsoft OLE DB Provider for Jet, version 4.0

這是 Microsoft 提出的 ADO 的延伸功能:Microsoft Jet OLE DB Provider and Replication Objects (JRO)

这个功能在 JET OLE DB Provider version 4.0 (Msjetoledb40.dll) 及 JRO version 2.1 (Msjro.dll) 中第一次被提出!
這些必要的 DLL 文件在您安裝了 MDAC 2.1 之后就有了,您可以在以下的网页中下载 MDAC 的最新版本!

Universal Data Access Web Site

在下载之前先到 VB6 中檢查一下,【控件】【設定引用項目】中的 Microsoft Jet and Replication Objects X.X library 如果已经是 2.1 以上的版本,您就可以不用下载了!

在您安裝了 MDAC 2.1 或以上的版本之后,您就可以使用 ADO 來压缩或修复 Microsoft Access 文件,下面的步骤告訴您如何使用 CompactDatabase Method 來压缩 Microsoft Access 文件:

1、新建一個新表单,选择功能表中的【控件】【設定引用項目】。
2、加入 Microsoft Jet and Replication Objects X.X library,其中 ( X.X 大于或等于 2.1 )。
3、在适当的地方加入以下的程序代码,記得要修改 data source 的內容及目地文件的路径:

Dim jro As jro.JetEngine
Set jro = New jro.JetEngine
jro.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\nwind2.mdb", _ '來源文件
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\abbc2.mdb;Jet OLEDB:Engine Type=4" '目的文件

在 DAO 3.60 之后,RepairDatabase Method 已经无法使用了,以上的程序代码显示了 ADO CompactDatabase Method 的用法,而它也取代了 DAO 3.5 時的 RepairDatabase method!
Aspire 2000-07-04
  • 打赏
  • 举报
回复
Liyang:
我现在已经采取了以下措施:1、全部重新压接RJ45头;2、更换所有的网卡为D-Link 10M;3、我发现用户传回频繁损坏的表大多数为“一对多”的从表(多表),而该从表我定义了有重复的索引,其它从表我均未设索引。
使用Access97是无法打开该损坏的表的,但是使用VB6的Visual Database可视数据设计器仍然可以查看该表的结构信息,只是显示索引信息坏。我估计是网络质量的问题导致该索引频繁损坏,因此,我把从表的索引删除了。
无意中浏览到某个财务软件的使用说明(好象是安易),也同金蝶一样有相同的提示。
谢谢! Aspire
liyang 2000-07-03
  • 打赏
  • 举报
回复
ASpire:
我也这样认为。1.网络质量不好,导致读写数据有问题,特别当写Primary Key时,容易导致数据库损坏。这一点,你可以加一下事务处理(BeginTransction,RollBaek,CommitTrans)2.用户操作不当。由于是95对等网,数据库不是在服务器上,当一个用户读、写数据库时,数据库所在机子被另一用户关了。金蝶财务软件在95网上时,用户经常不注意关机,就会导致数据库损坏。
无言无忌 2000-07-01
  • 打赏
  • 举报
回复
我想你最好整理一下存放数据库的硬盘,必要时换个新的。
Aspire 2000-06-30
  • 打赏
  • 举报
回复
兄弟:
我正在检查源程序,编辑和新增时,全部都有校验。是否Database.Exicute ("SQL/Insert/UpDate ...")时,无法由程序自己控制出错,而只能由Jet控制?Jet引擎自身也有错误保护的。

netpower 2000-06-30
  • 打赏
  • 举报
回复
在输入时多加出错保护!
1 输入为空时的保护
2 输入不合法时的保护
3 不正常退出时的保护
这样会减少数据库的损坏!
liyang 2000-06-30
  • 打赏
  • 举报
回复
这样看来,应该是放在网上共享的问题。你的Access版本?以及你在程序中采用的游标位置(Client端还是Server端),还有你的读取方式(Forwardonly,Dynamic,Static)等,另,会不会有几个人同时访问同一条纪录?
yrc 2000-06-30
  • 打赏
  • 举报
回复
Aspire:
我的数据库主要是放在网上通过共享访问的,是否与网络有关?
避免损坏目前我采取的办法就是定时备份(每四小时),可有时又会出现备份库也是坏的情况。造成数据无法恢复,真惨!
Aspire 2000-06-30
  • 打赏
  • 举报
回复
Liyang & Yrc:
我的情况是:VB6+Dao+Access97/MDB,WIn98对等网共享,多用户操作。读写方式
数据库采用动态数据集(DynaSet)。全部是SQl操作的。
但是,该管理系统在其他地方同样使用一年多均未见有故障,只有外地一个用户频繁出现数据库损坏。我快被他逼疯了!
因此,在排除了病毒原因后,我初步判断为:1、网络线路时断时续;2、网卡质量差,工作不稳定,导致发送的网络信息包出错(该用户网卡为TopStar 10M/PCI)。
网络质量造成的可能性较大,不知道大家同意否?
ASpire

Aspire 2000-06-29
  • 打赏
  • 举报
回复
我最近也遇到这个问题,数据库频繁损坏。临时的修复主要采取的方法是:
打开备份数据库,删除其他表,仅保留与打不开的表同名的表,然后把损坏库
的完好的数据表全部导入。
没有其他更好的办法了。

同病相连,不过我更希望与你讨论发生的原因和避免损坏的方法。
forest 2000-06-29
  • 打赏
  • 举报
回复
我也觉得你应该设法找到损坏原因。在程序中改变了记录的主关键字也可能造成数据库损坏。
liyang 2000-06-29
  • 打赏
  • 举报
回复
这种情况下修复很困难。你要直接以二进制方式打开mdb,再根据结构分析。太困难。
我觉得你倒是应该找一找损坏的原因才对。mdb虽然不是很好,可是也不是那么容易坏。经常损坏肯定有原因。例如:数据库在网络上啦、程序打开数据库不关啦、等等
zzj_mjz 2000-06-28
  • 打赏
  • 举报
回复
有种情况,ACCESS修复不了,但用VB的程序还能读出数据,可把表导出.

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧