我如何在程序运行的时候获取整个局域网中的sqlserver2000服务器,然后根据选择的服务器在列出其中的数据库,再将程序连上这个具体的数据库呢?
我看到别人写的程序能够这样的(代码没有),请问怎么实现呢

解决方案 »

  1.   

    试试 SQLDMO 
    具体我忘了,你可以看看SQLDMO帮助
      

  2.   

    uses ComObj;
    //服务器列表
    function GetSQLServerList(AList: TStrings): Boolean;
    var
       i,nServers: integer;
       vSQLServer: Variant;
       vServerList: Variant;
    begin
      Result := False;
      if AList = nil then Exit;
      AList.Clear;
      Screen.Cursor:=crHourGlass;
      try
        try
          vSQLServer := CreateOleObject('SQLDMO.Application');
          vServerList := vSQLServer.ListAvailableSQLServers;
          nServers:= vServerlist.Count;
          for i := 1 to nServers do
            AList.Add (vServerlist.item(i));
          Result := True;
        except
        end;
      finally
        vSQLServer := NULL;
        vServerList := NULL;
        Screen.Cursor:=crDefault;
      end;
    end;
    \\获得指定服务器的数据库列表
    function GetDBList(WindowsMode:boolean;{是否NT验证}Server,LoginID,LoginPassword:string;DBList:TStrings;var ErrorMsg:string):boolean;
    const
      SQL='select DBName=name from master.dbo.sysdatabases';
    var
      i:integer;
      ADOQuery:TADOQuery;
    begin
      Result:=false;
      if DBList=nil then Exit;
      DBList.Clear;
      try
        ADOQuery:=TADOQuery.Create(nil);
        try
          try
            ADOQuery.ConnectionString:=BuildConnectString(Server,WindowsMode,LoginID,LoginPassword);
            ADOQuery.SQL.Text:=SQL;
            ADOQuery.Open;
            while not ADOQuery.Eof do
              begin
                DBList.Add(ADOQuery.FieldByName('DBName').AsString);
                ADOQuery.Next;
              end;
            Result:=true;
          except
            on e:Exception do ErrorMsg:=e.Message;
          end;
        finally
          ADOQuery.Close;
          ADOQuery.Free;
        end;
      except
        on e:Exception do ErrorMsg:=e.Message;
      end;
    end;
    //调用方法:首先初始化服务器列表
        GetSQLServerList(Combobox_Server.Items);
    //选择服务器时刷新数据库列表
    procedure TProp_DBLogin.Combobox_ServerChange(Sender: TObject);
    var
      ErrorMsg:string;
    begin
      GetDBList(Rb_WindowNTMode.Checked, Combobox_Server.Text,Edt_LoginID.Text,Edt_LoginPassword.Text,Cb_DBName.Items,ErrorMsg);
    end;
      

  3.   

    //如何用Delphi调用ADO的‘数据连接属性’窗口,就是那个双击ADOConnection弹出的对话框里的‘Build..’按钮的功能。
    //uses ADOConEd;
     if not EditConnectionString(adoconnection1) then
        Edit1.Text:=ADOConnection1.ConnectionString;