如何程序测试数据库是否已被破坏??

Sean918 2002-04-11 01:16:24
我的程序在长时间运行时多次插入了数据库操作,但是对于突然断电的情况时常有数据库被破坏的情况。我在程序开始运行时加入了打开数据库操作(只打开,不做操作),在数据库破坏的情况下,有时能发现出错,这个时候我可以做出错处理,但是有时候却不报错,直到运行一断时间后才报错。

请问各位高手,提供方案!
...全文
7 点赞 收藏 15
写回复
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sean918 2002-04-11
谢谢~

给分了。
回复
gump2000 2002-04-11
gump2000@21cn.com
回复
Sean918 2002-04-11
十分感谢您!能否留下您确实的联系方法,以后有事可以经常请教您。
再次感谢!
回复
gump2000 2002-04-11
能,只要不是人为的破坏,绝对可以
一般程序操作,都会出现一点点小问题的
比如异常终止啊,这个程序就可以修复
回复
Sean918 2002-04-11
呵呵。。
真是麻烦您了。

这样的压缩和修复能达到我的“检测数据库是否已经破坏”的目的么?
我要肯定的回答,如果存在可能无法检测的情况,就没有实际意义了。

谢谢
回复
gump2000 2002-04-11
DBEngine.CompactDatabase 压缩和修复数据库
$tmp$.mdb是临时数据库
回复
Sean918 2002-04-11
再请问2个小问题:
1. 在database 目录下 $tmp$.mdb 是什么东西?
2.您的sub 的作用和删除db然后重建有什么区别吗?
回复
gump2000 2002-04-11
那是我的程序中弄出来的,另外一个是用来备份数据的。

Public Function SYSDATABASE() As String
SYSDATABASE = App.Path & "\Database\my.mdb"
End Function
假设您的数据库放在程序的database下的my.mdb

Public Sub RepairDataBase()

Dim TmpData As String

TmpData = App.Path & "\DataBase\$tmp$.mdb"

If FileExists(TmpData) Then Kill TmpData

DBEngine.CompactDatabase SYSDATABASE, TmpData
Kill SYSDATABASE
Name TmpData As SYSDATABASE

End Sub

就这样
回复
Sean918 2002-04-11
不好意思,我不明白您的sgxg.dat和backup.dat有什么用?
我只有一个tmp.mdb ,但是看您的代码:
If FileExists(TmpData) Then Kill TmpData
已经将我唯一的数据库删除了,我的database文件夹里已经没有东西可操作了

我是初学vb,所以还是不明白? 麻烦您详细解释,不甚感激。
回复
gump2000 2002-04-11
给你看看定义
'数据库位置
Public Function SYSDATABASE() As String
SYSDATABASE = App.Path & "\Database\sgxg.dat"
End Function

Public Function BACKDATABASE() As String
BACKDATABASE = App.Path & "\Database\backup.dat"
End Function

其实就是您的数据库存放位置,明白?
回复
Sean918 2002-04-11
两个都是路径?
不会吧
回复
gump2000 2002-04-11
呵呵,这个是我自己用的
backdatabase和sysdatabase就是数据库的存放路径
databasepwd就是您的数据库密码
假如没有的话
就去掉后面的, , , ";pwd=" & DataBasePWD
回复
Sean918 2002-04-11
还有BACKDATABASE!
回复
Sean918 2002-04-11
SYSDATABASE 是什么数据类型阿?

要详细说明!拜托!!
回复
gump2000 2002-04-11
不管他,启动就压缩修复一下
'修复压缩数据库
Public Sub RepairDataBase()

Dim TmpData As String

TmpData = App.Path & "\DataBase\tmp.mdb"

If FileExists(TmpData) Then Kill TmpData

DBEngine.CompactDatabase SYSDATABASE, TmpData, , , ";pwd=" & DataBasePWD
Kill SYSDATABASE
Name TmpData As SYSDATABASE

If FileExists(TmpData) Then Kill TmpData

DBEngine.CompactDatabase BACKDATABASE, TmpData, , , ";pwd=" & DataBasePWD
Kill BACKDATABASE
Name TmpData As BACKDATABASE
End Sub

再有问题就可以报警无法解决了
回复
发动态
发帖子

1180

社区成员

VB 数据库(包含打印,安装,报表)
申请成为版主
社区公告
暂无公告