恢复数据库的一个问题,请各位赐教!!在线等待......
我用的是SQL Server 2000,在程序中用restore命令进行数据库的恢复工作,在恢复之前将当前数据库断开了,即将Adoconnection1.connected:=false;然后进行恢复操作,恢复后将adoconnection1.connected:=true; 不知为何有时执行到这句时就会报错说:NULL DBPROCESS ENCOUNTERED, 有时又不会, 出现这种报错信息是什么意思,应该是什么地方有问题呀.
ADOConnection1连接的是我要备份的数据库, ADOConnection2连接的是master数据库.
if(BackupRdBtn.Checked )then //备份
begin
SaveDialog1.FileName :='Backup'+FormatDateTime('yyyymmdd',Date);
if(SaveDialog1.Execute )then
begin
m_Label.Caption :='ÕýÔÚ±¸·ÝÊý¾Ý¿â,ÇëµÈ´ý...';
DataModule1.DBManageZQuery.Close ;
DataModule1.DBManageZQuery.Connection :=DataModule1.ADoConnection1 ;
try
with DataModule1.DBManageZQuery do
begin
Close;
SQL.Clear ;
SQL.Add('Backup Database RecData To Disk=:A With Init');
ParamByName('A').AsString :=SaveDialog1.FileName ;
ExecSQL;
end;
Application.MessageBox('Êý¾Ý¿â±¸·Ý³É¹¦!','ACSIC 8820',MB_ICONINFORMATION or MB_OK);
m_Label.Caption :='';
except
on e:exception do
begin
Application.MessageBox('Êý¾Ý¿â±¸·Ýʧ°Ü!','ACSIC 8820',MB_ICONINFORMATION or MB_OK);
m_Label.Caption :='';
end;
end;
end;
end
else if(RestoreRdBtn.Checked )then //恢复
begin
if Application.MessageBox('ÄúÈ·¶¨Òª»Ö¸´Êý¾ÝÂð?','ACSIC 8820',MB_ICONQUESTION or MB_OKCancel)=IDOK then
begin
if(OpenDialog1.Execute )then
begin
m_Label.Caption :='ÕýÔÚ»Ö¸´Êý¾Ý¿â,ÇëµÈ´ý...';
DataModule1.DBManageZQuery.Close ;
DataModule1.ADOConnection1.Connected :=false;
DataModule1.DBManageZQuery.Connection :=DataModule1.ADOConnection2 ;
try
with DataModule1.DBManageZQuery do
begin
Close;
SQL.Clear ;
SQL.Add('Restore DataBase RecData From Disk=:A');
ParamByName('A').AsString :=OpenDialog1.FileName ;
ExecSQL;
end;
Application.MessageBox('Êý¾Ý¿âÒѳɹ¦»Ö¸´!','ACSIC 8820',MB_ICONINFORMATION or MB_OK);
m_Label.Caption :='';
DataModule1.ADOConnection1.Connected :=true; //执行这句时有问题
except
on e:exception do
begin
Application.MessageBox('Êý¾Ý¿â»Ö¸´Ê§°Ü!','ACSIC 8820',MB_ICONINFORMATION or MB_OK);
m_Label.Caption :='';
DataModule1.ADOConnection1.Connected :=true;
end;
end;
end;
end;
end;
问题点数:20、回复次数:12Top
1 楼shxyz(shxyz)回复于 2005-03-01 14:26:46 得分 0
各位高手进来看看嘛Top
2 楼shxyz(shxyz)回复于 2005-03-01 14:31:45 得分 0
以上发的程序有些乱码,重新整理了一下
if(BackupRdBtn.Checked )then //备份
begin
SaveDialog1.FileName :='Backup'+FormatDateTime('yyyymmdd',Date);
if(SaveDialog1.Execute )then
begin
DataModule1.DBManageZQuery.Close ;
DataModule1.DBManageZQuery.Connection :=DataModule1.ADoConnection1 ;
try
with DataModule1.DBManageZQuery do
begin
Close;
SQL.Clear ;
SQL.Add('Backup Database RecData To Disk=:A With Init');
ParamByName('A').AsString :=SaveDialog1.FileName ;
ExecSQL;
end
except
on e:exception do
begin
//
end;
end;
end;
end
else if(RestoreRdBtn.Checked )then //恢复
begin
if(OpenDialog1.Execute )then
begin
DataModule1.DBManageZQuery.Close ;
DataModule1.ADOConnection1.Connected :=false;
DataModule1.DBManageZQuery.Connection :=DataModule1.ADOConnection2 ;
try
with DataModule1.DBManageZQuery do
begin
Close;
SQL.Clear ;
SQL.Add('Restore DataBase RecData From Disk=:A');
ParamByName('A').AsString :=OpenDialog1.FileName ;
ExecSQL;
end;
DataModule1.ADOConnection1.Connected :=true; //执行这句时有问题
except
on e:exception do
begin
//
DataModule1.ADOConnection1.Connected :=true;
end;
end;
end;
end;
Top
3 楼cdsgajxlp(起名很难)回复于 2005-03-01 14:36:16 得分 18
用adocommand1Top
4 楼cdsgajxlp(起名很难)回复于 2005-03-01 14:38:44 得分 0
adocommand1.ConnectionString:=....
with adocommand1 do//用AdoCommand控件
begin
CommandText:='use Master';
Execute;
CommandText:='execute sp_helpdevice';
Execute ;
CommandText:='Restore database '+DATABASE.Text+' From disk='''+路径+''' with replace';//这行应当是这样
Execute ;
Top
5 楼shxyz(shxyz)回复于 2005-03-01 14:56:34 得分 0
我想问下楼上的高手:按我那样做数据库也是可以恢复的,问题就出在将原来的连接要备份的数据库的AdoConnection重新建立连接时报错,这是什么原因呀,请指教!Top
6 楼shxyz(shxyz)回复于 2005-03-01 15:05:12 得分 0
我加了with replace后还是不行,不是每次都会出现,错误提示:Null Dbprocess Pointer Encountered!Top
7 楼cdsgajxlp(起名很难)回复于 2005-03-01 15:08:31 得分 0
use datebase 了么Top
8 楼cdsgajxlp(起名很难)回复于 2005-03-01 15:11:50 得分 0
备份还原都是在Master上进行的
当你完成操作后,重新建立连接的时候ADOConnection1.ConnectionString要变化的Top
9 楼shxyz(shxyz)回复于 2005-03-01 16:10:17 得分 0
我使用了两个Adoconnection,Adoconnection1用于连接要备份的数据库,AdoConnection2用于连接master数据库,在进行备份/恢复前将Adoconnection1断开,Adoconnection2连接上,创建了一个Adoquery,其Connection设为Adoconnection2,备份/恢复完成后将Adoconnection1连接上,
Adoconnection2断开,现发现在Adoconnection2连接上时也会提示:Null Dbprocess Pointer Encountered! 这到底是怎么回事呀,急S人了!
Top
10 楼waysoft(华子)回复于 2005-03-01 16:14:48 得分 0
up
Top
11 楼waysoft(华子)回复于 2005-03-01 16:16:27 得分 2
对SQL Sercer不熟,恢复完成后,数据库是否自动运行,是否需要启动数据库什么的。
Top
12 楼waysoft(华子)回复于 2005-03-01 16:17:09 得分 0
汗~~~,SQL ServerTop




