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.
    好的代码像粥一样,都是用时间熬出来的
  • 相关阅读:
    深入浅出SQL Server 2008 分区函数和分区表
    数据库的恢复模式
    Windows Server 2003网络负载均衡的实现(转)
    SharePoint2010网站备份还原简单介绍
    HTTP协议详解(转)
    SharePoint 2010之LINQ与SPMetal
    moss 自定义文档库文档图标
    SharePoint 2010环境搭建
    C#中的yield关键字
    .NET开发中你可能会用到的常用方法总结(添加ing...)
  • 原文地址:https://www.cnblogs.com/jijm123/p/14260335.html
Copyright © 2011-2022 走看看