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;
  • 相关阅读:
    ASP.NET CORE 2.0 模板 (Admin LTE)
    MVC5+EF6 完整教程17--升级到EFCore2.0
    MVC 5 + EF6 完整教程16 -- 控制器详解
    MVC 5 + EF6 完整教程15 -- 使用DI进行解耦
    MVC 5 + EF6 入门完整教程14 -- 动态生成面包屑导航
    MVC5+EF6 入门完整教程13 -- 动态生成多级菜单
    MVC5+EF6 入门完整教程12--灵活控制Action权限
    MVC5+EF6 入门完整教程11--细说MVC中仓储模式的应用
    LeetCode 504. Base 7
    LeetCode 594. Longest Harmonious Subsequence
  • 原文地址:https://www.cnblogs.com/GarfieldTom/p/2672841.html
Copyright © 2011-2022 走看看