#DEFINE HKEY_LOCAL_MACHINE 0x80000002 #DEFINE ODBC_DRIVERS "SOFTWARE\ODBC\ODBCINST.INI" SET CLASSLIB TO (HOME(1) + "FFC\registry") ADDITIVE LOCAL Reg AS registry m.Reg = CREATEOBJECT("registry") LOCAL ARRAY Entries(1) m.Reg.openkey(ODBC_DRIVERS,HKEY_LOCAL_MACHINE,.F.) m.Reg.enumkeys(@m.Entries) m.Reg.closekey() LOCAL Driver AS String LOCAL kValue AS String LOCAL Drivers AS Integer LOCAL ARRAY InstalledDrivers(1, 4) m.Drivers = 0 FOR EACH m.Driver IN m.Entries m.Reg.openkey(ODBC_DRIVERS + "\" + m.Driver,HKEY_LOCAL_MACHINE, .F.) IF m.Reg.getkeyvalue("Driver", @m.kValue) = 0 m.Drivers = m.Drivers + 1 DIMENSION m.InstalledDrivers(m.Drivers, 4) m.InstalledDrivers(m.Drivers, 1) = m.Driver IF m.Reg.getkeyvalue("DriverODBCVer", @m.kValue) = 0 m.InstalledDrivers(m.Drivers, 2) = m.kValue ELSE m.InstalledDrivers(m.Drivers, 2) = "" ENDIF IF m.Reg.getkeyvalue("Driver", @m.kValue) = 0 IF "%" $ m.kValue m.kValue = STRTRAN(m.kValue, STREXTRACT(m.kValue, "%", "%", 1, 4), GETENV(STREXTRACT(m.kValue, "%", "%"))) ENDIF m.InstalledDrivers(m.Drivers, 3) = m.kValue m.InstalledDrivers(m.Drivers, 4) = FDATE(m.kValue) ELSE m.InstalledDrivers(m.Drivers, 3) = "" m.InstalledDrivers(m.Drivers, 4) = {} ENDIF ENDIF m.Reg.closekey() ENDFOR * For displaying purposes... CLEAR FOR m.Drivers = 1 TO ALEN(m.InstalledDrivers, 1) ? m.InstalledDrivers(m.Drivers, 1), ; "/ Version:", m.InstalledDrivers(m.Drivers, 2), ; "/ File:", m.InstalledDrivers(m.Drivers, 3), ; "/ Date:", m.InstalledDrivers(m.Drivers, 4) ENDFORNote: the version stated in this list may refer to the ODBC version, not the driver's version. Use the SQLGetInfo to get the driver's version.