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

  • 主题发起人 萧月禾
  • 开始时间
虽然这个问题就要结束了,但是由这个问题引发的另一个问题出来了!

SQL SERVER可以通过这种方法,但是ACCESS数据库该怎么办?
大家来讨论呀!

TO 萧月禾:
还有一个题外题:
>>另外,刚刚一个女生发了个网址给我,挺逗的,大家也看看轻松一下罢[:)]
>>http://go6.163.com/huangxiaoxie/giabo.htm
 
TO 萧月禾:
还有一个题外题:
>>另外,刚刚一个女生发了个网址给我,挺逗的,大家也看看轻松一下罢[:)]
>>http://go6.163.com/huangxiaoxie/giabo.htm

怎么看不了呀,难道是。。。?郁闷中!
 
至于ACCESS数据库,直接复制文件备份不可以吗?

另外,那个网址是个搞笑的小孩子图片,别想外了哦[:)]
 
我是指怎么才能让Tadoconnection和ACCESS完全断开!

 
Delphi6的TADOConnection在Close后是完全断开的,我试过了。但D5不行。
 
pnljh: 我试了D6不行.
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1089391
 
我现在做的D5也没事了,不过我以前做的D6也确实有此问题,
但现在不知道为什么没有此问题了,我得看看为什么。
 
我的恢复是这么写的,但是当执行到‘*’号处就不行了,错误提示:无法重写文件
‘C:/Program Files/Microsoft SQL Server/MSSQL/data/Medicine_data.MDF'数据库
medicine正在使用该文件。我明明已经将它断开了,他怎么还说我在使用???迷惑
请各位高手帮着看看,到底哪里出了错
DM1.ADOConnection1.Connected:= False;
//连接到Master
DM1.ADOConnection1.ConnectionString:= 'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=master;Data Source=ZY;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=ZY;Use Encryption for Data=False;Tag with column collation when possible=False';
DM1.ADOConnection1.Connected:= True;

try
DM1.ADOCommand1.CommandText := 'ALTER DATABASE Medicine SET OFFLINE WITH ROLLBACK IMMEDIATE';
DM1.ADOCommand1.Execute;

if OpenDialog1.Execute
then DM1.ADOCommand1.CommandText := 'RESTORE DATABASE Med_Back FROM DISK = ''' + OpenDialog1.FileName + ''''//备份为数据库Med_Back,而非原数据库名medicine
else Exit;
[red]* [/red] DM1.ADOCommand1.Execute;

finally
DM1.ADOCommand1.CommandText := 'ALTER DATABASE Medicine SET ONLINE WITH ROLLBACK IMMEDIATE';
DM1.ADOCommand1.Execute;
DM1.ADOConnection1.Connected := True;
end;

DM1.ADOConnection1.Connected:= False;
//DM1.ADOConnection1.ConnectionString:= WideString('Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=medicine;Data Source=ZY;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=ZY;Use Encryption for Data=False;Tag with column collation when possible=False';)
DM1.ADOConnection1.Connected:= True;
 
哦,我刚刚忘了,在设置ConnectionString的时候,超过255个字符时应该怎么办
为什么用编辑器进行输入的时候,却是可以的??
 
to jazzjerry:
你说的不能断开连接的问题也就是这帖子讨论的问题核心,上面已经给出解决的方法了
另外,ConnectionString并非不能接受255个以上的字符串,而是要以拼接的方式给它
赋值,这是编译器本身的原因,每段不能大于255个字符
ConnectionString := '....'+'.....'+'....'
 
to 萧月禾:
我觉得我已经按照上面讨论的方法做了,先连接到Master然后再将业务数据库断开,
再做备份,但是还是有错,你帮我看看代码,哪里出了错?
 
你的DM1.ADOConnection1原本是连你的业务数据库的罢
这样转连到Master不行,它仍然保留原来的连接的
应把DM1.ADOConnection1的Connected设为false后
用另外一个ADOConnection连接Master数据库
然后执行Set OffLine
 
谢谢给位的帮助,特别要感谢萧月禾,问题终于解决了。
但是我觉得奇怪,为什么不能将备份的数据库还原成与原数据库不同的名字?
原来数据库名为Medicine,我把他还原成Med_Back是怎么也不行,但是还原成Medicine
就OK了。
 
要结束这帖子了
希望这次的讨论对大家能有所帮助
感谢大家的参与
也感谢黎师兄的指点[:)]
 
to:jazzjerry
你需要执行with replace参数,对文件路径取行取代,具体操作见帮助.
 
我原来也遇到过这个问题,我用的是SQL SERVER 7.0,恢复数据库的时候出错。
现在解决了,可以不用set offline,因为我试了如果用set offline的方法还是出错,
提示数据库被使用。后来我修改了SQL SERVER中的数据库角色,给它访问MASTER的权限
(原来我给它分配的角色只能访问业务数据库),不用SET OFFLINE就可以了,就是建两
个database连接,params中分别指定master和你的业务数据库('database name=master '
or ..)就可以恢复了。
所以在sql server中不是set offline不set offline的问题,而是你的数据库角色能不能
访问master库。
 
我原来也遇到过这个问题.easy to solve it..hahahaha
 

Similar threads

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