代码实现在combobox中显示sql server所有数据库名的问题。求助!

解决方案 »

  1.   

    var
      SQLServer:Variant;
      ServerList:Variant;
      i:integer;
    begin  SQLServer := CreateOleObject('SQLDMO.Application');
      ServerList:= SQLServer.ListAvailableSQLServers;
      if serverlist.count<1 then
        application.Terminate
      else
      begin
      CmBxSqlServer.Items.Clear;
       for i:=1 to serverlist.count do
       CmBxSqlServer.Items.Add(serverlist.item(i)) ;
      end;
       SQLServer:=NULL;
       serverList:=NULL;
    end;
      

  2.   

    var
      myADOQuery : TADOQuery;
      i : integer;
    begin
      myADOQuery := TADOQuery.Create(nil);
      myADOQuery.Conection := ....//这个是连接,自己填,连到master数据库
      myADOQuery.SQL.Clear;
      myADOQuery.SQL.Add('select name from sysdatabases');
      myADOQuery.Open;
      for i:=0 to myADOQuery.RecordCount-1 do
        begin
          ComboBox1.items.Add(myADOQuery.FieldByName('name').AsString);
        end;
    end;
      

  3.   

    use
       Variants;
    Var
       i:Integer;
       SQLServer:Variant;//SQLDMO.SQLServer
    begin
       SQLServer:=CreateObject('SQLDMO.SQLServer');
       SQLServer.Connect('ServerName','LoginName','*****');
       for i:=1 to SQLServer.DataBases.Count do
       begin
          DatabasesComboBox.Items.Add(SQLServer.DataBases.Item(i).Name);
       end;
      

  4.   

    一楼的没认真看问题……
    二楼的方法可能在不具备master数据库访问权限时,拒绝访问。
      

  5.   

    我的数据库是windows用户登录,SQLServer.Connect('ServerName','LoginName','*****')可以吗?'*****'是什么意思呢?谢谢!
      

  6.   

    master下的sysdatabases表保存着所有数据库的名称
    select [name] from sysdatabases where dbid >= 7 //当dbid<7 时,其对应的是系统库
      

  7.   

    >>我的数据库是windows用户登录,SQLServer.Connect('ServerName','LoginName','*****')可以
    >>吗?'*****'是什么意思呢?谢谢!
    '******'是密码串
    SQLServer.Connect('机器名或者IP地址','SQL登录用户名','该登录用户的登录密码')
    具体说的数据库是Windows用户登录是否指提Windows验证模式?这是不影响的。一般建议安装时选混合验证模式。
      

  8.   

    我也來一個引用:unsigned(僵哥)修改如下:uses ComObj;procedure TForm1.Button1Click(Sender: TObject);
    Var
       i:Integer;
       SQLServer:Variant;//SQLDMO.SQLServer
    begin
       SQLServer:=CreateOleObject('SQLDMO.SQLServer');
       //下面的請正確書寫SQLServer的服務器名、登入的用戶名、密碼
       SQLServer.Connect('.','username','password');
       for i:=1 to SQLServer.DataBases.Count do
       begin
          DatabasesComboBox.Items.Add(SQLServer.DataBases.Item(i).Name);
       end;end;
      

  9.   

    >>一楼的没认真看问题……
    >>二楼的方法可能在不具备master数据库访问权限时,拒绝访问。三楼的不能运行在没装备SQL SERVER客户端访问工具的环境中成功执行...当然,1楼的也不行
      

  10.   

    >>master下的sysdatabases表保存着所有数据库的名称
    >>select [name] from sysdatabases where dbid >= 7 //当dbid<7 时,其对应的是系统库
    我不同意这种做法或说法,因为有很多人根本就没有创建用户数据库就直接使用的master数据库的也有,另外什么msdb之类的那几个更是在MS$的Demo当中就经常使用。再者数据库并没有是否系统数据库的说法,只有系统表、系统存储过程的说法。换而言之,也就是说判断是否系统数据库也是没有任何依据的。只不过对于master与msdb这两个库来说,确实对它们操作权限的话,对SQL构成很大的安全上面的威胁,毕竟所有系统信息,以及超权限功能系统存储过程都在这里面。
      

  11.   

    >>>>一楼的没认真看问题……
    >>>>二楼的方法可能在不具备master数据库访问权限时,拒绝访问。
    >>
    >>三楼的不能运行在没装备SQL SERVER客户端访问工具的环境中成功执行...当然,1楼的也不行对于环境来说这个问题就实在是不好讨论了,什么Win9x、Winnt等这一切要考虑,即使使用ADO,有时还得考虑它的实现障碍,就算是上网还考虑网络的连接等等一切可行性因素……环境是可以改造的,不能说是我现在没水也要我把米煮成饭,这似乎有点过于牵强了点。
      

  12.   

    >>对于环境来说这个问题就实在是不好讨论了,什么Win9x、Winnt等这一切要考虑,即使使用ADO,有时还得考虑它的实现障碍,就算是上网还考虑网络的连接等等一切可行性因素……环境是可以改造的,不能说是我现在没水也要我把米煮成饭,这似乎有点过于牵强了点。98及以上WINDOWS操作系统自带ADO,但不会自带SQL SERVER客户端吧,我可没说谁对谁错,只是提醒楼主注意而已,毕竟改造环境也得有人去做呀
      

  13.   

    怎样用代码判断计算机是否安装了sql server?谢谢帮忙!
      

  14.   

    try
       SQLServer.Connect('servername','sa','password');
      except
       showmessage('you not install sql server');
      end;
      

  15.   

    >>怎样用代码判断计算机是否安装了sql server?谢谢帮忙!SQLServer:=CreateOleObject('SQLDMO.SQLServer');
    如果这句失败则没安装SQL SERVER另,每个关于COM接口的函数调用,也就是那些返回类型为HResult的函数,最好都以OleCheck包装,因为一个不检查返回状态的COM接口操作实在太危险了.