procedure TForm1.FormCreate(Sender: TObject); var SQLServer : Variant; ServerList : Variant; i,nServers : integer; begin SQLServer := CreateOleObject('SQLDMO.Application'); ServerList := SQLServer.ListAvailableSQLServers; if serverlist.count < 1 then begin //如果服务器不存在,则退出系统 showmessage('服务器不存在,请检测服务器是否已经开机或者服务是否打开了'); application.Terminate; end else begin for i:= 1 to serverlist.count do listbox1.Items.Add(serverlist.item(i)) ; showmessage(serverlist.item(1)+'服务器已经打开,可以正常使用本系统'); end; SQLServer:=NULL; serverList:=NULL; end; end.
procedure TForm1.FormCreate(Sender: TObject);
var
SQLServer : Variant;
ServerList : Variant;
i,nServers : integer;
begin
SQLServer := CreateOleObject('SQLDMO.Application');
ServerList := SQLServer.ListAvailableSQLServers;
if serverlist.count < 1 then
begin //如果服务器不存在,则退出系统
showmessage('服务器不存在,请检测服务器是否已经开机或者服务是否打开了');
application.Terminate;
end
else
begin
for i:= 1 to serverlist.count do
listbox1.Items.Add(serverlist.item(i)) ;
showmessage(serverlist.item(1)+'服务器已经打开,可以正常使用本系统');
end; SQLServer:=NULL;
serverList:=NULL;
end;
end.
局域网超级工具 可以做到,而且速度非常快,不知道是怎么做的。
有高人指点吗?
樓上有一種, 然後, 下面一種, 還有一種, 那個貼子我還找不到!
如果在nt, 2k, xp下,可用如下解法:
const
SV_TYPE_SQLSERVER = $00000004;
type
pDword = ^DWord;
NET_API_STATUS = DWORD;
SERVER_INFO_100 = record
sv100_platform_id : DWord;
sv100_name : pwidechar;
end; PSERVER_INFO_100 = ^SERVER_INFO_100;
LPSERVER_INFO_100 = ^SERVER_INFO_100;
ASERVER_INFO_100 = array of SERVER_INFO_100; SERVER_INFO_101 = record
sv101_platform_id : dword;
sv101_name : pwidechar;
sv101_version_major : Dword;
sv101_version_minor : Dword;
sv101_type : dword;
sv101_comment : pchar;
end; PSERVER_INFO_101 = ^SERVER_INFO_101;
LPSERVER_INFO_101 = ^SERVER_INFO_101;
ASERVER_INFO_101 = array of SERVER_INFO_101;
function NetServerEnum(servername : pchar; level : Dword; var bufptr;
prefmaxlen : integer; entriesread : pDword; totalentries : pDword;
servertype : DWord; domain : pwidechar; resume_handle : integer)
: NET_API_STATUS; stdcall; external 'netapi32.dll' name 'NetServerEnum';function NetApiBufferFree (Buffer : pointer) : NET_API_STATUS;
stdcall; external 'netapi32.dll' name 'NetApiBufferFree';
procedure EnumNetwork(ts: TStrings);
var
pBuf : pByte;
aBuf : ASERVER_INFO_100;
dwEntriesRead : DWORD;
dwTotalEntries : DWORD;
dwServerType : DWORD;
i : DWORD;
name : string;
begin
pBuf := nil;
dwEntriesRead := 0;
dwTotalEntries := 0;
dwServerType := SV_TYPE_SQLSERVER; // all servers NetServerEnum(nil, 100, pBuf, -1,
@dwEntriesRead, @dwTotalEntries, dwServerType, nil, 0); aBuf := ASERVER_INFO_100(pBuf); for i := 0 to dwEntriesRead - 1 do
begin
name := aBuf[i].sv100_name;
ts.add(name);
// name is the name of the SQL Server in the network
end;
if Assigned(pBuf) then NetApiBufferFree(pBuf);
end;procedure TForm1.Button1Click(Sender: TObject);
begin
EnumNetwork(ListBox1.items);
end;
现在我知道了局域网内安装有SQL的机器(SQL数据库机器名)。
要求:
1.通过选择不同的机器名,取得在该SQL机器上的所有数据库名称。
2.实现工具DELPHI 6.