显示本机所连接的所有服务器(问题解决,马上结贴)

slchen 2005-07-13 12:05:56
我设计了一个程序,应用了sql server,我想在程序中采用个控件,能够把与我的计算机所能看到的服务器名全都类出来,但是不知道用那个控件和代码?
高手指点!!
...全文
144 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
renfushen 2005-07-19
  • 打赏
  • 举报
回复
up
slchen 2005-07-15
  • 打赏
  • 举报
回复
感谢恢复!!
楼上的代码可以列出全部服务器名,但是要求本机安装sql server;

在上一个代码可以不安装sql server,但是之列出了一个服务器名,我看其它贴子说:pBuf++(指针)移动一下就可以了,但是在我的机器上还是一个啊!!


大侠帮帮看看吧!!!

constantine 2005-07-14
  • 打赏
  • 举报
回复
#include "lmserver.h"

LPSERVER_INFO_101 pBuf = NULL;
LPSERVER_INFO_101 pTmpBuf;
DWORD dwLevel = 101;
DWORD dwPrefMaxLen = -1;
DWORD dwEntriesRead = 0;
DWORD dwTotalEntries = 0;
DWORD dwTotalCount = 0;
DWORD dwServerType = SV_TYPE_SQLSERVER;//SV_TYPE_SERVER; // all servers
DWORD dwResumeHandle = 0;
NET_API_STATUS nStatus;
LPTSTR pszServerName = NULL;
DWORD i;
NetServerEnum(
NULL,dwLevel,(LPBYTE *) &pBuf,
dwPrefMaxLen,&dwEntriesRead,
&dwTotalEntries,dwServerType,
NULL,&dwResumeHandle);
for(i = 0;i<dwEntriesRead;i++)
{
ListBox1->Items->Add(pBuf->sv101_name);
pBuf++;
}

这样好点
constantine 2005-07-14
  • 打赏
  • 举报
回复
Variant SQLServer;
Variant ServerList;
int i,nServers;
String sRetValue;
SQLServer = CreateOleObject("SQLDMO.Application");
ServerList= SQLServer.OleFunction("ListAvailableSQLServers");
nServers=ServerList.OlePropertyGet("Count");
ListBox1->Items->Clear();
for(i=1;i<=nServers;i++)
ListBox1->Items->Add(ServerList.OleFunction("Item",i));
SQLServer=Unassigned;
ServerList=Unassigned;
renfushen 2005-07-14
  • 打赏
  • 举报
回复

Variant SQLServer;
Variant ServerList;
int i,nServers;
String sRetValue;
try
{
SQLServer = CreateOleObject("SQLDMO.Application");
}
catch(...)
{
ShowMessage("您的本机系统没有安装SQL Server或SQL Server客户端软件");
return;
}

ServerList= SQLServer.OleFunction("ListAvailableSQLServers");
nServers=ServerList.OlePropertyGet("Count");
ComboBox1->Items->Clear();
for(i=1;i<=nServers;i++) //将检测结果放入ComboBox1中
ComboBox1->Items->Add(ServerList.OleFunction("Item",i));
SQLServer=Unassigned;
ServerList=Unassigned;
以前別人問得到的!

constantine 2005-07-13
  • 打赏
  • 举报
回复
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;

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧