En una parte de i programa uso la siguiente
rutina, sé que no es muy elegante per funciona:
* Se crea un objeto de la clase ODBCReg que
hereda todo de la clase Registry. Esta clase está
* implementada en el
fichero 'Registry.prg'.
oRegi=NEWOBJECT("ODBCReg",
"Registry.prg")
DIMENSION aTrab(1,2)
* Se comprueban los
drivers ODBC instalados.
oRegi.GetODBCDrvrs(@aTrab)
* Se
comprueba si el driver de Visual FoxPro está en la
lista.
nH=ASCAN(aTrab, "Microsoft Visual FoxPro")
IF nH==0
&& Si no lo está...
=MESSAGEBOX("No tiene instalado
el controlador de Visual FoxPro para ODBC",16,"Comprobaciones
Iniciales")
RETURN .F. && Se sale del
programa
ENDIF
* Si existe el driver de Visual FoxPro se
obtiene el nombre de la DLL.
oRegi.GetRegKey(
"Driver",@sDriver,"Software\ODBC\ODBCINST.INI\"+aTrab(nH),HKEY_LOCAL_MACHINE)
DIMENSION
aTrab(1,2)
ADEL(aTrab,1)
ADEL(aTrab,1,2)
* Se
comprueba si existe un origen de datos (DSN de sistema) llamado
'T_General'.
oRegi.GetODBCDrvrs(@aTrab,.T.)
nH=ASCAN(aTrab,
"T_General")
IF nH==0 && Si no existe se
crea como un DSN de sistema.
DECLARE Integer SQLConfigDataSource IN
odbccp32.dll Integer, Short, String @, String @
#DEFINE ODBC_ADD_SYS_DSN 4
lc_driver = "Microsoft Visual FoxPro Driver"
+ CHR(0)
lc_dsn = "dsn=T_General" + CHR(0) + "BackgroundFetch=Yes" +
CHR(0) + ;
"Description=Conexion al servidor de EnmarcaWin" + CHR(0) +
"Exclusive=No" + CHR(0) +;
"SourceDb=C:\IPE\DATOS\GENERAL.DBC"+ CHR(0)
+;
"Sourcetype=DBC" +CHR(0)+"Deleted=Yes"+CHR(0)+"Null=Yes"
IF
SQLConfigDataSource(0, ODBC_ADD_SYS_DSN, @lc_driver, @lc_dsn) = 1
RETURN .T. && OK
ENDIF
RETURN .F.
&& error