我的程序有ADOConnection1和ADOCN_back两个ADOConnection组件,ADOConnection1用来做正常的数据读写,ADOCN_back和一个ADOCommand组件cback用作数据备份,语句如下:
main.ADOConnection1.Close; main.ADOConnection1.Connected:=False; main.cback.CommandText:= 'restore database article from disk=''' + Fname + '''' + ' with replace'; //恢复数据命令语句 try
//执行恢复过程 main.cback.Execute; except showmessage('数据库正在被使用!请确定已关闭其它使用该数据库程序!'); Timer1.Enabled:=False; ProgressBar1.Position:=ProgressBar1.min; showmessage(' 恢复失败!');
end;总是恢复失败,请高手指点原因
main.ADOConnection1.Close; main.ADOConnection1.Connected:=False; main.cback.CommandText:= 'restore database article from disk=''' + Fname + '''' + ' with replace'; //恢复数据命令语句 try
//执行恢复过程 main.cback.Execute; except showmessage('数据库正在被使用!请确定已关闭其它使用该数据库程序!'); Timer1.Enabled:=False; ProgressBar1.Position:=ProgressBar1.min; showmessage(' 恢复失败!');
end;总是恢复失败,请高手指点原因
procedure TForm1.Button1Click(Sender: TObject);
begin
adoquery1.SQL.Clear;
adoquery1.SQL.Add('BACKUP DATABASE northwind TO DISK = N''D:\b.bak''');
adoquery1.ExecSQL;end;procedure TForm1.Button2Click(Sender: TObject);
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.sql.Add('RESTORE DATABASE pubs FROM DISK =''d:\a.bak ''');
adoquery1.ExecSQL;
end;
h上央就是备份和还源的
出错有可能因为还源的时候ADOQUERY1连接的PUBS表已经删除掉。所以报登录不了的错误。
为了不出错应动态指定其数据源。。即打开另一个库来执行还源的这条语句。
还源的时候还要注意SQL SERVER里有没有被还源的库
use master
goif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_killspid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_killspid]
GOcreate proc p_killspid
@dbname sysname --要关闭进程的数据库名
as
declare @s nvarchar(1000)
declare tb cursor for local
select s='kill '+cast(spid as varchar)
from master..sysprocesses
where dbid=db_id(@dbname)open tb
fetch next from tb into @s
while @@fetch_status=0
begin
exec(@s)
fetch next from tb into @s
end
close tb
deallocate tb
go--用法
exec p_killspid '客户资料'关于了所有连接后,在恢复数据库。
use master
go
restore database '客户资料' from disk = 'd:\a.bak'
go你试试吧!
数据库恢复问题:
但你的数据库有用户连接的时候是不能恢复的,它在提示数据库再使用 你用
query1.sql.clear;
query1.sql.add('use master');
query1.sql.add('exec p_killspid ''数据库名''');
query1.execsql;
query1.sql.clear;
query1.sql.add('RESTORE DATABASE tour from disk=''d:\back1.bak''');
query1.execsql;
就可以了;如果不行的话,先把原来的数据模块释放掉再恢复数据库应该可以了,注意:你的ADOCommand不能放在数据模块上