请提问前先搜索。
Query.SQL.Text := 'backup database ...';
Query.ExecSQL;

解决方案 »

  1.   

    如果你想备份表的话,请使用DMO,如果你想备份对象的话,请使用DTS
      

  2.   

    如果你想批量备份的话,请使用bulk insert;
    如果你想备份整个数据库的话,请使用 backup database
    如果你想命令行备份的话,请使用bcp
      

  3.   

    备份(还原数)据库:
    一:SQL语句:Backup DataBase
    二、SQL Server提供的备份服务。
      

  4.   

    我也觉得使用SQL语句是比较好的想法
      

  5.   

    请问各位恢复数据库呢?另外还有一个问题是使用SQL语句备份的数据库备份到哪里了?
      

  6.   

    这个问题好解决!!!
    Restore database databasename from disk='C:\buDB.mdf'  WITH replace,stats   //恢复
    backup database databasename to disk='d:\server\jun.bak'  with  init   //备分
    你可以用TQUERY控件拼写并执行这些语句。
      

  7.   

    我以前也做过类似的问题,当时是采用Transact SQL 的Backup,Restore命令,根据具体需要配置命令的参数,需要注意的是,在使用Restore命令后,数据库处于DBO Use Only状态。
      

  8.   

    no14617(皮皮):用Restore命令还要注意一些什么问题吗?我是用ADO访问SQL Server7.0数据库
      

  9.   

    用delphi 执行命令(sql):
    back database 库名 to disk='路径\文件名' with init(覆盖)
    实现备份,恢复也一样.
      

  10.   

    你有好几种选择,不过每种你都会了,就说明你以后处理起来也得心应手了!可以像楼上的一些老兄说的,可以写存储过程,用DTS或DMO什么的等等
    不过你还可以,定期COPY一下呀,这样对新手来说是最好不过的了,我也经常用COPY的方法,完了之后你要恢复了,你这样做就可以了,在QUERY ANALYZER中:
    Exec sp_attach_db @dbname=N'数据库名',
    @Filename1=N'MDF的完整路径和MDF名带后缀名',
    @Filename2=N'LDF的完整路径和MDF名带后缀名'
    试一下吧,在7.0和2000中都能用,不过高手不建议如此用法,这也是我知道的一个方法,不妨先将你的数据库试一下!!!!!!
    有什么问题请说!!!!
      

  11.   

    Backup database
    Restore Database
    只能在服务器生成文件。当然,你开了网络共享也可以。如果服务器崩溃,这个备份文件不一定能够恢复。可能会产生孤立用户。你还需要针对孤立用户进行消除。
      

  12.   

    adocommand1.CommandText:='backup database zzccpmsdata to      disk=''d:\delphi\zzc\data\zzccpmsdatacopy'' with init';
      adocommand1.Execute;
    其中zzccpmsdata为sql server数据库,备份结果正常。恢复数据库时的语句为:
      adocommand1.CommandText:='restore database zzccpmsdata from disk=''d:\delphi\zzc\data\zzccpmsdatacopy'' with replace';
      adocommand1.Execute;
      

  13.   

    我的前一个程序里,刚刚实了这个功能,可惜我在网吧没有源码给你
    备份:
    procedure tform1.btnbuckupclick(sender:tobject);
    var
       QryTmp:Tquery;
    begin
         qrytmp:=Tquery.create(self);
         qryTmp.databasenme:=database1.databasename
         QryTmp.sql.text:='Backup database 数据库 to disk='''+
         你的路径  +'''';  
         QryTmp.execsql;
    end; 
    恢复:
    procedure tform1.btnrestoreclick(sender:tobject);
    var
       QryTmp:Tquery;
    begin
         qrytmp:=Tquery.create(self);
         qryTmp.databasenme:=database1.databasename;
         database1.connect:=false;//记住,关闭
         QryTmp.sql.text:=' use master '+
                         +' restore database 数据库 to from='''+
                         你的路径  +'''';  
         QryTmp.execsql;
         database1.connect:=true;//
    end; end;
      

  14.   

    不如意思,打多了一个"to"
    恢复:应改
    procedure tform1.btnrestoreclick(sender:tobject);
    var
       QryTmp:Tquery;
    begin
         qrytmp:=Tquery.create(self);
         qryTmp.databasenme:=database1.databasename;
         database1.connect:=false;//记住,关闭
         QryTmp.sql.text:=' use master '+
                         +' restore database 数据库 from='''+
                         你的路径  +'''';  
         QryTmp.execsql;
         database1.connect:=true;//
    end; 
      

  15.   

    谢谢各位大侠的指点,不过我现在还有一点问题。正如aladinhxh(航)所说的一样在恢复的时候没有取得排它的访问权限。请问应该怎么样才能得到这个权限?  
      

  16.   

    另外补充一下我是用ADOConnection和ADOQuery来访问数据库的。
      

  17.   

    使用存储过程实现备份:--数据库的备份
    CREATE procedure up_BackupDatabase
    as
    declare
    @DatabaseName varchar(255),
    @LogName varchar(255),
    @csYear varchar(4),     --年
    @csMonth varchar(2),     --月
    @csDate varchar(2),     --日
    @DateEncode char(8)     --当天日期的编码  --获取当天日期的编码:比如2002-2-4-12,编码后为:2002020412
    set @csYear= convert(varchar(4),datepart(yyyy,getdate()))if datepart(mm,getdate())<=9
      set @csMonth='0'+convert(char(1),datepart(mm,getdate()))
    else
      set @csMonth=convert(char(2),datepart(mm,getdate()))if datepart(dd,getdate())<=9
      set @csDate='0'+convert(char(1),datepart(dd,getdate()))
    else
      set @csDate=convert(char(2),datepart(dd,getdate()))set @DateEncode=@csYear+@csMonth+@csDateset @DataBaseName = @DateEncode + '.dat'
    set @LogName = @DateEncode + '.log'backup database JXCDB
    to disk = @DataBaseName
    with format,INIT,
    description = '数据库备份',
    name= 'Data Backup...'backup log JXCDB
    to disk = @LogName
    with format,INIT,
    description = '日志备份',
    name= 'Log Backup...'
    GO--数据的恢复CREATE procedure up_RestoreDatabase
    @DatabaseName varchar(255),
    @LogName varchar(255)
    asrestore database JXCDB_lms
    from disk = @DatabaseName
    with replacerestore log JXCDB
    from disk = @LogName
    with replace
    GO
      

  18.   

    lynmison(菻梓):说来惭愧,我不知道存储过程怎么用。
      

  19.   

    这样好了,我给你个控件(DBBackup(0.9.3.0),该控件可以对某个表进行数据备份与恢复),自己去找或把E_Mail告诉我,我发给你!:)
      

  20.   

    vicky__gao(高伟奇):我的Email是[email protected],请发给我,谢谢了!
      

  21.   

    mmc0531(mmc0531):你是怎么解决的?特别是在恢复的时候没有取得排它的访问权限的这个问题。
      

  22.   

    Restore database ... 这条语句在查询分析器中,对数据库自身进行还原也会出现"未取得对数据库的排它访问权限",
    我没有取得这个权限,用了另外一个方法解决了这个问题,
    1 断开数据库的连接
    2 动态的创建一个数据库别名,连接master数据库,在master数据库中执行Restore database ...
    3 删除新建的数据库别名但我还想知道如何取得对数据库的排它访问权限
      

  23.   

    控件安装的时候,请参照里面的readme.txt.....lucky....
      

  24.   

    mmc0531(mmc0531):你能够把你的代码写出来给我看看吗?
    vicky__gao(高伟奇):谢谢你,只是我是用ADO连接的,而那个控件只是基于BDE的,不过还是很感谢你!!等问题结了的时候我会给你分的。
      

  25.   

    备份:
      USE master
       EXEC sp_addumpdevice 'disk', 'testdb', 'd:\mssql7\backup\dfsndb.bak'
        BACKUP DATABASE dfsndb TO testdb
    恢复:
    USE MASTER
     RESTORE FILELISTONLY   FROM DISK = 'c:\mssql7\backup\sndb5.bak'
        RESTORE DATABASE mydb FROM DISK = 'c:\mssql7\backup\sndb5.bak'
      

  26.   

    to 汗水
    你用另一个adoconntion来连接master数据库就是了,
    执行sql语句前把开始那个adoconntion断开
    这样就不会出现权限的问题了。
      

  27.   

    query1.sql.add('dump database database1 to disk ="c:\Temp\1.dat") ;
    query1.execsql
      

  28.   

    book523(笑问):我就是那样做的照样有这个问题。
      

  29.   

    看看我的源程序:procedure backup.BackupClick(Sender: TObject);
    var
    aa:string;
    bb:string;
    present:Tdatetime;
    thistime:string;
    year,month,day:word;
    ym:string;
    s,t,ip:string;
    begin
     ip:=localip;
     s:=extractfilepath(application.exename);
     t:='\\'+ip+'\'+s+'databackup';
     t:=move(t);
     if not DirectoryExists(t) then
      if not CreateDir(t) then
      raise Exception.Create('不能创建子目录:databackup,请检查。'); present:=strtodate(datesys);
     thistime:=timetostr(time);
     //***************************
      decodedate(present,year,month,day);
     if month<10 then
        begin
          ym:=inttostr(year)+'0'+inttostr(month);
        end
     else begin
          ym:=inttostr(year)+inttostr(month);
        end;
      aa:=t+'\'+ym+'.dat';
      aa:=''''+aa+'''';
      bb:=ym+'.dat';
     //***************************
     userbackup.Open;
     userbackup.Insert;
     userbackup.FieldByName('userno').asinteger:=useno;
     userbackup.FieldByName('backuptime').asstring:=thistime;
     userbackup.FieldByName('backupdate').asstring:=datesys;
     userbackup.FieldByName('backupfilename').asstring:=bb;
     userbackup.FieldByName('backuptype').asstring:='完全备份';
     userbackup.Post;
     try
       dmmain.dbXin.ApplyUpdates([userbackup]);
      except
       messagedlg('备份不成功!请检查。',mtInformation,[mbok],0);
       raise;
       abort;
      end;
      if xinbackup.Active then xinbackup.Close;
      xinbackup.SQL.Clear;
      xinbackup.sql.Add('backup database sununit to disk=');
      xinbackup.SQL.Add(aa+'with INIT');
      xinbackup.ExecSQL;
    end;
      

  30.   

    hanwen(真诚):"我的备份没有问题,关键是恢复的时候不行,你有没有恢复的源程序?Delphi5.0+SQL Server7.0+ADO.
      

  31.   

    suary(小船):或许是我太差了吧,到现在都还没有搞定!
      

  32.   

    不好意思,我刚参加完同学的婚礼回来
    我说的方法也使用的BDE, book523(笑问) 兄说得完全对
    另外,你的联列无需一定要连接到master数据库,其他任意一个数据库都可以。