当前位置:主页>仓库管理软件> 列表

怎样判断系统已安装MSSQL并正常运行??? 找简单进销存管理软件

财务软件版1楼: 怎样判断系统已安装MSSQL并正常运行??[?]

2楼: [:(!] 如客户资料管理软件

3楼: //判断一个机器的MSSQL是否启动,通过SQL DMO是可以的,但对于没有装MSSQL的客户端来说就没办法,此处用的是连接MSSQL的1433端口,如果端口号不同,可以通过传递端口.
unit Judge_U;

interface
uses
SysUtils, Classes, IdBaseComponent, IdComponent, IdTCPConnection, IdIcmpClient,
IdTCPClient, IdRawBase, IdRawClient;


function JudgePort(AServerName: PChar; APort: Integer): Boolean;
function JudgePing(AServerName: PChar): Boolean;
implementation

function JudgePing(AServerName: PChar): Boolean;//这个是用来PIN计算机的.
var
ICMP: TIdIcmpClient;
begin
ICMP := TIdIcmpClient.Create(nil);
ICMP.ReceiveTimeout := 1000;
ICMP.Host := AServerName;
try
ICMP.Ping;
Result := True;
except
Result := False;
end;
ICMP.Free;
end;

function JudgePort(AServerName: PChar; APort: Integer): Boolean;


var
IdTCPClient1: TIdTCPClient;
begin
IdTCPClient1 := TIdTCPClient.Create(nil);
IdTCPClient1.Host := AServerName;
IdTCPClient1.Port := APort;
try
IdTCPClient1.Connect;
Result := True;
IdTCPClient1.Disconnect;
except
Result := False;
end;
IdTCPClient1.Free;
end;

end.
//有以下已知的BUG.
//1 如果一台计算机上安装了多个实例.
//2 如果不用TCP/IP协议,而用其它的连接方式,比如典型的命名管道,就无法判断.

4楼: 直接用TADOConnection连一下Master数据库不就知道了。

5楼: [:(][:(][:(][:(]

6楼: 你是想用程序判断还是别的,最简单的方便是打开企业管理器运行服务即可

财务软件版7楼: 用代码来判断~~

8楼: 注册表判断最简单了.

9楼: 1、在注册表
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 看有没有
SQl Server.
2、扫描当前进程,看是否存在sqlServr.exe

10楼: function GetSqlServerStatus(MachineName:string):string;
var
SrvHandle:SC_HANDLE; //这些都在winsvc单元中定义的
Service_Status:_SERVICE_STATUS; //在winsvc单元中有定义


SrvStatus:integer;
tstr:string;
begin
//取sql server的状态,如果sql server正在运行则返回true ,否则返回 false
SrvHandle:=OpenSCManager(pchar(MachineName),SERVICES_ACTIVE_DATABASE,SC_MANAGER_ALL_ACCESS);
SrvHandle:=OpenService(SrvHandle,pchar(''MSSQLServer''),SERVICE_QUERY_STATUS or SERVICE_START);
{case SrvHandle of
ERROR_ACCESS_DENIED:Memo.Lines.Add(''The specified service control manager database handle does not have access to the service.'');
ERROR_INVALID_HANDLE:Memo.Lines.Add(''The specified handle is invalid.'');
ERROR_INVALID_NAME:Memo.Lines.Add(''The specified service name is invalid.'');
ERROR_SERVICE_DOES_NOT_EXIST:Memo.Lines.Add(''The specified service does not exist.'');
end;
}
if QueryServiceStatus(SrvHandle,Service_Status) then
begin
//判断Sql Server服务的状态
SrvStatus:=Service_Status.dwCurrentState;
case SrvStatus of
SERVICE_STOPPED:tstr:=''MS SQL Server 2000没有运行!'';
SERVICE_START_PENDING:tstr:=''The service is starting.'';
SERVICE_STOP_PENDING:tstr:=''MS SQL Server 2000没有运行!'';
SERVICE_RUNNING:tstr:=''The service is running.'';
SERVICE_CONTINUE_PENDING:tstr:=''MS SQL Server 2000没有运行!'';
SERVICE_PAUSE_PENDING:tstr:=''MS SQL Server 2000没有运行!'';
SERVICE_PAUSED:tstr:=''MS SQL Server 2000没有运行!'';
end;
if (SrvStatus=SERVICE_RUNNING) then
Result:=''OK''
else
begin
Result:=tstr;
// messagedlg(''MS SQL Server 2000没有安装或者没有处于运行状态,请检查!'',mterror, [mbok],0);
end;
end
else
begin
Result:=''Err'';
// messagedlg(''MS SQL Server 2000没有安装或者没有处于运行状态,请检查!'',mterror, [mbok],0);
end;
end;我也是网上看见的,忘记出处了

11楼: 说明:
我测试后发现本过程只能检测本地是否运行MS SQL SERVER.

12楼: unit FunctionU;

interface

uses Windows, Messages, Forms, SysUtils, DBGrids, Grids, DB, ValEdit, StdCtrls,
Classes, shellapi, Dialogs, Graphics, IniFiles, StrUtils, Math,
FileCtrl, Registry, comObj, shlObj, ActiveX, ExtCtrls, Controls, ADODB, Variants,
WinSock, DateUtils;


const
NERR_Success = 0;
MAX_PREFERRED_LENGTH = DWORD(-1);
SV_TYPE_SQLSERVER = $00000004;

type


NET_API_STATUS = DWORD;
PServerInfo100 = ^TServerInfo100;
_SERVER_INFO_100 = record
sv100_platform_id: DWORD;
sv100_name: LPWSTR;
end;
{$EXTERNALSYM _SERVER_INFO_100}
TServerInfo100 = _SERVER_INFO_100;
SERVER_INFO_100 = _SERVER_INFO_100;
{$EXTERNALSYM SERVER_INFO_100}


function NetApiBufferAllocate(ByteCount: DWORD; var Buffer: Pointer):
NET_API_STATUS; stdcall; external ''netapi32.dll'' name ''NetApiBufferAllocate'';

function NetServerEnum(ServerName: LPCWSTR; Level: DWORD; var BufPtr: Pointer;
PrefMaxLen: DWORD; var EntriesRead: DWORD; var TotalEntries: DWORD;
ServerType: DWORD; Domain: LPCWSTR; ResumeHandle: PDWORD): NET_API_STATUS;
stdcall; external ''netapi32.dll'' name ''NetServerEnum'';

function NetApiBufferFree(Buffer: Pointer): NET_API_STATUS; stdcall; external
''netapi32.dll'' name ''NetApiBufferFree'';
function GetSQLServerList(var AList: TStrings; pwcServerName: PWChar = nil;
pwcDomain: PWChar = nil): Boolean;


implementation


function GetSQLServerList(var AList: TStrings; pwcServerName: PWChar = nil;
pwcDomain: PWChar = nil): Boolean;
var
NetAPIStatus: DWORD;
dwLevel: DWORD;
pReturnSvrInfo: Pointer;
dwPrefMaxLen: DWORD;
dwEntriesRead: DWORD;
dwTotalEntries: DWORD;
dwServerType: DWORD;
dwResumeHandle: PDWORD;
pCurSvrInfo: PServerInfo100;
i, j: Integer;
begin
Result := True;
try
dwLevel := 100;
pReturnSvrInfo := nil;
dwPrefMaxLen := MAX_PREFERRED_LENGTH;
dwEntriesRead := 0;
dwTotalEntries := 0;
dwServerType := SV_TYPE_SQLSERVER; //服务器类型
dwResumeHandle := nil;
NetApiBufferAllocate(SizeOf(pReturnSvrInfo), pReturnSvrInfo);
try
NetAPIStatus := NetServerEnum(pwcServerName, dwLevel, pReturnSvrInfo,
dwPrefMaxLen, dwEntriesRead, dwTotalEntries, dwServerType, pwcDomain,
dwResumeHandle);
if ((NetAPIStatus = NERR_Success) or (NetAPIStatus = ERROR_MORE_DATA)) and
(pReturnSvrInfo <> nil) then
begin
pCurSvrInfo := pReturnSvrInfo;
// 循环取得所有SQL Server服务器
i := 0;
j := dwEntriesRead;
while i < j do
begin
if pCurSvrInfo = nil then
Break;
with AList do
Add(pCurSvrInfo^.sv100_name);
Inc(i);
Inc(pCurSvrInfo);
end;
end;
finally
if Assigned(pReturnSvrInfo) then
NetApiBufferFree(pReturnSvrInfo);
end;
except
Result := False;
end;
end;

可以列出局域网内有安装SQLServer的电脑名字
{ //How To Use This Function:


var
sqlServerName:TStrings;
i:Integer;
begin
sqlServerName:=TStringList.Create;
GetSQLServerList(sqlServerName);
for i := 0 to sqlServerName.Count-1 do
Memo1.Lines.Add(sqlServerName.Strings[i]);
end;
} 如简单进销存管理软件

13楼: mark!!!

财务软件版14楼: 判断一个机器的MSSQL是否启动,通过SQL DMO是可以的,但对于没有装MSSQL的客户端来说就没办法,此处用的是连接MSSQL的1433端口

15楼: 我有现成的代码,但不在家里,在公司。
给你一思路:
首先:通过注册表判断是否安装了sqlserver;
如果安装了,在检测进程中是否有sqlserver;
如有,则在判断是否正在运行状态。
只能检测本地。

16楼: 能发个DEMO来看看吗?
bayernchan@126.com
thanks

17楼: telnet IP:1433就不可以了吗??

18楼: [:D][:D][:D][:D][:D][:D]