ورود

View Full Version : مشکل در Run نمودن Sql در دلفی



Sabeghi
چهارشنبه 23 اردیبهشت 1388, 11:50 صبح
با سلام
من زمانی که Sql رو بصورت Default نصب میکنم (MSDE) برای کنترل اینکه آیا Sql اجرا شده یا نه و یا اینکه Stop نباسد با کد زیر این کار را کنترل می نمایم.
اما زمانی که InstanceName برای Sql در زمان نصب انتخاب میکنم دیگر نمی توانم Sql را کنترل نمایم لطفا راهنمایی بفرمائید.



function ServiceGetStrCode(nID : integer) : string;
var
s : string;
begin
case nID of
SERVICE_STOPPED : s := 'STOPPED';
SERVICE_RUNNING : s := 'RUNNING';
SERVICE_PAUSED : s := 'PAUSED';
SERVICE_START_PENDING : s := 'START/PENDING';
SERVICE_STOP_PENDING : s := 'STOP/PENDING';
SERVICE_CONTINUE_PENDING : s := 'CONTINUE/PENDING';
SERVICE_PAUSE_PENDING : s := 'PAUSE/PENDING';
else
s := 'UNKNOWN';
end;
Result := s;
end;

function ServiceGetStatus(sMachine,sService : string) : DWord;
var
schm : SC_Handle;
schs : SC_Handle;
ss : TServiceStatus;
dwStat : DWord;
begin
dwStat := 1;
schm := OpenSCManager( PChar(sMachine), Nil, SC_MANAGER_CONNECT);
if(schm > 0)then
begin
schs := OpenService( schm, PChar(sService), SERVICE_QUERY_STATUS);
if(schs > 0)then
begin
if (QueryServiceStatus( schs, ss)) then
dwStat := ss.dwCurrentState;
CloseServiceHandle(schs);
end;
CloseServiceHandle(schm);
end;
Result := dwStat;
end;

function ServiceRunning(sMachine, sService : string) : boolean;
begin
Result := SERVICE_RUNNING = ServiceGetStatus(sMachine, sService);
end;

function ServiceStopped(sMachine, sService : string) : boolean;
begin
Result := SERVICE_STOPPED = ServiceGetStatus(sMachine, sService);
end;

function ServiceStart(sMachine,sService : string) : boolean;
var
schm,
schs : SC_Handle;
ss : TServiceStatus;
psTemp : PChar;
dwChkP : DWord;
begin
ss.dwCurrentState := 1;
schm := OpenSCManager(PChar(sMachine), nil, SC_MANAGER_CONNECT);
if(schm > 0)then
begin
schs := OpenService(schm, PChar(sService), SERVICE_START or SERVICE_QUERY_STATUS);
if(schs > 0)then
begin
psTemp := Nil;
if(StartService( schs, 0,psTemp))then
begin
if(QueryServiceStatus(schs, ss))then
begin
while(SERVICE_RUNNING <> ss.dwCurrentState)do
begin
dwChkP := ss.dwCheckPoint;
Sleep(ss.dwWaitHint);
if not QueryServiceStatus(schs, ss) then
break;
if ss.dwCheckPoint < dwChkP then
break;
end;
end;
end;
CloseServiceHandle(schs);
end;
CloseServiceHandle(schm);
end;
Result := SERVICE_RUNNING = ss.dwCurrentState;
end;

function ServiceStop(sMachine,sService : string) : boolean;
var
schm,
schs : SC_Handle;
ss : TServiceStatus;
dwChkP : DWord;
begin
schm := OpenSCManager(PChar(sMachine), nil,SC_MANAGER_CONNECT);
if schm > 0 then
begin
schs := OpenService( schm, PChar(sService), SERVICE_STOP or SERVICE_QUERY_STATUS);
if schs > 0 then
begin
if ControlService(schs, SERVICE_CONTROL_STOP,ss) then
begin
if(QueryServiceStatus(schs, ss))then
begin
while(SERVICE_STOPPED <> ss.dwCurrentState)do
begin
dwChkP := ss.dwCheckPoint;
if(not QueryServiceStatus(schs,ss))then
break;
if(ss.dwCheckPoint < dwChkP)then
break;
end;
end;
end;
CloseServiceHandle(schs);
end;
CloseServiceHandle(schm);
end;
Result := SERVICE_STOPPED = ss.dwCurrentState;
end;

procedure TFrmMain.FormCreate(Sender: TObject);
begin
FlagSql:=True;
if ServiceStopped('','MSSQLServer') then
begin
ServiceStart('','MSSQLServer');
if ServiceRunning('','MSSQLServer')=False then
begin
MessageDlg('[ نشده است '+'Start'+' نرم افزار نصب نمی باشد یا '+'] Microsoft Sql Server'+'خطا در نرم افزار',mtWarning,[mbOK],0);
FlagSql:=False;
end;
end;
end;