数据库备份同时显示进度条(15号中午结贴放分)

lzg827 2005-09-15 01:32:54
显然是用多线程,不是很复杂,但又做不明白,我也系新手,盼大侠指点,恳求留个源码,能发给Demo给我当然最好了(lzg827@sohu.com).呵呵。
查了很多地方,没有完整的,有的说做个假进度条,直接到99%,完成后再直接到100%。当然,在某些时候,这样的效果也是可以接受的,还恳各位指教。
如果是真进度条,没的说,分给你了!
也有的说直接用控件,拜托留个下载的地址,或者发我邮箱。
其实,很多人都被类似问题困扰,盼望这次能圆满解决,也算为大家做点贡献。
...全文
516 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenylin 2005-09-15
  • 打赏
  • 举报
回复
用SQLDMO对象来做是可以的。
在http://dev.csdn.net/article/67303.shtm中有关于SQLDMO的导入;

有一个DELPHI下的SQL备份控件,能显示备份的百分数,也就可以做进度条。
unit SQLBackup;

interface

uses
Windows, Messages, SysUtils, Classes,SQLDMO_TLB,SQLDMO_Command,ActiveX,ComObj,Forms;

type
TPercentCompleteEvent=procedure(Message: String;Percent:Integer) of object;
TMessageEvent=procedure(Message:String) of object;
TBackupMode= (FullDatabase, Differential);
TSQLBackup = class(TComponent)
private
FServerName: String; //数据库服务器名称
FdatabaseName:String; //数据库名称
FLoginTimeout:Integer;//登陆延时
FBackupMode:TBackupMode;//备份数据模式
FOnPercentComplete: TPercentCompleteEvent;
FOnNextMedia: TMessageEvent;
FOnComplete: TMessageEvent;
oSQLServer:_SQLServer;
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner:TComponent);
destructor Destroy;override;
procedure Connect(UserName:String;Password:String); overload;
procedure Disconnect;
procedure SQLBackup (FileName:String);
property ServerName:String read FServerName write FServerName;
property DataBaseName:String read FdataBaseName write FDatabaseName;
property LoginTimeout:Integer read FLoginTimeout write FLoginTimeout default 30;
property BackupMode:TBackupMode read FBackupMode write FBackupMode;
property PercentComplete:TPercentCompleteEvent read FOnPercentComplete write FOnPercentComplete;
property NextMedia:TMessageEvent read FOnNextMedia write FOnNextMedia;
property Complete:TMessageEvent read FOnComplete write FOnComplete;
published
{ Published declarations }

end;

TBackupSink=class (TInterfacedObject,BackupSink)
private
function PercentComplete(const Message: WideString; Percent: Integer): HResult; stdcall;
function NextMedia(const Message: WideString): HResult; stdcall;
function Complete(const Message: WideString): HResult; stdcall;
public
SQLBackup: TSQLBackup;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Samples', [TSQLBackup]);
end;

{ TSQLBackup }

procedure TSQLBackup.Connect(UserName, Password: String);
begin
try
osqlServer.LoginSecure :=False;
osqlServer.LoginTimeout :=FLoginTimeout;
osqlServer.Connect(FServerName,userName,Password);
except
Raise;
end;
end;

constructor TSQLBackup.Create(AOwner: TComponent);
begin
try
inherited create(AOwner);
osqlServer :=coSqlServer.Create;
oSqlServer._AddRef;
except
Raise;
end;

end;

destructor TSQLBackup.Destroy;
begin
OSqlServer._Release;
osqlServer :=nil;
inherited Destroy;
end;

procedure TSQLBackup.Disconnect;
begin
try
osqlServer.DisConnect;
except
Raise;
end;
end;

procedure TSQLBackup.SQLBackup(FileName: String);
var
obackup :_backUp;
oBackupSink :TBackupSink;
ConnectionPoint:IConnectionPoint;
dwCookie:Integer;
ConnectionPointContainer :IConnectionPointContainer;
begin
try
obackup := cobackup.Create;
obackup._AddRef;
obackup.Database :=FDataBaseName;
if FBackupMode=FullDatabase then
obackup.Action :=SQLDMOBackup_Database
else
obackup.Action :=SQLDMOBackup_Differential;
obackup.Files :=FileName;
oBackupSink :=TBackupSink.Create;
oBackupSink._AddRef;
obackupsink.SQLBackup :=self;
obackup.QueryInterface(IConnectionPointContainer,ConnectionPointContainer);
ConnectionPointContainer._AddRef;
ConnectionPointContainer.FindConnectionPoint(BackupSink,ConnectionPoint);
ConnectionPoint._AddRef;
ConnectionPoint.Advise(oBackupSink,dwCookie);
application.ProcessMessages;
obackup.SQLBackup(oSqlServer);
ConnectionPoint.Unadvise(dwCookie);
obackup._Release;
obackup :=nil;
oBackupSink._Release;
oBackupSink :=nil;
ConnectionPoint._Release;
ConnectionPoint :=nil;
ConnectionPointContainer._Release;
ConnectionPointContainer :=nil;
application.ProcessMessages;
except
Raise;
end;
end;


{ TBackupSink }

function TBackupSink.Complete(const Message: WideString): HResult;
begin
try
SQLBackup.Complete(message);
except
Raise;
end;
end;

function TBackupSink.NextMedia(const Message: WideString): HResult;
begin
try
SQLBackup.NextMedia(message);
except
Raise;
end;

end;

function TBackupSink.PercentComplete(const Message: WideString;
Percent: Integer): HResult;
begin
try
SQLBackup.PercentComplete(message,Percent);
except
Raise;
end;
end;

end.
oushengfen 2005-09-15
  • 打赏
  • 举报
回复
我也想要解决这个问题啊,请高手来解决啊!
china618 2005-09-15
  • 打赏
  • 举报
回复
你要是用假的我就去315协会告发你:-)
lzg827 2005-09-15
  • 打赏
  • 举报
回复
中午了,还没搞定,我也觉得自己太菜了。唉。。。。。吃饭都没胃口。
各位不好意思了,晚上再结贴吧,上面帮顶的都是有分的。

奉上分数,盼望热心大侠
lzg827 2005-09-15
  • 打赏
  • 举报
回复
to: abc3000()
或者用个随机函数,随便到个百分之几,完成后再直接到100%。能放点源码或者给我个Demo吗?
我还不太会用多线程,半天没搞出来。

实在不行,就用假进度条吧。(这年头,都TMD用假的,我也用~~~)那位大侠教我搞定了,马上放分,不够再加。

abc3000 2005-09-15
  • 打赏
  • 举报
回复
基本上都是假的,不过你那个直接到99%,然后直接到100%的也太假了.稍微搞的好一点还是可能的
lzg827 2005-09-15
  • 打赏
  • 举报
回复
各位 起的真早

惭愧 惭愧~~~~~~~`````````

谢谢大家顶帖子,还望高手留点源码,发个Demo。
分不是问题,不够,再开个帖子放分。
qiling023 2005-09-15
  • 打赏
  • 举报
回复
我有是有一个,不知符不符合你的要求!
http://www.tomore.com/1/29238.html
lovendII 2005-09-15
  • 打赏
  • 举报
回复
这个估计 不好做,我的程序,当需要比较久的等待,比如大量的查询或者计算时,

可以让程序在这个查询的过程中显示“查找文件”的那个动画,当查询完毕,就让动画消失。

也许这个是一个简单可行的建议。
hellolongbin 2005-09-15
  • 打赏
  • 举报
回复
占个座
我只要44分,呵呵
板块 专家分 信誉分 等级

Delphi 8844 106
cumtbwxj 2005-09-15
  • 打赏
  • 举报
回复
up
jackie168 2005-09-15
  • 打赏
  • 举报
回复
备份时显示动画。。。,备份完就不显示
jackie168 2005-09-15
  • 打赏
  • 举报
回复
mark
kristy1124 2005-09-15
  • 打赏
  • 举报
回复
up
XXSingle 2005-09-15
  • 打赏
  • 举报
回复
关注一下,好久没碰这东西了
lzg827 2005-09-15
  • 打赏
  • 举报
回复
问题解决了,顿悟。。。。
只是用了先前非常不屑的假进度条。

to:chenylin(陈SIR)
这名字咋这眼熟哩~~~~~。
我很喜欢你的方法,正在研究。

欢迎大家对大侠chenylin(陈SIR) 的方法讨论

晚上结贴放分
lzg827 2005-09-15
  • 打赏
  • 举报
回复
to:abc3000()
^:^! 你是个做假的高手!思维很开阔,想象很丰富,行为很大胆。
总之,很有潜资。。。。
abc3000 2005-09-15
  • 打赏
  • 举报
回复
不好意思,我没有具体的代码.

但我想你也许可以变通的解决,毕竟进度条这东西并不是核心的,你说呢?

你可以让进度条走的很快,0%-100%,再从0%-100%,直到你完成这个工序.每次走一遍的时候你可以在上面加上一写title,别人又不知道是真的还是假的罗

或者你可以把数据库里所有的表的表名都写出来,然后在表名左面糊乱打勾,最后个勾完了就代表做完拉.做的地道点的话可以把最大的表最后勾,这样比较真实.

供参考

2,507

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧