请教一个数据库恢复的问题
我用的是SQL数据库,现在要在程序里实现数据库的恢复(备份已经做好),就是把前面备份好的数据库文件覆盖掉现在的数据库文件,我用RESTORE DATABASE DataBaseName
FROM DISK = 'c:\myback.bak'
但提示说数据库正在被使用(我的程序是连接到这个数据库的)。
我听说要先关掉SERVICE MANAGER和断开连接才行,请问在程序里面怎么解决?
我用的是SQL数据库,现在要在程序里实现数据库的恢复(备份已经做好),就是把前面备份好的数据库文件覆盖掉现在的数据库文件,我用RESTORE DATABASE DataBaseName
FROM DISK = 'c:\myback.bak'
但提示说数据库正在被使用(我的程序是连接到这个数据库的)。
我听说要先关掉SERVICE MANAGER和断开连接才行,请问在程序里面怎么解决?
ADOCommand1.CommandText:='use master';
ADOCommand1.Execute;
ADOCommand1.CommandText := 'ALTER DATABASE '+sDBname
+' SET OFFLINE WITH ROLLBACK IMMEDIATE';
ADOCommand1.Execute;
ADOCommand1.CommandText:='restore database '+sDBname
+' from disk='+ quotedStr(EditPath.Text);
ADOCommand1.Execute;
ADOCommand1.CommandText := 'ALTER DATABASE '+sDBname
+' SET ONLINE WITH ROLLBACK IMMEDIATE';
ADOCommand1.Execute;
但我试了一下好象不行!哪位帮我看看(可能是SDBNAME那搞错了,这到底是什么意思?);
各自都代表什么意思?
看不懂,请帮忙解释一下
或者另外给个方法
sdbname:你的數據庫備份文件名.
restore database:你的數據庫文件所在的目錄
一己之見,請高手指點.
关闭 ADOConnection1 ; //你的程序中的
ADOQuery1链接到 ADOConnection2 , 恢复 代码 短消息中(写的粗糙见谅)
Master是什么意思?
是不是就是adoconnection2。ConnectionString := 'master' ?
begin
datamodule1.ADOConnection1.Close ;//关闭数据库链接
ADOConnection2 := TADOConnection.Create(Self) ;
with ADOConnection2 do
begin
ConnectionString := 'Provider=SQLOLEDB.1;password=wr8111;Persist Security Info=true;User ID=tyadmin;Initial Catalog=master;Data Source=wrwr-h48gmkdje7;'+
'Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=wrwr-h48gmkdje7;Use Encryption for Data=False;Tag with column collation when possible=False' ;//链接到 Master ;
LoginPrompt := False ;
Open ;
end;with adoquery1 do
begin
close;
Connection := ADOConnection2 ;
sql.Clear;
sql.add('Restore database tyjxc from disk=:prm_disk WITH replace,stats');
parameters.ParamByName('prm_disk').Value:='c:\myback.bak';
execsql;
showmessage('已成功恢复!');
end;
end;
这样的
他说我的数据库正被访问
begin
with ADOQuery1 do
begin
Sql.Text := 'Restore DataBase FreeDb from Disk = ''d:\forback.Bak''' ;
ExecSql ;
end;
ShowMessage('ok') ;
end;我这儿没错
我就一个adoconnection啊,其他的都是adoquery连接adoconnection的
怎么办?
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB;type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
with ADOQuery1 do
begin
Sql.Text := 'Restore DataBase FreeDb from Disk = ''d:\a.Bak''' ;
ExecSql ;
end;
ShowMessage('okok') ;
end;end.我这儿可以呀 ,你看看是不是企业管理器或者其他别的程序在用
而且我把SQL也关了
不知道还有什么问题,你帮我看看程序是不是没有问题了?
begin
datamodule1.ADOConnection1.Close ;//关闭数据库链接
ADOConnection2 := TADOConnection.Create(Self) ;
with ADOConnection2 do
begin
ConnectionString := 'Provider=SQLOLEDB.1;password=wr8111;Persist Security Info=true;User ID=tyadmin;Initial Catalog=master;Data Source=wrwr-h48gmkdje7;'+
'Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=wrwr-h48gmkdje7;Use Encryption for Data=False;Tag with column collation when possible=False' ;//链接到 Master ;
LoginPrompt := False ;
Open ;
end;with adoquery1 do
begin
close;
Connection := ADOConnection2 ;
sql.Clear;
sql.add('Restore database tyjxc from disk=:prm_disk WITH replace,stats');
parameters.ParamByName('prm_disk').Value:='c:\myback.bak';
execsql;
showmessage('已成功恢复!');
end;
end;
就是这段有问题啊!(因为我重试了一个小的就做恢复,也有同样的错)