我现在做有关数据恢复的功能,之前数据备份的时候我是用当前的日期做备份名的,路径是:e:\数据库\备份数据库名(用当前日期命名),这我已经做好了。现在我想在恢复功能里,按下“读取列表“按钮,就把e:\数据库\里的所有文件都列出到listbox里,然后在listbox里选择我要恢复的备份文件,按“确定恢复“按钮后恢复数据库!
请问:怎么样把文件名添加到listbox里? 
      怎么样实现数据库的恢复??
 请大家帮忙!!谢谢!!

解决方案 »

  1.   

    这是我的备份程序~~~procedure TF_shujukubeifen.BitBtn1Click(Sender: TObject);  //开始备份
    begin
      with DM_xt_shujuku do
      begin
        DT := ''''+DateTimeToStr(date)+'.bak'+'''';
        ADOQ_shujukubeifen.close;
        ADOQ_shujukubeifen.sql.clear;
        ADOQ_shujukubeifen.sql.add('Backup database rsxxglxt to disk=''E:\人事处数    库备份\''' + DT  + 'with init');
        shujukubeifen.execsql;
      end;end;
      

  2.   

    好像有一个叫filelist的控件吧~~,sorry,记不住了。
    --------------------------------------
    看见了么,
    那支蛾子,
    正飞向太阳,
    那就是我!
    --------------------------------------
      

  3.   

    看样子你还真找对人了。
    unit FileExpand;interfaceuses
      SysUtils , Classes;Function SearchFileAt(SPath : String; var StrLS : TStringList) : String; overload;
    Function SearchFileAt(SPath : String ; InChildDir : Boolean ; var StrLS : TStringList ) : String; overload;
    implementationFunction SearchFileAt(SPath : String; var StrLS : TStringList) : String; overload;
    begin
      Result := SearchFileAt(SPath , True,StrLS);
    end;Function SearchFileAt(SPath : String ; InChildDir : Boolean ; var StrLS : TStringList ) : String; overload;
    var
      i: Integer;
      SearchRec: TSearchRec;
      FileName : String;
    begin
      if copy(Spath,Length(Spath),1)<>'\' then SPath := SPath+'\';
      i:=FindFirst(SPath+'*.*',faDirectory,SearchRec);
      while i=0 do begin
        FileName := SearchRec.name;
        if Fileexists(SPath+FileName) then StrLS.Add(SPath+FileName)
        else if (FileName<>'.') and (FileName<>'..') then
           begin
             if InChildDir then  SearchFileAt(SPath+FileName,StrLS)
             else StrLS.Add(SPath+FileName); 
           end
        else if FileName='..' then StrLS.Add(SPath);
        i := FindNext(SearchRec);
      end;
    end;end.
      

  4.   

    var
    Found:integer;
    searchrec:TSearchRec;
    begin
        Found := FindFirst('e:\数据库\*.*', $0000003F , searchrec);
        while Found = 0 do
        begin
          listBox1.items.Add(searchrec.name);
          Found := FindNext(SearchRec);
        end;
    end.准用!
        FindClose(SearchRec);
    end;
      

  5.   

    var
    Found:integer;
    searchrec:TSearchRec;
    begin
        Found := FindFirst('e:\数据库\*.*', $0000003F , searchrec);
        while Found = 0 do
        begin
          listBox1.items.Add(searchrec.name);
          Found := FindNext(SearchRec);
        end;
        FindClose(SearchRec);
    end;测试通过!
      

  6.   

    我把“银雨辰“ 的代码加上去了,但是有错,请请怎么改哦?我的是sql server 2000procedure TF_shujuhuifu.BitBtn1Click(Sender: TObject);
    var
      Found:integer;
      earchrec:TSearchRec;
    begin
        Found := FindFirst('e:\人事处数据库备份\*.*', $0000003F , searchrec);
        while Found = 0 do
         begin
           listBox1.items.Add(searchrec.name);
           Found := FindNext(SearchRec);
         end;
        FindClose(SearchRec);
    end;[Error] shujuhuifu.pas(50): Undeclared identifier: 'searchrec'
    [Error] shujuhuifu.pas(53): ')' expected but identifier 'name' found
    [Error] shujuhuifu.pas(56): Declaration expected but identifier 'FindClose' found
    [Error] shujuhuifu.pas(57): '.' expected but ';' found
    [Warning] shujuhuifu.pas(58): Text after final 'END.' - ignored by compiler
      

  7.   

    第三行定义的变量名是:earchrec
    将其改为:searchrec
      

  8.   

    呵呵~~对不起哦,是我搞错了,现在可以在文件名添加到listbox里了。
    问题是怎么样从listbox里选择了你要恢复的文件名后,怎么样恢复数据库哦?具体要用到什么命令和控件!最好是有程序看~ 谢谢!!!我用的是sql server2000
      

  9.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
    Found:integer;
    searchrec:TSearchRec;
    begin
        Found := FindFirst('c:\*.*', $0000003F , searchrec);
        while Found = 0 do
        begin
          listBox1.items.Add(searchrec.name);
          Found := FindNext(SearchRec);
        end;
        FindClose(SearchRec);
    end;你再仔细检查一下!我测试通过的!searchrec:TSearchRec;
      

  10.   

    ADOCommand1.CommandText := 'RESTORE DATABASE DataBaseName FROM DISK = ' + #39 + ListBox1.Items[ListBox1.ItemIndex]+ #39;
    ADOCommand1.Execute;
      

  11.   

    如果是单用户,用以下的方法可以,但如果是多用户,自己试验一下吧,我也不知道可不可以。
    1. ADOConnection1 连接你的数据库。
    2. ADOConnection2 连接 MASTER 数据库。
    3. ADOCommand1.Connection := ADOConnection2;
    Button.OnClick:
    begin
     DT := ''''+DateTimeToStr(date)+'.bak'+'''';      
      ADOConnection1.Connected := False;
      ADOCommand1.CommandText := 'BACKUP DATABASE rsxxglxt TO DISK = ' + #39   ADOCommand1.Execute;
      ADOCommand1.CommandText := 'ALTER DATABASE rsxxglxt SET OFFLINE WITH ROLLBACK IMMEDIATE';
      ADOCommand1.Execute;
      ADOCommand1.CommandText := 'RESTORE DATABASE rsxxglxt FROM DISK = ' + #39 + 'E:\人事处数库备份\'+ DT + #39;
      ADOCommand1.Execute;
      ADOCommand1.CommandText := 'ALTER DATABASE rsxxglxt SET ONLINE WITH ROLLBACK IMMEDIATE';
      ADOCommand1.Execute;
      ADOConnection1.Connected := True;
      ADOTable1.Active := true;
    end;
      

  12.   

    这是我数据恢复的代码,编译通过,但是在使用数据恢复的时候他说:project projict1.exe
    rased exception calss EOleexception with message 第一行 2003 附近有语法错误 ,怎样改哦?这是代码!!
    procedure TF_shujuhuifu.BitBtn2Click(Sender: TObject);
    begin  DT := ''''+DateTimeToStr(date)+'.bak'+'''';
      ADOConnection1.Connected := False;
      //ADOCommand1.CommandText := 'BACKUP DATABASE rsxxglxt TO DISK = ' + #39;
      //ADOCommand1.Execute;
      //ADOCommand1.CommandText := 'ALTER DATABASE rsxxglxt SET OFFLINE WITH ROLLBACK IMMEDIATE';
      //ADOCommand1.Execute;
      ADOCommand1.CommandText := 'RESTORE DATABASE rsxxglxt FROM DISK = ' + #39 + 'ListBox1.Items[ListBox1.ItemIndex]'+  DT + #39;
      ADOCommand1.Execute;
      ADOCommand1.CommandText := 'ALTER DATABASE rsxxglxt SET ONLINE WITH ROLLBACK IMMEDIATE';
      ADOCommand1.Execute;
      ADOConnection1.Connected := True;
      showmessage('数据库恢复成功!');
    end;
      

  13.   

    呵呵,你恢复数据库的时候为什么非要用到那个控件 呢
    提供个思路:
    直接编写代码不就可以搞定,是吗?
    直接把文件copy到相应的路径中覆盖原文件不就得了何必那么麻烦,
      

  14.   

    ADOCommand1.CommandText := 'RESTORE DATABASE rsxxglxt FROM DISK = ' + #39 + 'e:\人事处数据库备份\'+ListBox1.Items[ListBox1.ItemIndex] + #39;