zoukankan      html  css  js  c++  java
  • Delphi用SQLDMO实现带进度条的SQL Server数据库备份

       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;
  • 相关阅读:
    python numpy 介绍
    python+图像分割seg
    C++ 添加库
    input标签的disabled和readonly的区别
    linux中mysql忘记密码解决办法
    memcached服务安装与卸载
    app与服务端通信时如何进行消息校验
    缓存同步问题
    数据中添加对字段的说明
    服务器报警
  • 原文地址:https://www.cnblogs.com/GarfieldTom/p/2672841.html
Copyright © 2011-2022 走看看