Rutina para saber si MDAC (Microsoft Data Access Components) está instalado y que versión está instalada.
Días pasados esta pregunta fue formulada en el Grupo de Noticias de Microsoft Visual FoxPro en español y hubo dos respuestas que en definitiva buscan si existe la siguiente clave en el registro de Windows: HKEY_LOCAL_MACHINE\Software\Microsoft\DataAccess\FullInstallVer como lo indica el artículo de la Base de Conocimientos de Microsoft:
-- Cómo comprobar la versión de MDAC --
http://support.microsoft.com/kb/301202
Las rutinas son las siguientes:
1. Respuesta de Luis María Guayán:
? "Version de MDAC: " + NVL(GetMDACVersion(),"No istalado")
FUNCTION GetMDACVersion()
#DEFINE HKEY_LOCAL_MACHINE -2147483646
LOCAL lcSubKey, lcValue, lcRet
lcSubKey = "Software\Microsoft\DataAccess"
lcValue = "FullInstallVer"
lcRet = ReadRegistryString(HKEY_LOCAL_MACHINE, lcSubKey, lcValue)
RETURN lcRet
ENDFUNC
FUNCTION ReadRegistryString(tnHKey, tcSubkey, tcEntry, tlInteger)
#DEFINE KEY_READ 25
LOCAL lnRet, nKey, nType, nSize, cValor
DECLARE INTEGER RegOpenKeyEx IN WIN32API ;
INTEGER nKey, ;
STRING cSubKey, ;
INTEGER nReserved, ;
INTEGER nSamDesired, ;
INTEGER @nResult
DECLARE INTEGER RegCloseKey IN WIN32API ;
INTEGER nKey
DECLARE INTEGER RegQueryValueEx IN WIN32API ;
INTEGER nKey, ;
STRING cValueName, ;
INTEGER nReserved, ;
INTEGER @nType, ;
STRING @cData, ;
INTEGER @nSizeData
nKey = 0
nType = 0
nSize = 255
cValor = REPLICATE(CHR(0), nSize)
lnRet = RegOpenKeyEx(tnHKEY, tcSubkey, 0, KEY_READ, @nKey)
IF lnRet # 0
RETURN .NULL.
ENDIF
lnRet = RegQueryValueEx(nKey, tcEntry, 0, @nType, @cValor, @nSize)
=RegCloseKey(nKey)
IF lnRet # 0
RETURN .NULL.
ENDIF
RETURN SUBSTR(cValor, 1, nSize-1)
ENDFUNC
2. Respuesta de Espartaco Palma Martínez
? "Version de MDAC: " + NVL(GetMDACVersion(),"No istalado")
FUNCTION GetMDACVersion
LOCAL lcRetValue
lcRetValue = .NULL.
#DEFINE HKEY_LOCAL_MACHINE -2147483646
TRY
oReg = NEWOBJECT("registry",HOME(1)+"ffc\registry.vcx")
lcKey = "Software\Microsoft\DataAccess"
IF oReg.OpenKey(lcKey,HKEY_LOCAL_MACHINE,.F.) = 0
lcSubKey = "FullInstallVer"
IF oReg.GetKeyValue(lcSubKey,@lcRetValue) # 0
lcRetValue = .NULL.
ENDIF
oReg.CloseKey()
ENDIF
CATCH TO oError
lcRetValue = .NULL.
FINALLY
RELEASE oReg
ENDTRY
RETURN lcRetValue
ENDFUNC
|