我用DELPHI +SQL SERVER 2000做了一个程序,在备份时,备份到别的路径下行,但是备份到程序所在的目录下时总是把所存的文件名的后两位删除,不知是什么原因,还有,恢复数据库时,我把所有的链接都关,可还是提示,数据正在使用,什么原因?请高手赐教。

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);var
     str:string;
    begin
     if OpenDialog1.Execute then
        begin
         try
             if not ADOCon.Connected then ADOCon.Connected:=true;
             with DataADOQ do
             begin
                  Close;
                  Sql.Clear;
                  str:='use master Backup DataBase waterDB to disk ='''+opendialog1.FileName+'.dak'+'''' ;
                  Sql.Add(str);
                  ExecSQL;
              end;
         except
            Application.MessageBox('数据备份失败!','提示',MB_OK +  MB_ICONSTOP);
            exit;
         end;
          Application.MessageBox('数据库备份成功!','提示',MB_OK + MB_ICONINFORMATION);   end;
    end;
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);var
     str:string;
    begin
     if OpenDialog1.Execute then
        begin
         try
             if not ADOCon.Connected then ADOCon.Connected:=true;
             with DataADOQ do
             begin
                  Close;
                  Sql.Clear;
                  str:='use master Backup DataBase waterDB to disk ='''+opendialog1.FileName+'.dak'+'''' ;
                  Sql.Add(str);
                  ExecSQL;
              end;
         except
            Application.MessageBox('数据备份失败!','提示',MB_OK +  MB_ICONSTOP);
            exit;
         end;
          Application.MessageBox('数据库备份成功!','提示',MB_OK + MB_ICONINFORMATION);   end;
    end;
      

  3.   

    数据备份:
    procedure TDataBaseBackUpFM.btnBackUpClick(Sender: TObject);
    begin
      with adocommand1 do
      try
        screen.Cursor := crSqlWait;
        try
          Connection.Connected := false;
          btnBackUp.Enabled := false;
          CommandText := 'Backup DataBase ' + trim(edtDataBaseName.Text) +' to disk = ' +
                  quotedStr(trim(edtBackUpFileName.Text)) + ' with init';
          execute;
          ShowInfoMessage('备份成功');
          btnBackUp.Enabled := true;
        finally
          screen.Cursor := crDefault;
        end;
      except
       on e: exception do
        begin
         ShowErrorMessage('备份失败!原因是:' + e.Message);
          btnBackUp.Enabled := true;
        end;
      end;
    end;
    数据恢复:
    procedure TDataBaseRestoreFM.btnBackUpClick(Sender: TObject);
    begin
      with adocommand1 do
      try
        screen.Cursor := crSqlWait;
        try
          Connection.Connected := false;
          btnBackUp.Enabled := false;
          CommandTExt := 'use master';
          execute;
          CommandText := 'ALTER DATABASE ' + trim(edtDataBaseName.Text) +
            ' SET OFFLINE WITH ROLLBACK IMMEDIATE';
          execute;
          CommandText := 'restore DataBase ' + trim(edtDataBaseName.Text) +' from disk = ' +
                  quotedStr(trim(edtBackUpFileName.Text)) + ' with Replace';
          execute;
           CommandText := 'ALTER DATABASE ' + trim(edtDataBaseName.Text) +
            ' SET ONLINE WITH ROLLBACK IMMEDIATE';
          execute;
          CommandText := 'Use ' + trim(edtDataBaseName.Text);
          execute;      Connection.Connected := true;
          CommandText := 'Use ' + trim(edtDataBaseName.Text);
          execute;
         
          btnBackUp.Enabled := true;
        finally
          screen.Cursor := crDefault;
        end;
      except
       on e: exception do
        begin
         ShowErrorMessage('还原失败!原因是:' + e.Message);
          btnBackUp.Enabled := true;
        end;
      end;