Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Using SQL Server Native Client 11.0 driver
Message
From
14/10/2020 04:44:49
 
General information
Forum:
Visual FoxPro
Category:
Client/server
Miscellaneous
Thread ID:
01676553
Message ID:
01676643
Views:
40
>Antonio,
>Thank you for your reply. I did try parameter 6 and get the DLL name. But I prefer the version number (even in an abbreviated form) since it will tell me much more.
>Thank you very much!
>
>>Dmitry, that's the info you'll get from the driver (you can also try the InfoType parameter set to 6, this will give you the name of the driver's filename). Other info that might interest you would probably come from the driver registry's deployment information.
>>

Dimitry, I knew I had something getting more info about ODBC drivers around here somewhere, so here it is. Hope it helps with your requirements:
#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)
ENDFOR
Note: 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.
----------------------------------
António Tavares Lopes
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform