为什么要用这两个控件呢?他们应当不提供你想做的事情的功能。 如果我没有猜错,你是希望在savedialog中输入文件名后,就触发数据备份操作; 在opendialog中选择文件名后,就触发恢复操作。是吗? 那如果是这样的话,代码可以这样写: if opendialog.execute then datarestore(opendialog.filename);if savedialog.execute then databackup(savedialog.filename);
to cobi: 您猜错了,我只是知道这两个可以用,我只是要实现数据根据时间从数据库备份和恢复! to yyb2000: 我想打开和保存一些数字和两个时间!
to 飞翔的鹰 远程数据库还是本地数据库还是某个目录的几个txt文件???如果是远程数据库如果的某几个表的备份,你可以在程序中调用BCP来做,当然可以用dialog来确定备份文件名和路径或者采用delphi的batchmove控件来把数据库中的表做成bcp、foxpro、txt类型的备份文件,恢复也可以用batchmove控件实现,你说的两个控件只能是辅助提供选择文件名而已,其实很简单的oicq 299942
用opendialog和savedialog完成,但不知你要备份的数据是何种类型,现以文档为例,假设有一个richedit对象 备份: if savedialog.execute then richedit1.lines.savetofile(savedialog.filename);恢复: if opendialog.execute then richedit1.lines.loadfromfile(opendialog.filename);
能帮帮我吗?
to all:
弟兄们,看在delphi的面子上,拉兄弟一把吧!!
如果我没有猜错,你是希望在savedialog中输入文件名后,就触发数据备份操作;
在opendialog中选择文件名后,就触发恢复操作。是吗?
那如果是这样的话,代码可以这样写:
if opendialog.execute then
datarestore(opendialog.filename);if savedialog.execute then
databackup(savedialog.filename);
您猜错了,我只是知道这两个可以用,我只是要实现数据根据时间从数据库备份和恢复!
to yyb2000:
我想打开和保存一些数字和两个时间!
但具体到数据的备份还要靠程序来实现。这你我可以提供一种方法:1)用opendialog返回用户要所选择的备份文件名 2)用两个Ttable 或TQuery 分别连接到源数据库(表)和目标数据库(表)。3)逐条记录的将源记录一条一条的“复制”过来。4)至于你的“时间段”用where 子句就可以搞定。 别忘了加分。
远程数据库还是本地数据库还是某个目录的几个txt文件???如果是远程数据库如果的某几个表的备份,你可以在程序中调用BCP来做,当然可以用dialog来确定备份文件名和路径或者采用delphi的batchmove控件来把数据库中的表做成bcp、foxpro、txt类型的备份文件,恢复也可以用batchmove控件实现,你说的两个控件只能是辅助提供选择文件名而已,其实很简单的oicq 299942
备份:
quy_back.close;
quy_back.sql.clear;
quy_back.sql.add('backup database ht to disk=:dir');
quy_back.ParamByName('dir').asstring:=et_dir.Text ;
quy_back.execsql;
messagedlg('备份到服务器的'+et_dir.text,mtInformation ,[mbyes],0);
close;
恢复:
quy_kill.Close;
quy_kill.SQL.Clear ;
quy_kill.SQL.Add('restore database ht from disk=:p'); quy_kill.ParamByName ('p').asstring:=et_dir.text;
quy_kill.execsql;
quy_kill.Close;
quy_all.close;
messagedlg('恢复成功',mtinformation,[mbyes],0);
dm_bargain.dbs_bargain.connected:=false;
dm_bargain.dbs_bargain.connected:=true;
close;
备份:
if savedialog.execute then
richedit1.lines.savetofile(savedialog.filename);恢复:
if opendialog.execute then
richedit1.lines.loadfromfile(opendialog.filename);
1.本地数据库是什么数据库;
2.备份要备份成什么样的文件;
3.文件名不是个重要的问题,其实你可以让程序根据备份时间自行设定
4.恢复的操作是要有用户完成吗?
或许你说明白了这些,我可以给你代码,因为我自己也写过
function TForm1.DataIn(Cds1:TclientDataSet;Cds2:TclientDataSet;Cds3:TclientDataSet;Filename:string):boolean;
Var SourceStream,LastStream,TempStream:TmemoryStream;
len1,len2,len3:integer; //三个CDS流化后的长度
Buffer1 :array[0..9] of char;
Buffer2 :array[0..9] of char;
Buffer3 :array[0..9] of char;
begin
Result:=false;
SourceStream:=TMemoryStream.Create();
SourceStream.LoadFromFile(Filename);
TempStream:=Tmemorystream.Create();
LastStream:=SourceStream;
LastStream.Read(buffer1,10);
LastStream.Read(buffer2,10);
LastStream.Read(buffer3,10);
Len1:=StrToInt(buffer1);
Len2:=StrToInt(buffer2);
Len3:=StrToInt(buffer3); LastStream.Position:=30; //位置偏移量 TempStream.Clear;
TempStream.CopyFrom(Laststream,len1);
TempStream.Position:=0;
cds1.LoadFromStream(Tempstream);
LastStream.Position:=30+len1; TempStream.Clear;
TempStream.CopyFrom(Laststream,len2);
TempStream.Position:=0;
cds2.LoadFromStream(Tempstream);
LastStream.Position:=30+len1+len2; TempStream.Clear;
TempStream.CopyFrom(Laststream,len3);
TempStream.Position:=0;
cds3.LoadFromStream(Tempstream); SourceStream.Free; TempStream.Free;end;
function TForm1.DataOut(Cds1:TclientDataSet;Cds2:TclientDataSet;Cds3:TclientDataSet;Filename:string):boolean;
Var LastStream,TempStream:TmemoryStream;
len1,len2,len3:integer; //三个CDS流化后的长度
Buffer1 :array[0..9] of char;
Buffer2 :array[0..9] of char;
Buffer3 :array[0..9] of char;
begin
Result:=false;
LastStream:=TmemoryStream.Create();
TempStream:=TmemoryStream.Create(); cds1.SaveToStream(tempStream);
Len1:=TempStream.Size;
StrLcopy(Buffer1,Pchar(IntToStr(Len1)),40);
tempStream.Clear;
cds2.SaveToStream(tempStream);
Len2:=TempStream.Size;
StrLcopy(Buffer2,Pchar(IntToStr(Len2)),40); tempStream.Clear; cds3.SaveToStream(tempStream);
Len3:=TempStream.Size;
StrLcopy(Buffer3,Pchar(IntToStr(Len3)),40); tempStream.Clear; LastStream.Position:=0;
LastStream.Write(buffer1,10);
LastStream.Write(buffer2,10);
LastStream.Write(buffer3,10);
LastStream.Position:=0;
TempStream.Clear;
cds1.SaveToStream(TempStream);
TempStream.Position:=0; LastStream.Position:=30; //随CDS个数变化
LastStream.CopyFrom(TempStream,TempStream.Size); TempStream.Clear;
cds2.SaveToStream(TempStream);
TempStream.Position:=0;
LastStream.CopyFrom(TempStream,TempStream.Size); TempStream.Clear;
cds3.SaveToStream(TempStream);
TempStream.Position:=0;
LastStream.CopyFrom(TempStream,TempStream.Size); TempStream.Free;
LastStream.SaveToFile(Filename);
LastStream.Free;
end;