我现在做有关数据恢复的功能,之前数据备份的时候我是用当前的日期做备份名的,路径是:e:\数据库\备份数据库名(用当前日期命名),这我已经做好了。现在我想在恢复功能里,按下“读取列表“按钮,就把e:\数据库\里的所有文件都列出到listbox里,然后在listbox里选择我要恢复的备份文件,按“确定恢复“按钮后恢复数据库!
请问:怎么样把文件名添加到listbox里?
怎么样实现数据库的恢复??
请大家帮忙!!谢谢!!
请问:怎么样把文件名添加到listbox里?
怎么样实现数据库的恢复??
请大家帮忙!!谢谢!!
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;
--------------------------------------
看见了么,
那支蛾子,
正飞向太阳,
那就是我!
--------------------------------------
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.
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;
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;测试通过!
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
将其改为:searchrec
问题是怎么样从listbox里选择了你要恢复的文件名后,怎么样恢复数据库哦?具体要用到什么命令和控件!最好是有程序看~ 谢谢!!!我用的是sql server2000
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;
ADOCommand1.Execute;
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;
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;
提供个思路:
直接编写代码不就可以搞定,是吗?
直接把文件copy到相应的路径中覆盖原文件不就得了何必那么麻烦,