• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Delphi用SQLDMO实现带进度条的SQLServer数据库备份

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

   1.首先,要导入对象库定义:

    打开Delphi,Project菜单->Import Type Library...,在列表框中找到"Microsoft SQLDMO Object
Library”,然后生成一个Unit单元文件,默认为SQLDMO_TLB,然后在备份窗体中加入引用:SQLDMO_TLB,还有ComObj。

   2.在窗体中加入一个进度条,将总进度设置为100(或在代码中设置)。

   3.定义接口:

 

type
  TBackupSink=class(TInterfacedobject,backupsink)//实现接口
  function PercentComplete(const Message: WideString; Percent: Integer): HResult; stdcall;
  function NextMedia(const Message: WideString): HResult; stdcall;
  function Complete(const Message: WideString): HResult; stdcall;

 

 4.实现

 

function TBackupSink.PercentComplete(const Message: WideString; Percent: Integer):HResult;
begin
  frmBackupDatabase.prgCompress.PartsComplete:=percent;
  result:=0;
  frmBackupDatabase.Refresh;
  Forms.Application.ProcessMessages;
end;

function TBackupSink.NextMedia(const Message: WideString):HResult;
begin
  result:=-1;
end;

function TBackupSink.Complete(const Message: WideString):HResult;
begin
  result:=1;
  messageBox(Forms.Application.handle,'成功备份数据!','提示信息',MB_ICONINFORMATION);
end;

 

5.下面是备份按钮的操作

 

注意,引入的SQLDMO_TLB单元有许多类型定义和Delpgi冲突,如Application,建议在原Delphi的类型前加上限定,如Forms.Application。

procedure TfrmBackupDatabase.BackupDatabaseBySQLDMO;
var
  MySQLServer:SQLServer;
  MyBackUp:BackUp2;
  MyBackSink:TBackupSink;
  FInterfaceConnection:integer;
  BS:TBackupSink;
begin
  prgCompress.TotalParts:=100;
  BS:=TBackupSink.Create;
  MySQLServer:=coSQLServer.Create;
  MyBackUp:=coBackUp2.Create;
  MySQLServer.Connect(DBServer,DBUser,DBPassword);
  MyBackUp.Database:=edtDatabaseName.Text;
  MyBackUp.Initialize:=true;
  MyBackUp.PercentCompleteNotification:=1;
  MyBackUp.Action:=0;//0完整备份,1差异备份,2文件组备份,3日志备份
  MyBackUp.Files:=edtFileName.Text;
  InterfaceConnect(MyBackUp, IID_BackupSink, BS, FInterfaceConnection);//关键是这里
  MyBackUp.SQLBackup (MySQLServer);
  InterfaceDisconnect(MyBackUp, IID_BackupSink,FInterfaceConnection);//
end;

 

function TBackupSink.PercentComplete(const Message: WideString; Percent: Integer):HResult;
begin
  frmBackupDatabase.prgCompress.PartsComplete:=percent;
  result:=0;
  frmBackupDatabase.Refresh;
  Forms.Application.ProcessMessages;
end;

function TBackupSink.NextMedia(const Message: WideString):HResult;
begin
  result:=-1;
end;

function TBackupSink.Complete(const Message: WideString):HResult;
begin
  result:=1;
  messageBox(Forms.Application.handle,'成功备份数据!','提示信息',MB_ICONINFORMATION);
end;

 

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
matlab绘制绘制频率分布直方图和分布拟合 - 猪冰龙发布时间:2022-07-18
下一篇:
matlab 画三维曲线图示例发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap