[
]
to kingfei.
真是不好意思,我去试里试还是不行,老是报错。你给我发个例子,你看看,行不行。
我的blue_start@163.net.下面是我的代码:
var
path,cmd:string;
begin
if not Mbconfirm('确定要恢复数据库吗?') then exit;
path:=ExtractFilePath(Application.ExeName);
OpenDialog.InitialDir :=path;
OpenDialog.FileName:='data';
OpenDialog.DefaultExt :='dat';
if not OpenDialog.Execute then
exit;
BB_TQ.Enabled :=false;
BB_exit.Enabled :=false;
sb.SimpleText:='正在恢复数据库...';
//Datam.Databa.KeepConnection:=False;
Datam.Databa.Connected:=False;
//将database连接到master数据库上
if datam.Databa.Connected then datam.databa.Close;
//datam.Databa.Params.Values['path']:=DBpath;
datam.Databa.Params.Values['DATABASE NAME']:='hkgl';
datam.Databa.Params.Values['SERVER NAME']:=SrvName;
datam.Databa.Params.Values['USER NAME']:=UserName;
try
datam.databa.Open;
Except
showmessage('数据库连接失败!');
Exit;
end;
with Tquery.Create(self) do
begin
//对数据库确定排它性
{报错,数据库在使用}
//将数据库设置为master来对hkgl做恢复
DatabaseName:='mydb';
try
disconnectiondatabase(DataM);
except
exit;
end;
if disconnectiondatabase(DataM)=False then
Exit;
//置为单用户状态
cmd:='use master '+
' exec sp_dboption hkgl,''single user'',true';
close;
sql.Clear;
sql.Text:=cmd;
try
ExecSQL;
except
mberror('将数据库置为单用户时出错!');
bb_exit.Enabled :=true;
bb_tq.Enabled:=true;
exit;
end;
//断开与数据库的连接
cmd:='exec sp_detach_db ''hkgl'',''true''';
close;
sql.Clear;
sql.Text:=cmd;
try
ExecSQL;
except
mberror('断开数据库连接出错!');
bb_exit.Enabled :=true;
bb_tq.Enabled:=true;
exit;
end;
//创建存储设备
cmd:='EXEC sp_addumpdevice ''disk'', ''RESTORE_1'','''+OpenDialog.FileName+'''';
close;
sql.Clear;
sql.Add(cmd);
try
ExecSQL;
except
mberror('创建数据库恢复设备出错!');
bb_exit.Enabled :=true;
bb_tq.Enabled:=true;
exit
end;
//恢复数据库
cmd:='RESTORE DATABASE '+DbName+' FROM RESTORE_1';
close;
sql.Clear;
sql.Add(cmd);
try
ExecSQL;
except
mberror('数据库恢复出错!');
bb_exit.Enabled :=true;
bb_tq.Enabled:=true;
exit
end;
//删除存储设备
cmd:='sp_dropdevice ''RESTORE_1''';
close;
sql.Clear;
sql.Add(cmd);
try
ExecSQL;
except
mberror('删除数据库恢复设备出错!');
bb_exit.Enabled :=true;
bb_tq.Enabled:=true;
exit
end;
end;
if datam.Databa.Connected then datam.databa.Close;
//datam.Databa.Params.Values['path']:=DBpath;
datam.Databa.Params.Values['DATABASE NAME']:=DbName;
datam.Databa.Params.Values['SERVER NAME']:=SrvName;
datam.Databa.Params.Values['USER NAME']:=UserName;
try
datam.databa.Open;
Except
showmessage('数据库连接失败!');
Exit;
end;
bb_exit.Enabled :=true;
bb_tq.Enabled:=true;
MBinfo('数据库恢复完毕!');
end;