Sincronizar DBF y MySQL

697 views
Skip to first unread message

Julio Rossi

unread,
Aug 16, 2012, 9:33:49 AM8/16/12
to publice...@googlegroups.com
Hola grupo, buen día!
Tengo que sincronizar una tabla nativa (DBF) con una tabla en MySql.
Las altas, bajas y modificaciones se realizan en la tabla nativa y necesito actualizar estos datos en la tabla MySql. Esto lo haría el usuario mediante un formulario cada vez que lo necesite.

La dos tablas tienen estos campos:

Codigo
Descripcion
Precio

¿Algún ejemplo o indicación de como sería lo más optimo?

Gracias desde ya.
Un saludo al grupo.

Julio Rossi






Fox Learner

unread,
Aug 16, 2012, 10:05:56 AM8/16/12
to publice...@googlegroups.com, julio...@ilt.com.ar
Según el manual, para "trabajar mezclando" datos remotos con nativos el mejor paradigma es usar la técnica de Paso a traves de Sql (SPT)( ya que esta permite mayor alcance al ejecutar instrucciones nativas del gestor externo mediante transacciones, principalmente), en conjunto con las vistas.

Como hacerlo?.. eso es algo que espero algún día entender... jeje

Saludos!


Carlos Miguel FARIAS

unread,
Aug 17, 2012, 7:30:51 AM8/17/12
to publice...@googlegroups.com
Hola Julio:
Para poder hacer una actualización eficiente tendrías que agregar a la tabla una columna de algo asi como versión, si tu hora fecha de servidor sgbd y pc origen de datos están sincronizados, podes usar un campo del datetime, para el versionado.
Cada vez que se modifica un registro, se actualiza el campo de version, si es un registro nuevo, se le carga un valor inicial.
Si no usas datetime (o date), podes usar un campo que empezas a contar desde 1 y le vas sumando 1 en cada cambio.
Obtenes un cursor completo (codigo, version) de la tabla a actualizar.
Indexas por código.
Haces un bucle sobre
En origen (sea DBF -> mySQL o viceversa), cuando se quieren pasar los datos al otro ámbito, debes ir leyendo el archivo de origen y:
Si codigo en origen no está en destino, registro origen se inserta en destino.
Si código está en ambas tablas, comparas versión. Si versión origen mayor (posterior) a destino, se actualiza el registro completo (descripcion, precio, version).
Y asi con todos los registros.
Una vez que terminaste de pasar datos nuevos, lees el cursor destino y buscas en origen si las codigos de destino estan en origen, si no están en origen, tienes que darlos de baja en la tabla destino (delete)
El uso de campo de version, te evita tener que comparar todos los campos de ambas tablas, en tu caso son pocos, pero si tuvieras muchos más campos, sería engorroso.
Si usas datetime, podes mejorar el desempeño:
a) Obtenes el mayor datetime de version en la tabla destino.
b) Seleccionas en tabla origen, todos los registros con datetimes posteriores al obtenido en destino.
c) Aplicas lo descripto en principio, de esa manera, el chequeo es mucho mas corto (el proceso de borrado no puede evitarse, salvo que al dar de baja, se cree un registro de bajas y se procesen las bajas contra dicho archivo).
Espero que te sea util, y cualquier aclaración, preguntas.
saludos: Miguel, La Pampa (RA)



--
 
 
 

Julio Rossi

unread,
Aug 17, 2012, 7:40:21 AM8/17/12
to publice...@googlegroups.com
Mil gracias Carlos, me es muy útil la explicación.
Y te agradezco enormemente el tiempo que te has tomado en responder. Un lujo como decimos por acá.
Muy útil lo que indicas del campo timestamp. o el contador. En mi caso utilizaria el timestamp en las dos tablas.
De todas maneras veo que no me salvo de recorrer la DBF (o viceversa) e ir actualizando o no la tabla MySql registro a registro, porque pensaba que tal vez hubiera algo como Update MiTalbaMySQL Set MiTablaDBF (¿mucho pedir no?)
Bueno, voy a ir implementandolo de acuerdo a tus indicaciones.
Un abrazo y un saludo al grupo.

Julio Rossi
--
 
 
 

Carlos Miguel FARIAS

unread,
Aug 17, 2012, 8:51:17 AM8/17/12
to publice...@googlegroups.com
Buen provecho!!!


--
 
 
 

Reply all
Reply to author
Forward
0 new messages