我用程序还原数据库,结果出现因为数据库正在使用,所以未获得数据库的排它访问权!的错误,以下是还原代码,请大家帮忙看看哪里错了,如何可以解决这个错误,在线等待,谢谢。
function repl_substr(sub_old, sub_new, s: string): string;
var
i: integer;
begin
repeat
i := pos(sub_old, s);
if i > 0 then
begin
delete(s, i, Length(sub_old));
insert(sub_new, s, i);
end;
until i < 1;
Result := s;
end;
function RestoreSQLDataBase(connstr_sql,DatabaseName,Restore_FileName:string):Boolean;//数据库恢复函数,estore_FileName以前备份的数据库文件
begin
try
DataModule2.adoquery1.Close;//恢复数据库不能打开数据库,要打开系统数据库master,把连接字符串如adoconnetion的connectionstring中的数据库名称换成"master"数据库
// DataModule2.ADOConn.Close;
DataModule2.adoquery1.ConnectionString:=repl_substr(DatabaseName,'master',connstr_sql); DataModule2.adoquery1.SQL.Clear;
DataModule2.adoquery1.SQL.Add(' RESTORE DATABASE '+DatabaseName+' from disk = ' + '''' + Restore_FileName + '''');
Try
DataModule2.adoquery1.ExecSQL;
Result:=true;
Except
Result:=false;
exit;
end;
finally
DataModule2.adoquery1.Free;
end;
end;
以下是调用函数:
x2,y2,z2:string;
a2:boolean;X2:=DataModule2.ADOQuery1.ConnectionString;
Y2:='HOTELDB';
Z2:=edit2.text;
a2:=RestoreSQLDataBase(X2,Y2,Z2);
function repl_substr(sub_old, sub_new, s: string): string;
var
i: integer;
begin
repeat
i := pos(sub_old, s);
if i > 0 then
begin
delete(s, i, Length(sub_old));
insert(sub_new, s, i);
end;
until i < 1;
Result := s;
end;
function RestoreSQLDataBase(connstr_sql,DatabaseName,Restore_FileName:string):Boolean;//数据库恢复函数,estore_FileName以前备份的数据库文件
begin
try
DataModule2.adoquery1.Close;//恢复数据库不能打开数据库,要打开系统数据库master,把连接字符串如adoconnetion的connectionstring中的数据库名称换成"master"数据库
// DataModule2.ADOConn.Close;
DataModule2.adoquery1.ConnectionString:=repl_substr(DatabaseName,'master',connstr_sql); DataModule2.adoquery1.SQL.Clear;
DataModule2.adoquery1.SQL.Add(' RESTORE DATABASE '+DatabaseName+' from disk = ' + '''' + Restore_FileName + '''');
Try
DataModule2.adoquery1.ExecSQL;
Result:=true;
Except
Result:=false;
exit;
end;
finally
DataModule2.adoquery1.Free;
end;
end;
以下是调用函数:
x2,y2,z2:string;
a2:boolean;X2:=DataModule2.ADOQuery1.ConnectionString;
Y2:='HOTELDB';
Z2:=edit2.text;
a2:=RestoreSQLDataBase(X2,Y2,Z2);
1.建立一个数据库链接: newCnn,链接到 master数据库
2.用该链接进行数据库的还原动作
3.给我分
DataModule2.adoquery1.Connection.Connected:=false;