Exportación a fichero dbf

Buenos días,

En su momento incorporamos en nuestro programa de gestión una serie de exportaciones de datos para portales web de administraciones públicas con diferentes requerimientos. Unas en formato xml, otras en formato mdb y las que más problemas nos están danto en formato dbf. Para las xml no hay problemas porque generamos el formato desde Velneo. Para los formatos mdb y dbf, realicé unas pequeñas utilidades Phyton, donde en el caso del mdb crea la base de datos, las tablas realiza los “insert into” en ellas. En el caso del dbf, la tabla ya está creada de antemano (como dBase III Plus), y únicamente se lanzan los “insert into”. Tengo que indicar que para estos dos casos lo primero que se crea es un fichero txt y luego desde ejecutar comando del sistema ejecuto el resto.

Cuando se genera la exportación de los datos al dbf, utilizo removeAccents(txt) y replaceString(txt, “Ñ”, “N”) porque si no la utilidad en Phyton esas líneas no las crea en el fichero dbf, pero cuando subimos el dbf al portal en cuestión, me lo rechaza porque comprueba que el nombre del cliente coincida con el que ellos tienen, con acentos y ñ incluida.
Llevo todo el día realizando cambios en la creación del txt (utf-8, Windows-1252, CP1251…) y nada, así como trasteando en el utilizada Phyton (no tengo muchos conocimientos en Phyton), pero nada.

He probado con BD: Crear majedor(), BD: Conectar() conectando sin problemas, pero a la hora de montar la sentencia SQL con BD:SQL(), no consigo que me grabe absolutamente nada en el dbf.

¿Alguna idea? ¿A alguien le ha ocurrido algo similar?.

Adjunto paso el código en Phyton, así como las sentencias de BD que estoy usando.
Gracias de antemano

Adjunto el fichero del Phyton y como realizo la conexión y grabación con Velneo.

image

image

El fuente de Phyton.

dbf-sql.rar (683 Bytes)

Hola Anacreonte.

Prueba el siguiente código.

Rem ( Creamos el Manejador de la Tabla DBF externa. Indicamos el Path que contiene las tablas .dbf )
Rem ( Asegurarse que las tablas dbf sean compatibles dBase 5.0 )
BD: Crear manejador ( bd_externa, ODBC (compatible Microsoft SQL Server), “Driver={Microsoft dBase Driver (*.dbf)};DefaultDir=D:\TEMP\_Velneo;”, , , )
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. tabla_dbf es el nombre del fichero dbf )
—Set ( ODBC_CONSULTA_SQL, “INSERT INTO tabla_dbf (id,name,fecha) VALUES (1,‘CASTILLO’,‘2015/05/19’)” )
—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 comprobar si se ha ejecutado el comando SQL )
——Mensaje ( “Se ha ejecutado el comando " + ODBC_CONSULTA_SQL + " –> " + ODBC_NUM_FILAS + " filas”, Información, , )
——— …….
If ( OK_CONEXION = 1 )
—Set ( OK_MENSAJE, “Finalizado con éxito”)
Else
—Set ( OK_MENSAJE, "Mensaje de la conexión: " + OK_MENSAJE )
Mensaje ( OK_MENSAJE, Información, , )

Saludos
Paco Satué

Hola Paco,

En cuanto termine con lo que estoy ahora mismo “liado” lo pruebo y te comento.

Una de las cosas que hace muy grande a Velneo es su comunidad, que siempre responde.

Gracias mil.

Lo que me he dado cuenta, es que no importa el tipo de codificación que le indiques en
Fichero: Abrir (manejador, senda, Lectura/escritura (Crea o limpia), BOK, ISO-8859-1 ),
ya que cuando lo edito con Notepad++ siempre me indica que la codificación es ANSI, o algo estoy
haciendo mal.