如何得到所有活动的sqlserver服务器名 如何得到所有活动的sqlserver服务器名,就像sql自己的服务管理器一样,如果服务没有启动的话再启动服务 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Function GetSQLServerList(var List: Tstringlist): Boolean;Function GetSQLServerList(var List: Tstringlist): boolean;vari: integer;sRetValue: String;SQLServer: Variant;ServerList: Variant;beginResult := False;List.Clear;trySQLServer := CreateOleObject('SQLDMO.Application');ServerList := SQLServer.ListAvailableSQLServers;for i := 1 to Serverlist.Count dolist.Add (Serverlist.item(i));Result := True;FinallySQLServer := NULL;ServerList := NULL;end;end; 以前是安装了SQL Server 的没有安装的话,用以下方法:unit U_NetApi;interfaceuses types,windows,classes;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}const NERR_Success = 0; MAX_PREFERRED_LENGTH = DWORD(-1); SV_TYPE_SQLSERVER = $00000004;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;implementationfunction 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 AList.Add (pCurSvrInfo^.sv100_name); Inc(i); Inc(pCurSvrInfo); end; end; finally if Assigned(pReturnSvrInfo) then NetApiBufferFree(pReturnSvrInfo); end; except Result := False; end;end;end. 如果获得dbgrid特定条件的行数?再线等 在 线程外 如何判断线程已经结束; datetimepicker这个控件真他X烂!!大家过来看看 高手,请教啊,SQL里用LIKE模糊查询,不支持中文啊 关于字符串的问题!!在线等待!!! 救我,特简单,下班揭贴! 经典程序 如何知道数据库中有哪些表? 有没人搞过swFlash.ocx的,进来指教一下。 如何在DBGrid表格控件中显示斑马条纹 用ADOStoredProc调用参数是日期的存储过程报错,真的搞不定了,求助。 关于MDI窗体的问题
Function GetSQLServerList(var List: Tstringlist): boolean;vari: integer;sRetValue: String;SQLServer: Variant;ServerList: Variant;beginResult := False;List.Clear;trySQLServer := CreateOleObject('SQLDMO.Application');ServerList := SQLServer.ListAvailableSQLServers;for i := 1 to Serverlist.Count dolist.Add (Serverlist.item(i));Result := True;FinallySQLServer := NULL;ServerList := NULL;end;end;
unit U_NetApi;interface
uses
types,windows,classes;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}const
NERR_Success = 0;
MAX_PREFERRED_LENGTH = DWORD(-1);
SV_TYPE_SQLSERVER = $00000004;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;implementationfunction 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
AList.Add (pCurSvrInfo^.sv100_name);
Inc(i);
Inc(pCurSvrInfo);
end;
end;
finally
if Assigned(pReturnSvrInfo) then
NetApiBufferFree(pReturnSvrInfo);
end;
except
Result := False;
end;
end;
end.