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;各位帮忙看下错在哪儿  或者有没有更好的办法? 

解决方案 »

  1.   

    我用的是第二种方法var
      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;
      

  2.   

    to: bdmh我现在根本就无法列出本机的服务名称...怎么检查得到呀
    只能列出部分 局域网其他电脑的服务名称..
      

  3.   

    我使用上面的代码 根本无法列出自己的SQL服务的  有问题 !但是打开SQL Server Management Studio后再运行我的检查程序 又可以列出..  怎么办?
      

  4.   

    采用ADOCONNECTION连接来判断
    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;
    可以实现判断  但会不会对程序性能造成很大影响?
      

  5.   

    to:ffwin我使用那两种方法都可以运行 没有异常 但是第一种:cdkey的值始终是空的
    第二种:在不打开SQL Server Management Studio的情况下 无法获得本机服务所以我觉得会不会是我的代码有什么问题,没有办法 最后我采用了
    ADOCONNECTION连接 无法连接时捕获抛出的异常来判断是否有SQLSERVER服务无奈啊...   你有没有其他更好的办法?