Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server delphi使用sqlserver和WMI_Sql Server_Delphi - Fatal编程技术网

Sql server delphi使用sqlserver和WMI

Sql server delphi使用sqlserver和WMI,sql-server,delphi,Sql Server,Delphi,我需要确定sql server实例(本地)作为安装程序的一部分 有没有人知道我如何使用WMI和Delphi实现这一点的代码 JD.@JD,要使用WMi获取Sql Server实例,必须使用,请参阅类 检查此示例代码,使用两种不同的方法来完成相同的任务 program GetWMI_SqlInstancesInfo; {$APPTYPE CONSOLE} uses Windows, Classes, ActiveX, Variants, SysUtils, WbemSc

我需要确定sql server实例(本地)作为安装程序的一部分

有没有人知道我如何使用WMI和Delphi实现这一点的代码


JD.

@JD,要使用WMi获取Sql Server实例,必须使用,请参阅类

检查此示例代码,使用两种不同的方法来完成相同的任务

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.
程序GetWMI\u SQLInstanceInfo;
{$APPTYPE控制台}
使用
窗户,
班级,
ActiveX,
变体,
SysUtils,
“..\..\Documents\RAD Studio\5.0\Imports\WbemScripting_TLB.pas”中的WbemScripting_TLB;
过程WmiHelper(RootStr,WmiQuery:String);
变量
WMIServices:ISWbemServices;
WMILocator:ISWbemLocator;
根:ISWbemObjectSet;
SWbemObject:ISWbemObject;
项目:IEnumVariant;
rgVar:油变异体;
pCelFetched:红衣主教;
开始
WMILocator:=CoSWbemLocator.Create();
WMIServices:=WMILocator.ConnectServer('.',RootStr','','','',0,nil)//
Root:=WMIServices.ExecQuery(WmiQuery,'WQL',0,nil);
项:=(Root.\u NewEnum)作为IEnumVariant;
while(Item.Next(1,rgVar,pCelFetched)=S_OK)do
开始
SWbemObject:=IUnknown(rgVar)作为ISWBemObject;
如果(SWbemObject nil),则
开始
SWbemObject.Properties;
Writeln(SWbemObject.GetObjectText_U0));
结束;
结束;
结束;
//选项1,只需运行查询即可显示类的所有属性
过程GetWMISQLInstancesInfo;
开始
WmiHelper('root\Microsoft\SqlServer\ComputerManagement','SELECT*FROM ServerSettings');
//WmiHelper('root\Microsoft\SqlServer\ComputerManagement','SELECT*fromSQLServiceAdvancedProperty,其中SQLServiceType=1');
结束;
//选项2,在这种情况下,您必须知道属性名称才能获取信息
过程GetWMISQLInstancesInfo2;
变量
WMIServices:ISWbemServices;
根:ISWbemObjectSet;
项目:变体;
I:整数;
开始
WMIServices:=CoSWbemLocator.Create.ConnectServer('.','root\Microsoft\SqlServer\ComputerManagement','','','','',0,nil);
Root:=WMIServices.ExecQuery('SELECT*fromserversettings','WQL',0,nil);
对于I:=0到Root.Count-1 do
开始
项目:=根项目索引(I);
Writeln('Instance Name'+VarToStr(Item.InstanceName));
结束;
结束;
开始
尝试
共初始化(零);
尝试
GetWMISQLInstancesInfo;
GetWMISQLInstancesInfo2;
Readln;
最后
协商初始化;
结束;
除了
关于E:Exception-do
开始
Writeln(E.Classname,“:”,E.Message);
Readln;
结束;
结束;
结束。