CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

我做了个SQL server数据库备份小程序,想做个进度条

楼主atang(阿汤)2005-10-26 10:00:15 在 Delphi / VCL组件开发及应用 提问

我做了个SQL   server数据库备份小程序,想做个进度条,因为数据库比较大,备份的时候如果没有进度条提示,就象死机似的 问题点数:100、回复次数:7Top

1 楼9807146wang(少他妈跟我扯犊子)回复于 2005-10-26 10:04:02 得分 0

用进度条控件就可以了,然后设置step=1,还有spID吧Top

2 楼yanlls(拒绝日货(美女除外))回复于 2005-10-26 10:05:30 得分 0

估计只能作个假的Top

3 楼aiirii(ari-http://spaces.msn.com/members/aiirii/)回复于 2005-10-26 10:25:09 得分 0

有个sql   server   的   COM   组件,可以实现回调,但在delphi试验不出,   用vb,   c#就可,   奇怪Top

4 楼oushengfen(逸帆)回复于 2005-10-26 10:40:13 得分 100

用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.  
  Top

5 楼superyys(无血野人)回复于 2005-10-26 10:59:21 得分 0

楼上的是好东东,收藏Top

6 楼bluekitty(软件黑领)回复于 2005-10-26 11:14:40 得分 0

to     oushengfen(逸帆)   (   )   信誉:88    
  收了Top

7 楼xjp_1999(中)回复于 2006-04-03 16:13:22 得分 0

收藏Top

相关问题

  • 求一备份数据库(即access)的小程序
  • SQL Server数据库备份和恢复时如何显示进度条?谢谢
  • sql的备份
  • sql server备份
  • sql server备份
  • 大家来看看PL/SQL的小程序有什么问题?
  • 请问哪里有将HQL转成SQL的小程序啊?
  • 在使SQL SERVER数据库进行数据备份和恢复时如何显示进度条?
  • sql数据备份?
  • SQL备份问题?

关键词

  • 数据库
  • sql
  • server
  • 备份
  • fdatabasename
  • fbackupmode
  • flogintimeout
  • fservername
  • tbackupmode
  • tpercentcompleteevent

得分解答快速导航

  • 帖主:atang
  • oushengfen

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo