问题是这样的:
    根据主机名称,登陆用户名和密码,如何获取数据库名称列表啊?

解决方案 »

  1.   

    uses Comobj;
    function TDatabaseAssertForm.GetSQLServerList(var CB: TComboBox): boolean; //取得SQLSERVEREB服务器列表涵数。
    var
      i: integer;
      SQLServer: Variant;
      ServerList: Variant;
    begin
      Result := False;
      CB.Items.Clear;
      try
        SQLServer := CreateOleObject('SQLDMO.Application');
        ServerList := SQLServer.ListAvailableSQLServers;
        for i := 1 to Serverlist.Count do
          CB.Items.Add(Serverlist.item(i));
        Result := True;
      finally
        SQLServer := NULL;
        ServerList := NULL;
      end;
    end;
    function TDatabaseAssertForm.GetDatabaseList(var CB: TComboBox; BackupOrRestore: boolean): boolean;  //获取数据库列表
    var
      adocon: TADOConnection;
      Quy: TADOQuery;
    begin
      try
        adocon := TADOConnection.Create(nil);
        quy := TADOQuery.Create(nil);
        try
          adocon.LoginPrompt := false;
          if BackupOrRestore then
            adocon.ConnectionString := 'Provider = SQLOLEDB.1;Password =' + trim(self.Edt_BackDbServerPwd.text) + '; Persist Security Info = True;User ID = ' + trim(self.Edt_BackSQLUser.Text) + ';Initial Catalog = master; Data Source =' + trim(self.CB_BackServerList.Text)
          else
            adocon.ConnectionString := 'Provider = SQLOLEDB.1;Password =' + trim(self.Edt_RestoreDbServerPwd.text) + '; Persist Security Info = True;User ID = ' + trim(self.Edt_RestoreSQLUser.Text) + ';Initial Catalog = master; Data Source =' + trim(self.CB_RestoreServerList.Text);
          adocon.Open;
        except
          TMessageBox.ErrorMsgBox('数据库连接出错!');
          result := false;
          exit;
        end;
        quy.Close;
        quy.Connection := adocon;
        quy.SQL.text := 'select * from sysdatabases';
        //quy.SQL.text:='select * from sysobjects where (xtype=''u'' or xtype=''p'') and category<>2 order by name';
        quy.Open;
        cb.Items.Clear;
        cb.Items.Add('');
        while not quy.Eof do
        begin
          cb.Items.Add(quy.fieldbyname('name').AsString);
          quy.Next;
        end;
        quy.Close;
        result := true;
      finally
        FreeaNdnil(adocon);
        freeandnil(quy);
      end;end;