Abrir conexión con Extended Properties=dBASE V

46 views
Skip to first unread message

Victor Casajuana Mas

unread,
Mar 1, 2024, 10:45:05 AM3/1/24
to ADO Harbour
Hola.

Tengo unas tablas DBF que tienen campos tipo string de 1024 de ancho, es una burrada, lo sé, pero ahí están. Cuando lanzo cualquier consulta SQL con ADO a estas tablas, el resultado que me devuelve no es correcto, me pone valores en las columnas incorrectos.
Un simple:

SELECT *
FROM TABLA

Si solo selecciono campos con tamaños "normales" tampoco funciona la consulta.

He mirado información y he visto que en dBase IV había un límite de 256 para los campos tipo string y en Dbase V se amplió a 2048.
El tema es que mi cadena de conexión para ADO es la siguiente:
'Provider=Microsoft.Jet.OLEDB.4.0;Data Source="' + cPath + '";Extended Properties=dBASE IV;User ID=Admin;Password=;'

y si la cambio a:
'Provider=Microsoft.Jet.OLEDB.4.0;Data Source="' + cPath + '";Extended Properties=dBASE V;User ID=Admin;Password=;'

cuando conecto me devuelve el siguiente error:
Error description: (DOS Error -2147352567) WINOLE/1007  No se pudo encontrar el archivo ISAM instalable. (0x80004005): Microsoft JET Database Engine
   Args:
     [   1] = C   Provider=Microsoft.Jet.OLEDB.4.0;Data Source="c:\visionwin\gestion\e01\";Extended Properties=dBASE V;User ID=Admin;Password=;


Alguien me puede indicar como puedo conectar para utilizar como base Dbase V en la conexión ADO?

Gracias!

David Field

unread,
Mar 1, 2024, 3:24:29 PM3/1/24
to ADO Harbour
Victor,

Buscando tu problema en Google encuentro que quizá lo puedas resolver con otro Provider, por ejemplo el de Foxpro o el de Advantage.

Aqui esta advantage Descargas - Advantage

No tengo más datos que proveerte ya que no uso DBF's.

Saludos,
David Field

Victor Casajuana Mas

unread,
Mar 5, 2024, 4:30:05 AM3/5/24
to ADO Harbour
Hola David.

He estado buscando cadenas de conexión para FoxPro pero no me funcionan. 

No obstante, me vino una idea referente a los campos mayores de 256. Las consultas con el driver DBase IV no trabajan bien, la información que muestra en los campos que están después del campo con tamaño superior a 256 no es correcta.

Por ejemplo, en una tabla con estos campos:

NOMBRE    TAMAÑO
CODIGO        10 
NOMBRE       100
COMENTARIO  1024
PAIS          50

si hacemos un 
SELECT *
FROM TABLA

La respuesta no es correcta, ya que la información del campo PAIS la devuelve truncada

aunque hagamos
SELECT CODIGO,NOMBRE,PAIS
FROM TABLA

La respuesta continúa siendo incorrecta en el campo PAIS

He pensado que el driver lee secuencialmente los registros y cuando llega al que tiene un tamaño superior a 256, solo lee estos 256 caracteres y luego continua desde el siguiente bit como si fuese el campo siguiente, pero aún continúa siendo el carácter 257 del campo COMENTARIO por lo que la información a partir de ahí sale truncada.

He puesto el campo COMENTARIO al final de la tabla:

NOMBRE    TAMAÑO
CODIGO        10 
NOMBRE       100
PAIS          50
COMENTARIO  1024

y a partir de ahí todo funciona correctamente, al llegar al final de línea, se debe resetear y en el siguiente registro empieza correctamente.

Con esto ya me vale, porque los campos de 1024 que tienen las tablas suelen ser descripciones, comentarios, etc... que no tienen mucha funcionalidad o ninguna cuando realizas consultas 

De momento, con este ajuste ya lo tengo solventado. Lo posteo aquí por si alguien llega con el mismo problema.

No obstante, continuaré buscando si encuentro la forma de conectar mediante el Driver de DBase V ya que sí acepta hasta 2048 como tamaño de un campo en el DBF. Sé que es una burrada, mala praxis, mal diseño de la estructura de las tablas, etc... pero las herencias que a veces tenemos nos hacen mantener este tipo de fallas.

Salud!

David Field

unread,
Mar 6, 2024, 7:27:13 PM3/6/24
to ADO Harbour
Victor,

Gracias por compartir esa información.

Saludos,
David Field

Reply all
Reply to author
Forward
0 new messages