Sql server delphi使用sqlserver和WMI
我需要确定sql server实例(本地)作为安装程序的一部分 有没有人知道我如何使用WMI和Delphi实现这一点的代码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
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;
结束;
结束;
结束。