恢复数据库出错,折腾了一个上午。求教TADOConnection的连接机制(问题解决了,请关注的朋友进来看看) (300分)

  • 主题发起人 萧月禾
  • 开始时间

萧月禾

Unregistered / Unconfirmed
GUEST, unregistred user!
设有一个数据库应用软件程序,使用TADOConnection连接到业务数据库中
,其中有一个模块执行对数据库的备份和恢复,通过执行sql语句来实现操作。

备份还没问题,但恢复的时候,因为要求是要备份的数据库没有被使用,
所以在恢复操作的时候,要把当前的数据库连接关闭,通过另一个
TADOConnection连接到Master数据库上,执行sql语句“RESTORE DATABASE
MyDataBase FROM DISK = 'D:/Bak20020524.Dat'”,来实现备份还原。

错误提示:
"Exclusive access could not be obtained because the database is in use"
原因是尚有连接到该数据库的连接未断开,而这个连接正是我的程序中连接业务
数据库的TADOConnection。

我尝试在还原备份之前,同时用几种方法将连接关闭
1、将其Connected属性设为false
2、把KeepConnection设为false
3、把ConnectionString的值保存到一个字符串变量中再将它设为''
4、设置把这个连接业务数据库的ConnectionString改为连接到Master数据库并打开

然后执行备份的数据还原,仍然提示相同的错误。

最后,直到我在程序中把这个业务连接TADOConnection给Free掉,创建另一个
TADOConnection连到Master数据库中才行。

但这样就带来了极大的不便,因为执行了备份还原后还要继续运行系统,业务连接
还是要重新打开的。不太明白TADOConnection的连接机制,它究竟是根据什么来保持
这样的数据库连接的呢?有什么办法能把业务数据库的连接暂时关闭,过后再重新
打开?不知道大家有没有遇到过类似的情况?该如何处理较好?
 
我也提了这个问题,不过是关于Access的,还没有人答,我也很想知道为什么
TADOConnection已经close了,还是说数据库被使用,但是如果在设计时
ADOConnection的active为False,数据库就没有被使用。
请高手快点回答。
 
你也有折腾的一天!
是不是属性是日读
 
>>最后,直到我在程序中把这个业务连接TADOConnection给Free掉,创建另一个
TADOConnection连到Master数据库中才行。

这种方法都想的出? NB
 
fossil,我经常“折腾”

bubble,那是气急败坏下最无奈的做法呀

谁能帮忙解决这问题?相信也有不少人碰到过的,pnljh就遇到了
还有谁呀?
 
看看这样的思路行不行得通!
1。首先把备份得文件恢复成另外一个数据库名,
如:原数据库名为MyDatabase,将备份恢复成名为YouDatabase的新库。
2。将MyDatabase册掉
3。通过编程将YouDatabase改名为MyDatabase并与系统挂钩!

大家试试看可不可行!如果可行麻烦哪位写出代码,我对储存过程不是太了解!
 
bingjian偏方有点危险呀,毕竟删数据库不是件小事
 
我前天才刚碰上这个问题呢,你要断开与数据库连接,连向master,
你是做成三层结构的吗?
 
是2层,连接master是为了执行还原数据库的sql,同时又不连接业务数据库
 
TO:萧月禾
但是可行吗?
你能否试一试?
 
bingjian,即使可行也不可为之呀,做软件第一保证稳定和安全,第二保证速度和效率
不过还是谢谢你了 :)
 
另外,“2。将MyDatabase册掉”,也要先将连接释放掉,现在无奈的就是做不到这一步
否则就没有问题了
 
你为何不先把TADOConnection给断了,再把它的数据库连接连到Master数据库上
这样不就成了吗?
如你的数据库连接串改不了,那只能说明,你的连接从未断开过。
TADOConnection的Close和active为False到底有什么不同
我没试过,因为我一直都用的是active := False;
都没问题,这样,的确是同数据库断开了连接。
 
>>bingjian
数据支持重命名么? 好像企业管理器中都做不到吧?

萧兄:还记得我上次发给你的代码么?我的做法就是先用ADOC连上MASTER,
然后把原来的库删掉,最后再恢复。再连接,就可以了呀。。黑黑。

BTW:李颖好象已经出了支持ADO的备份和恢复控件了。。联系他看看呀。。:)
 
>>你为何不先把TADOConnection给断了,再把它的数据库连接连到Master数据库上
老大,我就是没法把这连接真正地断掉呀,我把它的ConnectionString改为连到
Master上,最后还是提示业务数据库真被使用,真不知道它是怎么被用的
搞不懂这TADOConnection,翻了翻李维的书,没提到这点
 
干吗要另建一个adoconnection呀?
直接用这个adoconnection连的adocommand执行'use master'不就可以了?
 
forss,李颖发的关于他的备份控件的帖子我看过了,也跟过贴,但暂时用不上
(自增字段和外键字段的恢复问题)

我再看看你的代码 :)
 
Pearl.,“这个adoconnection”连的是业务数据库,该连接不断掉是无法恢复备份的
现在改其连接对象为master居然也不行,无奈之。[:(]
 
>>forss
我有说让数据重名吗?你没理解我的意思!
>>萧月禾
刚才一直在幻想我的偏方,结果看到成云的才发现,他说的很有道理的!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
顶部