RT。有代码解析最好了在网上查了些 有通过检查注册表判断的方式,有通过列出局域网上SQLSERVER服务的方式1.检查注册表
ARegistry := Tregistry.Create;
ARegistry.RootKey := HKEY_LOCAL_MACHINE;
try
ARegistry.OpenKey('SOFTWARE\MICROSOFT\MICROSOFT SQL SERVER\80\Registration', False);
cdkey := ARegistry.ReadString('CD_KEY');
ARegistry.CloseKey;
except
cdkey := '';
end;
问题:不管是否已安装SQLSERVER ,cdkey的值始终等于 ''
不知道我那个地方写的不对 还是这种判断方式有问题...2.列出局域网上SQLSERVER服务
SQLServer := CreateOleObject('SQLDMO.Application');
ServerList := SQLServer.ListAvailableSQLServers;
nServers := ServerList.Count;
for i := 1 to nservers do
begin
showmessage(ServerList.Item(i)); //无法列出本机的服务名称,因此无法检查本机是否安装
end;
SQLServer := NULL;
serverList := NULL;各位帮忙看下错在哪儿 或者有没有更好的办法?
ARegistry := Tregistry.Create;
ARegistry.RootKey := HKEY_LOCAL_MACHINE;
try
ARegistry.OpenKey('SOFTWARE\MICROSOFT\MICROSOFT SQL SERVER\80\Registration', False);
cdkey := ARegistry.ReadString('CD_KEY');
ARegistry.CloseKey;
except
cdkey := '';
end;
问题:不管是否已安装SQLSERVER ,cdkey的值始终等于 ''
不知道我那个地方写的不对 还是这种判断方式有问题...2.列出局域网上SQLSERVER服务
SQLServer := CreateOleObject('SQLDMO.Application');
ServerList := SQLServer.ListAvailableSQLServers;
nServers := ServerList.Count;
for i := 1 to nservers do
begin
showmessage(ServerList.Item(i)); //无法列出本机的服务名称,因此无法检查本机是否安装
end;
SQLServer := NULL;
serverList := NULL;各位帮忙看下错在哪儿 或者有没有更好的办法?
SQLServer:Variant;
ServerList:Variant;
i,nServers:integer;
sRetValue:String;
begin
comServer.Clear;
FileName.Text := ExtractFilePath(Application.ExeName) + 'contract';
try
SQLServer := CreateOleObject('SQLDMO.Application');
ServerList:= SQLServer.ListAvailableSQLServers;
nServers:=ServerList.Count;
for i := 1 to nservers do
comServer.Items.Add(ServerList.Item(i));
comServer.ItemIndex := 0;
SQLServer:=NULL;
serverList:=NULL;
except
Application.MessageBox(PChar('您的计算机可能没有安装 SQL SERVER 2000,请直接填写服务器名称!'),PChar('信息提示'),MB_OK or MB_ICONINFORMATION);
Exit;
end;
end;
只能列出部分 局域网其他电脑的服务名称..
try
oCn.Connected := False;
oCn.ConnectionString := 'Provider=SQLOLEDB.1;Integrated Security=SSPI;'
+ 'Persist Security Info=False;Initial Catalog=''master'';Data Source=(LOCAL)';
oCn.CommandTimeout := 0;
oCn.Open;
showmessage('已安装!');
except
showmessage('已安装!');
end;
可以实现判断 但会不会对程序性能造成很大影响?
第二种:在不打开SQL Server Management Studio的情况下 无法获得本机服务所以我觉得会不会是我的代码有什么问题,没有办法 最后我采用了
ADOCONNECTION连接 无法连接时捕获抛出的异常来判断是否有SQLSERVER服务无奈啊... 你有没有其他更好的办法?