我是选择了备份保存路径之后,点击“数据库备份”,提示“备份成功”,然而进入指定的保存文件夹里面后,却发现数据库没有被备份,我想可能是这几句SQL语句有问题,我顺便把源代码贴出来吧,望各位大虾赐教:
==============================================
==============声明部分========================
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, RzTabs, ComCtrls, StdCtrls, RzLabel, DB, ADODB,IniFiles;type
  TForm1 = class(TForm)
    RzPageControl1: TRzPageControl;
    TabSheet1: TRzTabSheet;
    TabSheet2: TRzTabSheet;
    RzLabel1: TRzLabel;
    Search_B: TButton;
    Copy_B: TButton;
    Edit1: TEdit;
    RadioButton1: TRadioButton;
    RzLabel2: TRzLabel;
    Edit2: TEdit;
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    StatusBar1: TStatusBar;
    ADOQuery1: TADOQuery;
    procedure FormCreate(Sender: TObject);
    procedure Search_BClick(Sender: TObject);
    procedure Copy_BClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
  db_name,pathname,path1,db_name1:string;
  usename,psw,connectionstring:string;    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;
implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
var
     databasename:string;
     Ini:TIniFile;begin
  Ini:=TInifile.Create(ExtractFileDir(Application.ExeName)+ '\config.INI' );
   try
    usename:=Ini.ReadString('sqlconfig','usename','sa');
    psw:=Ini.Readstring('sqlconfig','psw','1');
    connectionstring:=Ini.ReadString('Connection_set','connectionstring','');
//    Persist SecurityInfo:=Ini.Readboolean('Form','Persist SecurityInfo',False);
//    User ID:=Ini.ReadString('Form','usename','sa');
//    Initial Catalog:=Ini.ReadString('Form','usename','data_student');
//    Data Source:=Ini.ReadString('Form','usename','LIXIANYING');
//    Password:=Ini.ReadString('Form','usename','1');
    Ini.Free;
   Finally   databasename:='data_student';
   db_name:='data_student';
   StatusBar1.Panels.Items[0].Text:='系统备份/恢复 面板'; end;
   if (Trim(Edit1.text)<>'') then
   Copy_B.enabled:=True;
    ADOQuery1.ConnectionString :=  connectionstring;
end;
==============================================================
==============================================================
==============================================   
 其中 “备份”面板就两个按钮
procedure TForm1.Search_BClick(Sender: TObject);begin
   if SaveDialog1.Execute then
   begin
      Edit1.Text:=SaveDialog1.FileName;
      pathname:=SaveDialog1.filename;
      db_name:=Copy(ExtractFileName(pathname),1 ,Length(ExtractFileName(pathname))-4);
   end;
end;procedure TForm1.Copy_BClick(Sender: TObject);begin
  { ADOQuery1:=TADOQuery.create(self);}   Copy_B.Enabled:=false;
   StatusBar1.Panels.Items[0].Text:='备份中';
   if(Trim(db_name)<>'') then
   begin
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Text:='use master EXEC  sp_addumpdevice ''disk'','+QuotedStr(connectionstring)+','+QuotedStr(Trim(pathname));
      try
      //ADOQuery1.Open;
      ADOQuery1.ExecSQL;
      except
      ShowMessage('数据库发生异常');
      StatusBar1.Panels.Items[0].Text:='备份失败!';
      Abort;
      end;
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Text:='use master EXEC sp_addumpdevice ''disk'','+QuotedStr(db_name)+','+QuotedStr(Trim(pathname));
      try
      ADOQuery1.ExecSQL;
      showmessage('备份成功');
      StatusBar1.Panels.Items[0].Text:='备份成功';
      except
      ShowMessage('数据库发生异常');
      StatusBar1.Panels.Items[0].Text:='备份失败';
      Abort;
      end;      showmessage('应用程序将重启,以完成备份');
      ADOQuery1.Free;
      Application.Terminate;
   end;
end;=================

解决方案 »

  1.   

    backup database 数据库 to disk='c:\你的备份文件名' with init  --加上此选项
      

  2.   

    请问一下大侠能不能把改正了的那个语句源码写出来呀,我有点不懂=================================
    是这一句要改
    ADOQuery1.SQL.Text:='use master EXEC  sp_addumpdevice ''disk'','+QuotedStr(connectionstring)+','+QuotedStr(Trim(pathname));=================================
    还是这一句要改呢
     ADOQuery1.SQL.Clear;
          ADOQuery1.SQL.Text:='use master EXEC sp_addumpdevice ''disk'','+QuotedStr(db_name)+','+QuotedStr(Trim(pathname));
    ==================================
    “加上此选项”是加上  backup database 数据库 to disk='c:\你的备份文件名' with init  
    还是只要加上   ='c:\你的备份文件名' with init  
    呀?
      

  3.   

    给你一个函数,你参考:
    function pBackupDataBase(DataBaseName, BackupFileName : String) : Boolean;
    var
      TempTab : TADOQuery;
    begin
      if FileExists(BackupFileName) then DeleteFile(BackupFileName);  TempTab := TADOQuery.Create(nil);
      try
        TempTab.Connection := pvADOConn;     //连接
        TempTab.SQL.Add('USE '+DataBaseName);
        TempTab.SQL.Add('BACKUP DATABASE '+DataBaseName+' TO DISK = '''+ BackupFileName+'''');
        TempTab.ExecSQL;
        TempTab.Free;
        Result := True;
      except
        TempTab.Free;
        Result := False;
      end;
    end;
      

  4.   

    备份时不需要use master 
    只有恢复时才需要
      

  5.   

    //备份应在数据库服务器的机子上执行
    参考如下
    ExecuteSql('use master');
    ExecuteSql(Format('BACKUP DATABASE %s TO  DISK = ''%s'' with REWIND',[g_sDefaultdb,FileName]));
    ExecuteSql(format('backup log %s with no_log',[g_sDefaultdb]));
    ExecuteSql(Format('use %s',[g_sDefaultdb]));