publique una respuesta pero no estoy seguro de haberle dado enviar, asi que va de nuez!!!!
creo qe no es necesario saber la version del sistema operativo, solo se necesita determinar que odbc esta en uso, aqui temndo como es que yo hago para que "magicamente" el sistema pueda conectarce a mysql
odbcmysql = tipocontroladorsql("MySql")
? odbcmysql && aqui determinas cual es controlador que esta en uso, si esta vacio, entonces esta instalado algo mal
nlhandle = myconectar()
If nlhandle>0
sqlcmd = 'select * from algunatabla'
conmysql = SQLExec(nlhandle, sqlcmd, 'alguncursor')
EndIf
FUNCTION MYConectar
EXTERNAL ARRAY arrparamsql
driverenuso = TipoControladorSQL("MySql")
lcstringconn = "Driver={"+driverenuso+"};Port="+"3306"+";Server="+"aquivalaipdetuserverdemysql"+";Database="+"Aquivaelnmbredetubasededatos"+";Uid="+"aquivaeluser"+";Pwd="+"aquivaelpassword"+";Option=1"
SQLSETPROP(0, "DispLogin", 3)
SQLSETPROP(0, "DispWarnings", .F.)
lnsqlhandle = SQLSTRINGCONNECT(lcstringconn)
IF lnsqlhandle<=0
= AERROR(laerror)
ENDIF
RETURN lnsqlhandle
ENDFUNC
**
FUNCTION TipoControladorSQL
PARAMETER tservicio
DECLARE INTEGER SQLGetInstalledDrivers IN odbccp32 AS odbDrivers STRING @, INTEGER, INTEGER @
LOCAL cbuffer, nbufsize, ii, ch, cname
nbufsize = 16384
cbuffer = REPLICATE(CHR(0), nbufsize)
IF odbDrivers(@cbuffer, nbufsize, @nbufsize)=0
RETURN "-Error no hay odbc instalado"
ENDIF
CREATE CURSOR csResult (drvname C (100))
cbuffer = SUBSTR(cbuffer, 1, nbufsize)
cname = ""
FOR ii = 1 TO nbufsize
ch = SUBSTR(cbuffer, ii, 1)
IF ch=CHR(0)
IF .NOT. EMPTY(m.cname)
INSERT INTO csResult VALUES (m.cname)
ENDIF
cname = ""
ELSE
cname = cname+ch
ENDIF
ENDFOR
CLEAR DLLS 'ODBDRIVERS'
lcdrvname = ""
DO CASE
CASE tservicio="SQLServer"
SELECT drvname FROM csResult WHERE LOWER(drvname) LIKE "%native client%" INTO CURSOR Esta
CASE tservicio="MySql"
SELECT drvname FROM csResult WHERE LOWER(drvname) LIKE "%mysql odbc%" INTO CURSOR Esta
ENDCASE
IF _TALLY<>0
lcdrvname = ALLTRIM(Esta.drvname)
Else
lcdrvname = "-No determine el controlador"
ENDIF
USE IN (SELECT("csResult"))
USE IN (SELECT("Esta"))
RETURN lcdrvname
ENDFUNC