高手请进,很急的问题!(150分)(150分)

  • 主题发起人 主题发起人 yingtao
  • 开始时间 开始时间
Y

yingtao

Unregistered / Unconfirmed
GUEST, unregistred user!

想实现一下结果:
在我的系统里,当我要做数据库备份是,我用一个Progressbar来显示进度,
如何使Progressbar与我的数据库备份同步,既我的数据库备份完毕,progressbar
也走完!
 
准确的进度显示好像是不行.
主要是不知道服务器端的完成度
 
还有,你是什么数据库、用什么办法备份?(你自己读数据还是使用数据库带来的工具?)
 
当然不回是准确的,大概就行!
 
我是ACCESS数据库,用文件的方法备份!数据我自己读!
 
哦,是文件备份啊!想了一下,大概有三种方法:
1、用第三方的备份压缩控件,象VCLZip什么的,有进度,还能压缩。
2、直接拷贝,用块读块写的方法,这样就能控制读写总数了,D5开发指南上有讲。
3、用ShFileOperation来拷贝文件,也是直接拷贝,但Windows会自动提供一个窗体
显示进度。

总的来说,1效果比较好,2比较好控制,3来得最快。
 
to 杜宝, :
1,我没有该控件。
2,我没有这书,太贵。
3,我不会。
 
呵呵:
1、下地方下!
2、上网下电子版
3、这个比较简单:
Uses ...
ShellAPI;//加上这个单元
...
var
FData: TShFileOpStruct;
Src,Dst :String;
begin
Src := 'C:/1.mdb';
Dst := 'C:/1.bak';
Fdata.pFrom := PChar(Src);
fdata.pTo := PChar(Dst);
fdata.wFunc := FO_COPY;
FData.Wnd := Application.Handle;
fData.lpszProgressTitle := '正在备份';
fData.fFlags :=
FOF_NOCONFIRMATION or
FOF_SIMPLEPROGRESS;
fData.hNameMappings := nil;
fData.fAnyOperationsAborted := True;

ShFileOperation(FData);
end;
 
害得我找光盘,补完:
方法二:
...
type
TMainForm = class(TForm)
prbCopy: TProgressBar;
btnCopy: TButton;
procedure btnCopyClick(Sender: TObject);
end;

var
MainForm: TMainForm;

implementation

{$R *.DFM}

procedure TMainForm.btnCopyClick(Sender: TObject);
var
SrcFile, DestFile: File;
BytesRead, BytesWritten, TotalRead: Integer;
Buffer: array[1..500] of byte;
FSize: Integer;
begin
{ Assign both the source and destination files to their
respective file variables }
AssignFile(SrcFile, 'C:/1.mdb'); //打开源文件
AssignFile(DestFile, 'C:=1.bak');//设定目标文件
Reset(SrcFile, 1);//定位到源文件头
try
Rewrite(DestFile, 1);//定位到目标文件头
try
try
TotalRead := 0;//初始化记数器
FSize := FileSize(SrcFile); //取源文件大小
repeat
BlockRead(SrcFile, Buffer, SizeOf(Buffer), BytesRead);//块读源文件
if BytesRead > 0 then //读到东东了
begin
//写目标文件
BlockWrite(DestFile, Buffer, BytesRead, BytesWritten);
if BytesRead <> BytesWritten then
//出错处理
raise Exception.Create('Error copying file')
else begin
TotalRead := TotalRead + BytesRead;
//改变进度
prbCopy.Position := Trunc(TotalRead / Fsize) * 100;
prbCopy.Update;
end;
end
until BytesRead = 0; //直到读完!
except
{ On an exception, erase the destination file as it may be
corrupt. Then re-raise the exception. }
Erase(DestFile);
raise;
end;
finally
CloseFile(DestFile); // Close the destination file.
end;
finally
CloseFile(SrcFile); // Close the source file.
end;
end;

 
后退
顶部