请问在一个小型的delphi数据库程序中如何判断sql server 是否在开启服务状态,另外,如何判断计算机上是否安装打印处于开启状态。请详细一点!谢谢!!!

解决方案 »

  1.   

    关于如何判断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;
      

  2.   

    拜托用adoconnect连接127.0.0.1的master库就行了,连的时候try一下就知道打开与否了,简单明了
      

  3.   

    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;