怎么样备份数据库?在form1打开form2成功,在form2如果调用关闭form1呢?

解决方案 »

  1.   

    SQL server数据库
    query.sql.add('backup database 数据库 to disk = 'c:\ccc.bak')
    query.sql.add('restore database 数据库 from disk = 'c:\ccc.bak')
    Access数据库:
    直接复制
      

  2.   

    SQL数据库备份:
    备份:
    procedure TFrmDBMaintain.Button1Click(Sender: TObject);
    var
      address:String;
    begin
      if Edit1.Text='' then
      begin
        showmessage('文件名不能为空');
        Exit;
      end;  if DMADO.ADOConnection1.Connected then DMADO.ADOConnection1.Close;
      DMADO.ADOConnection1.DefaultDatabase:='Master';
      DMADO.ADOConnection1.Open;  address:=Edit1.Text;  if DMADO.ADOQuery1.Active then DMADO.ADOQuery1.Close;
      DMADO.ADOQuery1.SQL.Clear;
      DMADO.ADOQuery1.SQL.Add('SELECT * FROM sysdevices WHERE name='+''''+DBBK+'''');
      DMADO.ADOQuery1.Open;
      if DMADO.ADOQuery1.RecordCount=0 then
        if Application.MessageBox('是否添加新的数据库备份设备','备份设置',MB_YESNO)=6 then
        begin
          if DMADO.ADOQuery1.Active then DMADO.ADOQuery1.Close;
          DMADO.ADOQuery1.SQL.Clear;
          DMADO.ADOQuery1.SQL.Add('USE master');
          DMADO.ADOQuery1.SQL.Add('EXEC sp_addumpdevice'+''''+'disk'+''''+','+''''+DBBK+''''+',');
          DMADO.ADOQuery1.SQL.Add(''''+address+'''');
          DMADO.ADOQuery1.ExecSQL;
        end
        else Exit
      else
        if DMADO.ADOQuery1.Fields[6].AsString <> address then
        begin
          if DMADO.ADOQuery1.Active then DMADO.ADOQuery1.Close;
          DMADO.ADOQuery1.SQL.Clear;
          DMADO.ADOQuery1.SQL.Add('USE master');
          DMADO.ADOQuery1.SQL.Add('EXEC sp_dropdevice '+DBBK);
          DMADO.ADOQuery1.ExecSQL;
          if DMADO.ADOQuery1.Active then DMADO.ADOQuery1.Close;
          DMADO.ADOQuery1.SQL.Clear;
          DMADO.ADOQuery1.SQL.Add('USE master');
          DMADO.ADOQuery1.SQL.Add('EXEC sp_addumpdevice'+''''+'disk'+''''+','+''''+DBBK+''''+',');
          DMADO.ADOQuery1.SQL.Add(''''+address+'''');
          DMADO.ADOQuery1.ExecSQL;
        end;  if FileExists(Edit1.Text) then
        if  Application.MessageBox('是否替换原数据库备份文件?','确认替换',MB_YESNO)=6 then
        begin
          try
            DeleteFile(address);
          except
            Application.MessageBox('替换数据库备份文件失败','替换文件',MB_OK);
            Exit;
          end;
        end
        else Exit;  try
        if DMADO.ADOQuery1.Active then DMADO.ADOQuery1.Close;
        DMADO.ADOQuery1.SQL.Clear;
        DMADO.ADOQuery1.SQL.Add('BACKUP DATABASE '+DatabaseName+' TO '+DBBK);
        DMADO.ADOQuery1.ExecSQL;
        DMADO.ADOQuery1.Close;
      except
        Application.MessageBox('数据库备份失败','错误',MB_OK)
      end;  if DMADO.ADOConnection1.Connected then DMADO.ADOConnection1.Close;
      DMADO.ADOConnection1.DefaultDatabase:=DatabaseName;
      DMADO.ADOConnection1.Open;end;
    恢复:procedure TFrmDBMaintain.Button2Click(Sender: TObject);
    var
      address: String;
    begin
      address:=Edit2.Text;
      if not FileExists(address) then
      begin
        Application.MessageBox('数据库备份文件不存在','文件',MB_OK);
        Exit;
      end;  if DMADO.ADOConnection1.Connected then DMADO.ADOConnection1.Close;
      DMADO.ADOConnection1.DefaultDatabase:='Master';
      DMADO.ADOConnection1.Open;  try
        if DMADO.ADOQuery1.Active then DMADO.ADOQuery1.Close;
        DMADO.ADOQuery1.SQL.Clear;
        DMADO.ADOQuery1.SQL.Add('USE master');
        DMADO.ADOQuery1.SQL.Add('EXEC sp_dropdevice '+DBBK);
        DMADO.ADOQuery1.ExecSQL;
      except
        Application.MessageBox('数据库备份驱动器不存在','错误',MB_OK);
        Exit;
      end;
      if DMADO.ADOQuery1.Active then DMADO.ADOQuery1.Close;
      DMADO.ADOQuery1.SQL.Clear;
      DMADO.ADOQuery1.SQL.Add('USE master');
      DMADO.ADOQuery1.SQL.Add('EXEC sp_addumpdevice'+''''+'disk'+''''+','+''''+DBBK+''''+',');
      DMADO.ADOQuery1.SQL.Add(''''+address+'''');
      DMADO.ADOQuery1.ExecSQL;
      try
        if DMADO.ADOQuery1.Active then DMADO.ADOQuery1.Close;
        DMADO.ADOQuery1.SQL.Clear;
        DMADO.ADOQuery1.SQL.Add('RESTORE DATABASE '+DatabaseName+' FROM '+DBBK);
        DMADO.ADOQuery1.ExecSQL;
        DMADO.ADOQuery1.Close;
      except
        Application.MessageBox('数据库恢复失败','错误',MB_OK)
      end;  if DMADO.ADOConnection1.Connected then DMADO.ADOConnection1.Close;
      DMADO.ADOConnection1.DefaultDatabase:=DatabaseName;
      DMADO.ADOConnection1.Open;
    end;
      

  3.   

    SQL server数据库
    query.sql.add('backup database 数据库 to disk = 'c:\ccc.bak')这个不行的..cannot return a result set
      

  4.   

    ADOQuery1.Close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('backup database medicine to disk=c:\ccc.mdf');
       ADOQuery1.Open;
    我这样试过,可是错误消息为"没提供完整信息"...谁知道为什么呀?
      

  5.   

    将ADOQuery1.Open改为ADOQuery1.ExecSQL试试。
      

  6.   

    如果你的SQL语句以命令行方式可以正确执行,试试下面的方法。
    ADOQuery1.Close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('backup database medicine to disk=''c:\ccc.mdf''');
       ADOQuery1.ExecSQL;
      

  7.   

    如果你的SQL语句以命令行方式可以正确执行,试试下面的方法。
    ADOQuery1.Close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('backup database medicine to disk=''c:\ccc.mdf''');
       ADOQuery1.ExecSQL;
    这位兄台答中了...在delphi中,单引号是不是就像C++中的"\"转义字符呀???
    在目录前的两个单引号就是一个..我理解对了吗?
      

  8.   

    回答基本正确。
    Delphi中的字符串用单引号括起来,对于字符串中的单引号以两个单引号表示。