1  如果电脑没有装sql server怎么在listbox中获在sql server服务器列表?2  怎么显示网上领居浏览窗(如同DCOMconnection控件的computername属性),单击主机名添加到 edit1.text中了?

解决方案 »

  1.   

    给个过程你:procedure GetSQLServerLsit;
    var
      SQLServer: Variant;
      ServerList: Variant;
      i, nServers: integer;
    begin
      lst_SQLSrvList.Items.Clear;
      try
        SQLServer := CreateOleObject('SQLDMO.Application');
        ServerList := SQLServer.ListAvailableSQLServers;
        nServers := ServerList.Count;
        for i := 1 to nservers do
          lst_SQLSrvList.Items.Add(ServerList.Item(i));
        SQLServer := NULL;
        serverList := NULL;
      except
        Application.MessageBox('您当前的机器没有安装SQL Server,无法导入SQL Server服务器列表,' + #13 + #10 + '请直接输入SQL Server服务器名称!', '信息提示', MB_OK +
          MB_ICONINFORMATION);
      end;
    end;
      

  2.   

    To zv008(zv)非常感谢你,对不起,说的不太清楚,是这样的:1.一台电脑如果没有装SQL SERVER,用什么方法获得网络中SQL SERVER服务器列名并添加到listbox122  怎么显示网上领居浏览窗(如同DCOMconnection控件的computername属性),单击主机名添加到 edit1.text中了?
      

  3.   

    取得当前局域网中有装SQL SERVER或有相应的数据库服务器
    procedure TMainCodeFrm.pGetServerName(var aCombox : TCombobox);
    var
      SQLServer: Variant;
      ServerList: Variant;
      i : integer;
    begin
      SQLServer := CreateOleObject('SQLDMO.Application');
      ServerList := SQLServer.ListAvailableSQLServers;
      aCombox.Clear;
      for i := 1 to ServerList.Count do
         aCombox.Items.Add(ServerList.Item(i));
      SQLServer := NULL;
      serverList := NULL;
    end;
      

  4.   

    1、看看那段代码吧。没装sqlserver是不能取得列表的。
    2、是不是要查找网上邻居上所有的计算机名?
      

  5.   

    1.PromptDataSource(GetActiveWindow, '');
      

  6.   

    To  lw549(那个孩子他爹)不行吗,麻烦你,再看一看,谢谢
      

  7.   

    to  Afei1(阿飞1) 按你的方法,实现上是在有装SQL SERVER机上获取列表的.to zv008(zv) 有何高见!第二题如同网上领居浏览对话框(如同DCOMconnection控件的computername属性)!
      

  8.   

    给段代码你:function SelectComputer: string; 
    var
      WindowList: Pointer;
      BrowseInfo: TBrowseInfo;
      Buffer: PChar;
      RootItemIDList, ItemIDList: PItemIDList;
      ShellMalloc: IMalloc;
    begin
      Result := '';
      FillChar(BrowseInfo, SizeOf(BrowseInfo), 0);
      if (ShGetMalloc(ShellMalloc) = S_OK) and (ShellMalloc <> nil) then
      begin
        Buffer := ShellMalloc.Alloc(MAX_PATH);
        try
          RootItemIDList := nil;
          SHGetSpecialFolderLocation(Application.Handle, CSIDL_NETWORK,
            RootItemIDList);
          with BrowseInfo do
          begin
            hwndOwner := Application.Handle;
            pidlRoot := RootItemIDList;
            pszDisplayName := Buffer;
            lpszTitle := '选择机器名';
            ulFlags := BIF_BROWSEFORCOMPUTER;
          end;
          WindowList := DisableTaskWindows(0);
          try
            ItemIDList := ShBrowseForFolder(BrowseInfo);
          finally
            EnableTaskWindows(WindowList);
          end;
          if ItemIDList <> nil then
          begin
            Result := StrPas(Buffer);
            ShGetPathFromIDList(ItemIDList, Buffer);
            ShellMalloc.Free(ItemIDList);
          end;
        finally
          ShellMalloc.Free(Buffer);
        end;
      end;
    end;
      

  9.   

    怎么不行?代码来自,我一直用这个的,不用sqlserver客户端
    unit ADODB;function PromptDataSource(ParentHandle: THandle; InitialString: WideString): WideString;
    var
      DataInit: IDataInitialize;
      DBPrompt: IDBPromptInitialize;
      DataSource: IUnknown;
      InitStr: PWideChar;
    begin
      Result := InitialString;
      DataInit := CreateComObject(CLSID_DataLinks) as IDataInitialize;
      if InitialString <> '' then
        DataInit.GetDataSource(nil, CLSCTX_INPROC_SERVER,
          PWideChar(InitialString), IUnknown, DataSource);
      DBPrompt := CreateComObject(CLSID_DataLinks) as IDBPromptInitialize;
      if Succeeded(DBPrompt.PromptDataSource(nil, ParentHandle,
        DBPROMPTOPTIONS_PROPERTYSHEET, 0, nil, nil, IUnknown, DataSource)) then
      begin
        InitStr := nil;
        DataInit.GetInitializationString(DataSource, True, InitStr);
        Result := InitStr;
      end;
    end;
      

  10.   

    to lw549(那个孩子他爹) ,谢谢老师,我试了一下,打开了UDL链接文件.
    谢谢老师。对不起,我表达的不够清楚,是在客户端的listbox1显示网络中所有的SQL SERVER服务器?(当客户端没有装SQL SERVER时)2  怎么显示网上领居浏览窗(如同DCOMconnection控件的computername属性),单击主机名添加到 edit1.text中了?
      

  11.   

    楼上的几位兄弟,大多原理实际上是调用 SQLDEMO.dll这个动态链接库的。如果没有装就没有这个动态链接库,也就不动用  createoleobject('SQLDEMO.application');....