home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 September / Chip_2001-09_cd1.bin / zkuste / delphi / kompon / d2345 / MSYSINFO.ZIP / Source / MSI_Engines.pas < prev    next >
Pascal/Delphi Source File  |  2001-06-19  |  3KB  |  138 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       MiTeC System Information Component              }
  5. {               Engine Detection Part                   }
  6. {           version 5.6 for Delphi 3,4,5                }
  7. {                                                       }
  8. {       Copyright ⌐ 1997,2001 Michal Mutl               }
  9. {                                                       }
  10. {*******************************************************}
  11.  
  12. {$INCLUDE MITEC_DEF.INC}
  13.  
  14. unit MSI_Engines;
  15.  
  16. interface
  17.  
  18. uses
  19.   SysUtils, Windows, Classes;
  20.  
  21. type
  22.   TEngines = class(TPersistent)
  23.   private
  24.     FBDE: string;
  25.     FODBC: string;
  26.     FDAO: string;
  27.     FADO: string;
  28.   public
  29.     procedure GetInfo;
  30.     procedure Report(var sl :TStringList);
  31.   published
  32.     property ODBC :string read FODBC write FODBC stored false;
  33.     property BDE :string read FBDE write FBDE stored false;
  34.     property DAO :string read FDAO write FDAO stored False;
  35.     property ADO :string read FADO write FADO stored False;
  36.   end;
  37.  
  38. implementation
  39.  
  40. uses Registry, MiTeC_Routines, COMObj;
  41.  
  42. { TEngines }
  43.  
  44. procedure TEngines.GetInfo;
  45. var
  46.   s,s1 :string;
  47.   OLEObj: OLEVariant;
  48. const
  49.   rkBDESettings = {HKEY_LOCAL_MACHINE\}'SOFTWARE\Borland\Database Engine';
  50.     rvBDEDLLPath = 'DLLPATH';
  51.     fnBDEDLL = 'IDAPI32.DLL';
  52.   rkODBCSettings = {HKEY_LOCAL_MACHINE\}'SOFTWARE\ODBC\ODBCINST.INI\ODBC Core\FileList';
  53.     rvODBCCoreDLL = 'ODBC32.DLL';
  54.  
  55.   { OLE object table class string }
  56.   daoEngine36 = 'DAO.DBEngine.36';
  57.   daoEngine35 = 'DAO.DBEngine.35';
  58.   daoEngine30 = 'DAO.DBEngine';
  59.  
  60.   adoEngine = 'adodb.connection';
  61.  
  62.   function GetOLEObject(CLSID: string): OLEVariant;
  63.   begin
  64.     try
  65.       result:=GetActiveOLEObject(CLSID);
  66.     except
  67.       try
  68.         result:=CreateOLEObject(CLSID);
  69.       except
  70.         result:=null;
  71.       end;
  72.     end;
  73.   end;
  74.  
  75. begin
  76.   try
  77.  
  78.   with TRegistry.Create do begin
  79.     rootkey:=HKEY_LOCAL_MACHINE;
  80.     if OpenKey(rkBDESettings,false) then begin
  81.       if ValueExists(rvBDEDLLPath) then begin
  82.         s:=ReadString(rvBDEDLLPath);
  83.         FBDE:=readverinfo(s+'\'+fnBDEDLL,s1);
  84.       end;
  85.       closekey;
  86.     end;
  87.     if OpenKey(rkODBCSettings,false) then begin
  88.       if ValueExists(rvODBCCoreDLL) then begin
  89.         s:=ReadString(rvODBCCoreDLL);
  90.         FODBC:=readverinfo(s,s1);
  91.       end;
  92.       closekey;
  93.     end;
  94.     free;
  95.   end;
  96.  
  97.   OLEObj:=GetOLEObject(daoEngine36);
  98.   if TVarData(OLEObj).VType<>varDispatch then
  99.     OLEObj:=GetOLEObject(daoEngine35);
  100.   if TVarData(OLEObj).VType<>varDispatch then
  101.     OLEObj:=GetOLEObject(daoEngine30);
  102.   if TVarData(OLEObj).VType=varDispatch then
  103.     FDAO:=OLEObj.Version;
  104.   OLEObj:=null;
  105.  
  106.   OLEObj:=GetOLEObject(adoEngine);
  107.   if TVarData(OLEObj).VType=varDispatch then
  108.     FADO:=OLEObj.Version;
  109.   OLEObj:=null;
  110.  
  111.   except
  112.     on e:Exception do begin
  113.       MessageBox(0,PChar(e.message),'TEngines.GetInfo',MB_OK or MB_ICONERROR);
  114.     end;
  115.   end;
  116. end;
  117.  
  118. procedure TEngines.Report(var sl: TStringList);
  119. begin
  120.   with sl do begin
  121.     Add('[ODBC]');
  122.     if ODBC<>'' then
  123.       Add(Format('Version=%s',[ODBC]));
  124.     Add('[BDE]');
  125.     if BDE<>'' then
  126.       Add(Format('Version=%s',[BDE]));
  127.     Add('[DAO]');
  128.     if DAO<>'' then
  129.       Add(Format('Version=%s',[DAO]));
  130.     Add('[ADO]');
  131.     if ADO<>'' then
  132.       Add(Format('Version=%s',[ADO]));
  133.   end;
  134. end;
  135.  
  136.  
  137. end.
  138.