Hola Gonzalo.
En principio el String de conexión está correcto.
De todas formas ten en cuenta que el driver ODBC de Visual Foxpro es del año 1999 y eso es la prehistoria (ver adjunto).
Las tablas libres DBF no deben tener características incorporadas recientemente, como los campos Autoincrementables o los campos de Ancho variable.
Frente a CSV tenemos la ventaja de poder usar consultas SQL con toda la potencia que da eso.
Aunque hace años que no importo de tablas libres, para otras fuentes uso el siguiente esquema:
Rem ( Creamos el Manejador de la Base de Datos externa )
BD: Crear manejador ( bd_externa, ODBC (compatible Microsoft SQL Server), “Driver={Microsoft Visual
FoxPro Driver};SourceType=DBF;SourceDB=D:\Trabajos\datosdbf;Exclusive=No;Collate=Machine;NULL=NO;DELETED=YES;BACKGROUNDFETCH=NO;”, , , )
Rem ( Conectamos con la Base de datos externa )
Set ( OK_CONEXION, 0 )
BD: Conectar ( bd_externa, , , OK_CONEXION, OK_MENSAJE )
—Rem ( Si la conexión tiene éxito se ejecuta el subproceso. OK_CONEXION siempre devuelve 0 )
—Set ( OK_CONEXION, 1 )
—Rem ( Ejecutamos la consulta SQL )
—Set ( ODBC_CONSULTA_SQL, “SELECT * FROM tabla_dbf_estandar” )
—Mensaje ( "Se va a ejecutar la consulta: " + ODBC_CONSULTA_SQL, Información, , )
—BD: SQL ( bd_externa, ODBC_CONSULTA_SQL, ODBC_NUM_FILAS, 1 )
------Rem ( Subproceso en el que podemos gestionar los registros obtenidos en la consulta SQL )
------Rem ( ODBC_NUM_FILAS siempre devuelve -1 )
------Mensaje ( “Se ha ejecutado el comando " + ODBC_CONSULTA_SQL + " → " + ODBC_NUM_FILAS + " filas”, Información, , )
------Set ( ODBC_CONTADOR, 1 )
------BD: Recorrer lista ( bd_externa )
---------// Mensaje ( "Importando " + ODBC_CONTADOR, Información, 0.2, )
--------- …
If ( OK_CONEXION = 1 )
—Set ( OK_MENSAJE, “Se han importado " + numberToString(ODBC_CONTADOR, “L”, 0) + " registros”)
Else
—Set ( OK_MENSAJE, "Mensaje de conexión: " + OK_MENSAJE )
Mensaje ( OK_MENSAJE, Información, , )
Mira que error devuelve la conexión en la variable OK_MENSAJE.
Saludos
Paco Satué
