簡體   English   中英

delphi 使用 SQL Server 和 WMI

[英]delphi using SQL Server with WMI

我需要確定 sql server 實例(本地)作為安裝程序的一部分。

有沒有人有任何代碼如何使用 WMI 和 Delphi 執行此操作?

法學博士。

@JD,要使用 WMi 獲取 Sql Server 實例,您必須使用WMI Provider for Configuration Management Classes ,請參閱ServerSettings類。

檢查此示例代碼,使用 2 種不同的方法來完成相同的任務。

program GetWMI_SqlInstancesInfo;

{$APPTYPE CONSOLE}

uses
  Windows,
  Classes,
  ActiveX,
  Variants,
  SysUtils,
  WbemScripting_TLB in '..\..\Documents\RAD Studio\5.0\Imports\WbemScripting_TLB.pas';

procedure  WmiHelper(RootStr,WmiQuery:String);
var
  WMIServices  : ISWbemServices;
  WMILocator   : ISWbemLocator;
  Root         : ISWbemObjectSet;
  SWbemObject  : ISWbemObject;
  Item         : IEnumVariant;
  rgVar        : OleVariant;
  pCelFetched  : Cardinal;
begin
  WMILocator := CoSWbemLocator.Create();
  WMIServices := WMILocator.ConnectServer('.', RootStr,'', '', '', '', 0, nil);    //
  Root := WMIServices.ExecQuery(WmiQuery,'WQL', 0, nil);
  Item :=  (Root._NewEnum) as IEnumVariant;
    while  (Item.Next(1, rgVar, pCelFetched) = S_OK) do
    begin
      SWbemObject := IUnknown(rgVar) as ISWBemObject;
      if (SWbemObject <> nil) then
      begin
        SWbemObject.Properties_;
        Writeln(SWbemObject.GetObjectText_(0));
      end;
    end;
end;

//option 1 , shows all properties of the class just by running the query

procedure  GetWMISQLInstancesInfo;
begin
  WmiHelper('root\Microsoft\SqlServer\ComputerManagement','SELECT * FROM ServerSettings');
  //WmiHelper('root\Microsoft\SqlServer\ComputerManagement','SELECT * FROM SqlServiceAdvancedProperty where SQLServiceType = 1');
end;


//option 2 , in this case you must know the properties names to get the info
    procedure  GetWMISQLInstancesInfo2;
    var
      WMIServices: ISWbemServices;
      Root       : ISWbemObjectSet;
      Item       : Variant;
      I          : Integer;
    begin
      WMIServices := CoSWbemLocator.Create.ConnectServer('.', 'root\Microsoft\SqlServer\ComputerManagement','', '', '', '', 0, nil);
      Root  := WMIServices.ExecQuery('SELECT * FROM ServerSettings','WQL', 0, nil);
      for I := 0 to Root.Count - 1 do
      begin
        Item := Root.ItemIndex(I);
        Writeln('Instance Name '+VarToStr(Item.InstanceName));
      end;
    End;

    begin
     try
        CoInitialize(nil);
        try
          GetWMISQLInstancesInfo;
          GetWMISQLInstancesInfo2;
          Readln;
        finally
          CoUninitialize;
        end;
     except
        on E:Exception do
        Begin
            Writeln(E.Classname, ': ', E.Message);
            Readln;
        End;
      end;
    end.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM