⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.pas

📁 小新写的Delphi用SQLDMO实现控制SQL Server状态的程序
💻 PAS
字号:
unit main;

{==============================
小新在线 原创
http://www.sgxcn.com
===============================}

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, winsvc, StdCtrls, ComObj, Winsock, ComCtrls, Buttons, ExtCtrls;

const
  SQLDMOSvc_Continuing = 6; //Service execution state in transition from paused to running
  SQLDMOSvc_Paused = 2; // Service execution is paused
  SQLDMOSvc_Pausing = 7; // Service execution state in transition from running to paused
  SQLDMOSvc_Running = 1; // Service is running
  SQLDMOSvc_Starting = 4; // Service execution state in transition from stopped to running
  SQLDMOSvc_Stopped = 3; // Service is stopped
  SQLDMOSvc_Stopping = 5; // Service execution state in transition from running to stopped
  SQLDMOSvc_Unknown = 0; // Unable to determine service execution state

type
  TFormMain = class(TForm)
    stat1: TStatusBar;
    btnReStart: TBitBtn;
    btnClose: TBitBtn;
    tmr1: TTimer;
    btnStart: TBitBtn;
    btnStop: TBitBtn;
    lbl1: TLabel;
    procedure tmr1Timer(Sender: TObject);
    procedure btnReStartClick(Sender: TObject);
    procedure btnCloseClick(Sender: TObject);
    procedure btnStartClick(Sender: TObject);
    procedure btnStopClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FormMain: TFormMain;

implementation

{$R *.dfm}

function GetSqlServiceStatus: LongInt;
var
  SrvHandle: SC_HANDLE; //这些都在winsvc单元中定义的
  Service_Status: _SERVICE_STATUS; //在winsvc单元中有定义
  SrvStatus: Integer;
begin
  //取sql server的状态,如果sql server正在运行则返回true ,否则返回 false
  SrvHandle := OpenSCManager('', SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS);
  SrvHandle := OpenService(SrvHandle, PChar('MSSQLServer'), SERVICE_QUERY_STATUS or SERVICE_START);
  if QueryServiceStatus(SrvHandle, Service_Status) then
  begin
    //返回Sql Server服务的状态
    Result := Service_Status.dwCurrentState;
  end
  else
    Result := 0;
end;

procedure TFormMain.tmr1Timer(Sender: TObject);
begin
  case GetSqlServiceStatus of
    0:
      begin
        stat1.Panels[1].Text := 'SQL Server 状态未知';
        btnStart.Enabled := False;
        btnStop.Enabled := False;
        btnReStart.Enabled := False;
      end;
    SERVICE_STOPPED:
      begin
        stat1.Panels[1].Text := 'SQL Server 已经停止';
        btnStart.Enabled := True;
        btnStop.Enabled := False;
        btnReStart.Enabled := True;
      end;
    SERVICE_START_PENDING: stat1.Panels[1].Text := 'SQL Server 正在启动';
    SERVICE_STOP_PENDING: stat1.Panels[1].Text := 'SQL Server 正在停止';
    SERVICE_RUNNING:
      begin
        stat1.Panels[1].Text := 'SQL Server 已经启动';
        btnStart.Enabled := False;
        btnStop.Enabled := True;
        btnReStart.Enabled := True;
      end;
    SERVICE_CONTINUE_PENDING: stat1.Panels[1].Text := 'SQL Server 被继续中';
    SERVICE_PAUSE_PENDING: stat1.Panels[1].Text := 'SQL Server 被暂停中';
    SERVICE_PAUSED: stat1.Panels[1].Text := 'SQL Server 已被暂停';
  end;
end;

procedure TFormMain.btnReStartClick(Sender: TObject);
var
  SQLServer: Variant;
begin
  { 创建主 SQLDMO COM 自动操作对象 }
  btnReStart.Enabled := False;
  try
    SQLServer := CreateOleObject('SQLDMO.SQLServer');
  except
    Application.MessageBox('您的电脑上没有安装 Microsoft SQL Server !', '系统信息');
    exit;
  end;
  SQLServer.name := '.';
  SQLServer.LoginSecure := True;
  try
    if SQLServer.Status = SQLDMOSvc_Running then //if Runing
    begin
      try
        SQLServer.Connect('.');
      except
        Application.MessageBox('无法连接到 Microsoft SQL Server,请确认数据库服务器是否启动!',
          '系统信息');
        exit;
      end;
      stat1.Panels[0].Text := '正在停止SQL Server';
      Application.ProcessMessages;
      try
        SQLServer.stop;
        SQLServer.DisConnect;
      except
        Application.MessageBox('无法停止 Microsoft SQL Server !', '系统信息');
        exit;
      end;
    end;
    while SQLServer.Status <> SQLDMOSvc_STOPPED do //停止完成
    begin
      Sleep(55);
      Application.ProcessMessages;
    end;
    stat1.Panels[0].Text := '正在启动SQL Server';
    try
      SQLServer.Start(false, '.');
    except
      Application.MessageBox('启动 SQL Server 失败!', '系统信息');
      exit;
    end;
    while SQLServer.Status <> SQLDMOSvc_Running do //启动完成
    begin
      Sleep(55);
      Application.ProcessMessages;
    end;
  except
    Application.MessageBox('重新启动失败!', '系统信息');
    Exit;
  end;
  Application.MessageBox('重新启动成功!', '系统信息');
  SQLServer.Close;
end;

procedure TFormMain.btnCloseClick(Sender: TObject);
begin
  Close;
end;

procedure TFormMain.btnStartClick(Sender: TObject);
var
  SQLServer: Variant;
begin
  { 创建主 SQLDMO COM 自动操作对象 }
  btnStart.Enabled := False;
  try
    SQLServer := CreateOleObject('SQLDMO.SQLServer');
  except
    Application.MessageBox('您的电脑上没有安装 Microsoft SQL Server !', '系统信息');
    exit;
  end;
  SQLServer.name := '.';
  SQLServer.LoginSecure := True;
  if SQLServer.Status = SQLDMOSvc_Running then //if Runing
  begin
    Application.MessageBox('SQL Server 已经在运行中!', '系统信息');
    exit;
  end;
  try
    stat1.Panels[0].Text := '正在启动SQL Server';
    try
      SQLServer.Start(false, '.');
    except
      Application.MessageBox('启动 SQL Server 失败!', '系统信息');
      exit;
    end;
    while SQLServer.Status <> SQLDMOSvc_Running do //启动完成
    begin
      Sleep(55);
      Application.ProcessMessages;
    end;
  except
    Application.MessageBox('SQL Server启动失败!', '系统信息');
    Exit;
  end;
  Application.MessageBox('SQL Server启动成功!', '系统信息');
  SQLServer.Close;
end;

procedure TFormMain.btnStopClick(Sender: TObject);
var
  SQLServer: Variant;
begin
  { 创建主 SQLDMO COM 自动操作对象 }
  btnStop.Enabled := False;
  try
    SQLServer := CreateOleObject('SQLDMO.SQLServer');
  except
    Application.MessageBox('您的电脑上没有安装 Microsoft SQL Server !', '系统信息');
    exit;
  end;
  SQLServer.name := '.';
  SQLServer.LoginSecure := True;
  if SQLServer.Status = SQLDMOSvc_Stopped then
  begin
    Application.MessageBox('SQL Server 已经停止!', '系统信息');
    exit;
  end;
  try
    if SQLServer.Status = SQLDMOSvc_RUNNING then //if Runing
    begin
      try
        SQLServer.Connect('.');
      except
        Application.MessageBox('无法连接到 Microsoft SQL Server,请确认数据库服务器是否启动!',
          '系统信息');
        exit;
      end;
      stat1.Panels[0].Text := '正在停止SQL Server';
      Application.ProcessMessages;
      try
        SQLServer.stop;
        SQLServer.DisConnect;
      except
        Application.MessageBox('无法停止 Microsoft SQL Server !', '系统信息');
        exit;
      end;
    end;
    while SQLServer.Status <> SQLDMOSvc_Stopped do //停止完成
    begin
      Sleep(55);
      Application.ProcessMessages;
    end;
  except
    Application.MessageBox('SQL Server 停止失败!', '系统信息');
    Exit;
  end;
  Application.MessageBox('SQL Server 停止成功!', '系统信息');
  SQLServer.Close;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -