请问在Delphi中,如何编程实现SQL数据库的备份跟恢复,是直接写SQL语句吗?请指教,我不知道该怎么下手!

解决方案 »

  1.   

    我不知道sql是否可以备份
    单你可备份数据库表呀
      

  2.   

    备份
    BACKUP DATABASE projectdb TO disk='c:\1.dat'恢复
    RESTORE DATABASE projectdb
       FROM disk='c:\1.dat'
    ok?
      

  3.   

    BACKUP DATABASE 和RESTORE DATABASE 都是对整个库备份的,具体用法很简单,看一下帮助就行了。
      

  4.   

    执行存储过程添加备份设备:
    exec sp_addumpdevice N'disk', N'aa', N'd:\Microsoft SQL Server\MSSQL\BACKUP\aa.BAK'备份数据库:
    BACKUP DATABASE [storage ] TO [PowerTemp] WITH  NOINIT ,  NOUNLOAD ,  NAME = N'storage  备份',  NOSKIP ,  STATS = 10,  NOFORMAT 还原数据库:
    RESTORE DATABASE [storage ] FROM  DISK = N'd:\Microsoft SQL Server\MSSQL\BACKUP\PowerTemp.BAK' WITH  FILE = 4,  NOUNLOAD ,  STATS = 10,  RECOVERY
      

  5.   

    --该存储过程只能放在masterCREATE PROCEDURE gp_BackupRestoreDb1
    (
     @bakfilename varchar(200),
     @flag int=1, --1:备份数据 --2:恢复数据
     @dbname varchar(128)
    )
     AS
     
      IF @DBNAME=DB_NAME() AND @FLAG=2 RETURN -3 --不能恢复数据库
      if @flag=1
      
       --备份文件
       BACKUP DATABASE @dbname TO disk=@bakfilename 
      else
      if @flag=2
     
         --恢复文件
         RESTORE DATABASE @dbname from disk=@bakfilename with REPLACE
      Return @@Error
      

  6.   

    如果是SQL Server的话:
    1、在master库中建立如下存储过程:
    CREATE PROCEDURE backupdb
      @database varchar(10),
      @directory varchar(100)
    AS
      backup database @database
      to disk=@directoryCREATE PROCEDURE restoredb
      @directory varchar(100),
      @database varchar(10)
    AS
      restore database @database
      from disk=@directory
    2、获得SQL Server路径:
    AnsiString __fastcall TFrmDM::GetSqlServerPath(){
      AnsiString result,tmp;
      TADOQuery *Query=new TADOQuery(this);
      Query->Connection=ADOConnection_Master;
      Query->Close();
      Query->SQL->Clear();
      Query->SQL->Add("select filename from sysdatabases where name='master'");
      Query->Open();
      tmp=Query->FieldByName("filename")->AsString;
      result=tmp.SubString(1,tmp.Length()-15);
      Query->Free();
      return result;
    }
      

  7.   

    3、在客户端调用存储过程
    d=FormatDateTime("yyyy-mm-dd hh-mm-ss",FrmDM->GetServerTime());
      try{
         path=FrmDM->GetSqlServerPath()+"backup\\";
         FrmDM->ADOStoredProc1->Close();
         FrmDM->ADOStoredProc1->Connection=FrmDM->ADOConnection_Master;
         FrmDM->ADOStoredProc1->Prepared=true;
         FrmDM->ADOStoredProc1->ProcedureName="backupdb;1";
         FrmDM->ADOStoredProc1->Parameters->ParamByName("@database")->Value = "db_name_to_backup";
         FrmDM->ADOStoredProc1->Parameters->ParamByName("@directory")->Value =path+"db_name_to_backup"+d;
         FrmDM->ADOStoredProc1->ExecProc();
         Application->MessageBox("备份完成","提示",MB_OK+MB_ICONINFORMATION);
         this->Close();
       }
       catch(...){
         Application->MessageBox("备份出错,请重新再来","警告",MB_OK+MB_ICONWARNING);
         return;
       }
    4、恢复的存储过程类似,一般做在程序外部.