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

本文介绍如何利用Delphi集成开发环境结合SQL Server的SQLDMO对象库实现数据库备份过程。主要内容包括导入对象库定义、创建进度条、定义及实现备份接口等步骤,并给出具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   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;

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值