关于如何判断SQL Server是否处于开启状态,请看如下的代码: ======================================================== procedure TForm1.Button1Click(Sender: TObject); var lpServiceArgVectors: PChar; hscmanager,hService: SC_HANDLE; returnstatus: TServiceStatus; html: String; exeresult: Boolean; begin lpServiceArgVectors:=nil; // 打开service control manager database hscmanager:=OpenSCManager(nil,nil,SC_MANAGER_ENUMERATE_SERVICE); //打开该Service hService:=OpenService(hscmanager,'MSSQLSERVER',SERVICE_ALL_ACCESS); if(hService<0) then begin html:='无法打开该Service'; showmessage(html); exit; end; //查看该Service的状态 QueryServiceStatus(hService,returnstatus);
//如果该Service已停止则启动它 if returnstatus.dwCurrentState=SERVICE_STOPPED then begin html:=html+'正在启动SQL SERVER数据库...'; showmessage(html); StartService(hService,0,lpServiceArgVectors); html:=html+'启动成功.'; showmessage(html); end else html:=html+'无法打开SQL SERVER'+inttostr(returnstatus.dwServiceType); //关闭该Service CloseServiceHandle(hService); showmessage(html); end;
1. try Datas.ADOConnection1.Connected:=True; except on E:exception do Showmessage(E.message) end;2. try DataBase1.Connected:=True; except on E:exception do //更正 Showmessage(E.Message); //顯示錯誤訊息 end; 3. 用 BDE TDatabase.Connected:=True ... 若 Server Not Active 時,須等到 Connect TimeOut ( BDE Admin Native MSSQL Driver Default 60 Seconds.)以下用 TClientSocket 去試看看SQL Server是否開啟:procedure TForm1.ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin if ErrorEvent = eeConnect then begin Caption := 'SQL Server is not Actived.'; ErrorCode := 0; // Reset Error end; end;procedure TForm1.Button1Click(Sender: TObject); begin ClientSocket1.Close; ClientSocket1.Host := 'localhost'; ClientSocket1.Port := 1433; ClientSocket1.Open; Caption := 'Testing SQL Server Active...'; end;procedure TForm1.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); begin Caption := 'SQL Server is ready.'; end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin if ClientSocket1.Active then ClientSocket1.Close; end;
========================================================
procedure TForm1.Button1Click(Sender: TObject);
var
lpServiceArgVectors: PChar;
hscmanager,hService: SC_HANDLE;
returnstatus: TServiceStatus;
html: String;
exeresult: Boolean;
begin
lpServiceArgVectors:=nil; // 打开service control manager database
hscmanager:=OpenSCManager(nil,nil,SC_MANAGER_ENUMERATE_SERVICE);
//打开该Service
hService:=OpenService(hscmanager,'MSSQLSERVER',SERVICE_ALL_ACCESS);
if(hService<0) then
begin
html:='无法打开该Service';
showmessage(html);
exit;
end; //查看该Service的状态
QueryServiceStatus(hService,returnstatus);
//如果该Service已停止则启动它
if returnstatus.dwCurrentState=SERVICE_STOPPED then
begin
html:=html+'正在启动SQL SERVER数据库...';
showmessage(html);
StartService(hService,0,lpServiceArgVectors);
html:=html+'启动成功.';
showmessage(html);
end
else
html:=html+'无法打开SQL SERVER'+inttostr(returnstatus.dwServiceType); //关闭该Service
CloseServiceHandle(hService);
showmessage(html);
end;
try
Datas.ADOConnection1.Connected:=True;
except
on E:exception do
Showmessage(E.message)
end;2.
try
DataBase1.Connected:=True;
except
on E:exception do //更正
Showmessage(E.Message); //顯示錯誤訊息
end;
3.
用 BDE TDatabase.Connected:=True ... 若 Server Not Active 時,須等到 Connect TimeOut ( BDE Admin Native MSSQL Driver Default 60 Seconds.)以下用 TClientSocket 去試看看SQL Server是否開啟:procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
if ErrorEvent = eeConnect then begin
Caption := 'SQL Server is not Actived.';
ErrorCode := 0; // Reset Error
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Close;
ClientSocket1.Host := 'localhost';
ClientSocket1.Port := 1433;
ClientSocket1.Open;
Caption := 'Testing SQL Server Active...';
end;procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Caption := 'SQL Server is ready.';
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if ClientSocket1.Active then
ClientSocket1.Close;
end;