CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

恢复数据库的一个问题,请各位赐教!!在线等待......

楼主shxyz(shxyz)2005-03-01 11:56:48 在 Delphi / VCL组件开发及应用 提问

我用的是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

相关问题

  • sql2000 数据库恢复(在线等待)
  • 数据库恢复时断开数据库的问题.急...在线等待
  • 急!!!!在线等待!!!!如何恢复数据库
  • 急急急!!!oracle数据库恢复,在线等待
  • 数据库恢复问题,急急急!!!!在线等待……
  • 如何恢复数据库到某一时间点?急啊,在线等待!
  • VB中用代码来恢复SQL数据库的问题.急!在线等待!
  • 关于数据库备份和恢复的问题?在线等待
  • 在线等待: Access数据库备份和恢复的问题,新手莫入!
  • 200分在线等待:java下如何备份和恢复access数据库?

关键词

  • 数据库
  • sql
  • dbmanagezquery
  • adoconnection
  • 恢复
  • datamodule
  • savedialog
  • begin
  • connection

得分解答快速导航

  • 帖主:shxyz
  • cdsgajxlp
  • waysoft

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo