zoukankan      html  css  js  c++  java
  • Delphi取局域网上所有的SQL服务器名称

    unit GetSQLServerUnt;
    
    interface
    
    uses ADODB, OleDB, ActiveX,  ComObj, ADOInt, ADOConst, Classes, Windows, SysUtils,
      DB;
    
    
    const CLSID_SQLOLEDB_ENUMERATOR: TGUID = '{DFA22B8E-E68D-11d0-97E4-00C04FC2AD98}';
    function CreateADOObject(const ClassID: TGUID): IUnknown;
    //取得局域上所有的SQL服务器名
    procedure getSQLServerNames(Names: TStrings);
    
    
    implementation
    
    function CreateADOObject(const ClassID: TGUID): IUnknown;
    var
      Status: HResult;
      FPUControlWord: Word;
    begin
      asm
        FNSTCW  FPUControlWord
      end;
      Status := CoCreateInstance(ClassID, nil, CLSCTX_INPROC_SERVER or
        CLSCTX_LOCAL_SERVER, IUnknown, Result);
      asm
        FNCLEX
        FLDCW FPUControlWord
      end;
      if (Status = REGDB_E_CLASSNOTREG) then
        raise Exception.CreateRes(@SADOCreateError) else
        OleCheck(Status);
    end;
    
    procedure getSQLServerNames(Names: TStrings);
    var
      RSCon: ADORecordsetConstruction;
      Rowset: IRowset;
      SourcesRowset: ISourcesRowset;
      SourcesRecordset: _Recordset;
      SourcesName, SourcesType: TField;
    begin
      SourcesRecordset := CreateADOObject(CLASS_Recordset) as _Recordset;
      RSCon := SourcesRecordset as ADORecordsetConstruction;
      SourcesRowset := CreateComObject(CLSID_SQLOLEDB_ENUMERATOR) as ISourcesRowset;
      OleCheck(SourcesRowset.GetSourcesRowset(nil, IRowset, 0, nil, IUnknown(Rowset)));
      RSCon.Rowset := RowSet;
      with TADODataSet.Create(nil) do
      try
        Recordset := SourcesRecordset;
        First;
        SourcesName := FieldByName('SOURCES_NAME'); { do not localize }
        SourcesType := FieldByName('SOURCES_TYPE'); { do not localize }
        Names.BeginUpdate;
        try
          while not EOF do
          begin
            if SourcesType.AsInteger = DBSOURCETYPE_DATASOURCE then
              Names.Add(SourcesName.AsString);
            Next;
          end;
        finally
          Names.EndUpdate;
        end;
      finally
        Free;
      end;
    end;
    
    
    
    
    end.
    好的代码像粥一样,都是用时间熬出来的
  • 相关阅读:
    前端页面实现报警器提示音效果
    Bootstrap相关优质项目学习清单
    Bootstrap相关优质项目学习清单
    [慕课笔记] node+mongodb建站攻略
    基础知识(11)- 异常、断言、日志和调试
    洛谷 P2580 于是他错误的点名开始了
    codevs 4189 字典
    HDU 1251 统计难题
    HDU 1827 Summer Holiday
    HDU 3836 Equivalent Sets
  • 原文地址:https://www.cnblogs.com/jijm123/p/14260335.html
Copyright © 2011-2022 走看看