📄 main.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 + -