如何能得到本LAN内的SQL服务器列表?(100分)

  • 主题发起人 主题发起人 iamfly
  • 开始时间 开始时间
I

iamfly

Unregistered / Unconfirmed
GUEST, unregistred user!
看到一本SQL7的书里说到在VB里可以用DMO得到本网段内有哪几台SQL服务器正在运行:)
不过DMO是和SQL的版本有关,而且,在DELPHI里找了下,没找到和DMO有关的东东:(
哪位能说说的?谢了:)
 
SQL-DMO是一个COM组件,你必须import type libary,就会生成一个pas
文件,里面是所有接口的声明,这样就可以使用DMO对象了,不过如何查找SQL SERVER我
不清楚,估计是在所有机器上都CONNECT一下出错就表示没有,这样就可以找到所有的
server了,如果知道什么方法不如贴出来看一下,在DELPHI里用COM实现和用VB没什么区别
 
我明天试试看,做成功了就贴出我的代码来:)
 
NET_API_STATUS NetServerEnum(
LPWSTR servername,
DWORD level,
LPBYTE *bufptr,
DWORD prefmaxlen,
LPDWORD entriesread,
LPDWORD totalentries,
DWORD servertype, //SV_TYPE_SQLSERVER
LPWSTR domain,
LPDWORD resume_handle );

参考:MSDN
 
用SQL DMO麻烦,我把这个DMO东东INSTALL进去后,再把它的COMPONENT放上我的FORM,
发现在我的程序里原来的APPLICATION不能用了:( 截止到目前为止,我还没想到怎么去做,
不过,IKnow说的这个API函数我去查了下,可以:)正在试验过程中,OK了后再分分吧,
哈哈:D
 
关于NETSERVERENUM,DELPHI并没有它的声明文件:(
应该是在NETAPI。DLL里的,莫非我又要想用REGISTERSERVICEPROCESS一样的来调用它:(
麻烦,先试试吧。
BTW 有谁用过这个API函数的?烦请告诉一声,谢了^_^
 
用SQLDOM最容易:

procedure TForm1.Button1Click(Sender: TObject);
var
SQLServer:Variant;
ServerList:Variant;
i,nServers:integer;
sRetValue:String;
begin

SQLServer := CreateOleObject('SQLDMO.Application');
ServerList:= SQLServer.ListAvailableSQLServers;
nServers:=ServerList.Count;
for i := 1 to nservers do
ListBox1.Items.Add(ServerList.Item(i));
SQLServer:=NULL;
serverList:=NULL;
end;

不过你试试,结果肯定失望,M$东西,都是骗人的
NetServerEnum也是鬼知道好用不好用
 
呵呵,一刀果然是忠心耿耿的Delphi fan
 
昨天试了试下温柔一刀的,在我装了SQL的2000下是可以,但再进到我没装SQL的98下,就。。。
唉,算了,干脆不用这个了,要别人自己去输入SQL服务器名或IP算了,反正我的ADOCONNECTION
是在TRY EXCEPT语句里面,检测到如果不能连通SQL服务器的会提示的。不过,我还是想知道
以前的那几个方面:一、如果用zhuhuan的方法,IMPORT了SQL DMO LIBIRARY,SQLSERVER的
APPLICATION会和程序中的APPLICATION对象起冲突?怎么解决??
二、IKnow说的NETSERVERENUM有谁用过?能说说吗?
三、一刀说的方法,如果没装SQL,能解决吗?(我在98下出错原因是这个CLSID没注册,不
是要我手工去注册表中加吧)
版主,能否再等几天,我看看有没有人答:)如果三天以上还是没人答,而我又不能来的话,
你帮我结束吧,谢了^_^
 
1.SQL-DMO是COM对象,没注册当然不行,如果一定要用,
可以使用Installsheld之类注册相应的DLL

2. 我上面的代码你应该看到了,SQLDMO也有一个Application对象,
因此你use xxx_tlb.pas的时候,就把delphi forms.pas里面的application“挡住了”

我说的方法与import tlb方法是等价的,因此你没必要使用tlb了。

3.NETSERVERENUM是NetAPI函数,只有在NT下才有用,win98下别想了。
 
我以前做的项目中对于netxxx的函数用delphi重写过一遍,
不过是要在nt下运行的。

95/98下的函数所在的dll和参数调用不太一样。
85/98下是NetServerGetInfo, 在svrapi.dll中。

另外,如果对thunk熟的话,也可以直接从windows 95的netapi.dll中使用NT中的这些函数

.pas文件 我已经发给你了,算是便宜你了。 ^_*

 
分分了,谢谢一刀兄,谢谢IKnow兄,EMAIL已收到,嗬嗬,我会慢慢去体会你的程序的,
谢谢,谢谢,谢谢^_^
 
后退
顶部