在網上找到好多貼子是關於使用 sqldmo.dll 來列舉局域網內SQLServer的。
我依照上面的抄了一份在 D7 下面測試切沒通過。
老是運行到  AStrings.Add(oServers.Item(i)) 這裡 拋出異常。
請大蝦們指點。
下面是原代碼:
// ==================================================== 
// Load SQL Servers on a Network into a string list 
// ====================================================
  function GetSQLServerList(AStrings: TStrings): Boolean;
  var oDmo,oApp,oServers : OleVariant;
      bResult : boolean;
      i : integer;
  begin
    AStrings.Clear;
    try
      oDMO := CreateOleObject('SQLDMO.SQLServer');
      oApp := oDMO.Application;
      oServers := oApp.ListAvailableSQLServers;      try
        AStrings.BeginUpdate;
        for i := 1 to oServers.Count do
          AStrings.Add(oServers.Item(i));
      finally
        AStrings.EndUpdate;
      end;      bResult := true;
    except
      bResult := false; 
    end;    oServers := Unassigned;
    oApp := Unassigned;
    oDMO := Unassigned;     Result := bResult;
  end;////////////////////////////////////////////////////
下面是引用
  if GetSQLServerList(SqlServerList) then
     ShowMessage('Get The SQLServer List False')

解决方案 »

  1.   

    Project DHTool.exe raised exception EAbstractError With Message 'Abstract Error '
      

  2.   

    你做一个单纯的测试界面,看看:type
      TForm1 = class(TForm)
        Button1: TButton;
        ListBox1: TListBox;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementationUSES COMOBJ;{$R *.dfm}function GetSQLServerList(AStrings: TStrings): Boolean;
    var oDmo,oApp,oServers : OleVariant;
        bResult : boolean;
        i : integer;
    begin
      AStrings.Clear;
      try
        oDMO := CreateOleObject('SQLDMO.SQLServer');
        oApp := oDMO.Application;
        oServers := oApp.ListAvailableSQLServers;    try
          AStrings.BeginUpdate;
          for i := 1 to oServers.Count do
            AStrings.Add(oServers.Item(i));
        finally
          AStrings.EndUpdate;
        end;    bResult := true;
      except
        bResult := false;
      end;  oServers := Unassigned;
      oApp := Unassigned;
      oDMO := Unassigned;  Result := bResult;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      if not GetSQLServerList(ListBox1.Items) then
         ShowMessage('Get The SQLServer List Fail')
    end;
      

  3.   

    按照你上面說的測試沒問題!!
    我再找找看是什麼問題。   :<
    THKS!!