如何列举局域网内的所有SQL server服务器 
Function  GetSQLServerList(var  List:  Tstringlist):  boolean;  
var  
     i:  integer;  
     sRetvalue:  String;  
     SQLServer:  Variant;  
     ServerList:  Variant;  
begin  
   Result  :=  False;  
   List.Clear;  
   try  
       SQLServer  :=  CreateOleObject('SQLDMO.Application');  
       ServerList  :=  SQLServer.ListAvailableSQLServers;  
       for  i  :=  1  to  Serverlist.Count  do  
           list.Add  (Serverlist.item(i));  
       Result  :=  True;  
   Finally  
       SQLServer  :=  NULL;  
       ServerList  :=  NULL;  
   end;  
end;  
---------------------------------------------------------------  
 
//  搜搜  ,  原来有的    列举  Sql  Server  2000  数据库服务器  
 
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  :=  0  to  nservers  -  1  do      //  for  i  :=  1  to  NServers  do  也可以  
           ListBox1.Items.Add(ServerList.Item(i));  
   SQLServer:=NULL;  
   serverList:=NULL;  
end;  

解决方案 »

  1.   

    --用osql.exe就行了,注意参数大写
    osql /L
      

  2.   

    本机HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server
    下的InstalledInstances网络上据说 osql  /L
      

  3.   

    '也可以在程序中调用SQLDMO来实现
    '*************************************************************************
    '**函 数 名:s_ListSQLSrv
    '**功能描述:在立即窗口打印出所有的 SQL Server 组及各组的 SQL Server
    '**输    入:无
    '**输    出:无
    '**调用模块:引用: Microsoft SQLDMO Object Library
    '**作    者:邹建
    '**日    期:2003年11月26日
    '*************************************************************************
    Sub s_ListSQLSrv()
        Dim iSql As SQLDMO.Application
        Dim iI&, iJ&
        
        Set iSql = New SQLDMO.Application
        
        With iSql.ServerGroups
            For iI = 1 To .Count
                Debug.Print .Item(iI).Name
                With .Item(iI).RegisteredServers
                    For iJ = 1 To .Count
                        Debug.Print vbTab & .Item(iJ).Name
                    Next
                End With
            Next
        End With
        
        Set iSql = Nothing
    End Sub