MigraFox es una biblioteca escrita en Visual FoxPro 9.0 que facilita la migración de estructuras y datos a servidores de bases de datos como SQL Server, MariaDB, MySQL, Firebird, entre otros. Además, expone una API para crear conexiones y enviar consultas SQL que se convierten en cursores actualizables o de solo lectura.
Migración sencilla de estructuras y datos a servidores de bases de datos. Creación de conexiones a diferentes motores de bases de datos. Creación de cursores actualizables o de solo lectura. Soporte para SQL Server, MySQL y MariaDB.
Clona este repositorio en tu entorno de desarrollo local.
git clone https://github.com/tu-usuario/MigraFox.git
Abre VFP y carga la librería:
SET PROCEDURE TO "c:\ruta\MigraFox.prg" ADDITIVE
Crear una instancia
LOCAL loDB
loDB = CreateObject("MYSQL")
loDB.cDatabase = "northwind"
loDB.cDriver = "MySQL ODBC 5.1 Driver"
loDB.cUser = "root"
loDB.cPassWord = "1234"
IF loDB.connect()
? "Conexión exitosa"
ELSE
? "Error en la conexión"
ENDIF
loDB.use("africa")
// Insertar un nuevo registro
USE africa
APPEND BLANK
REPLACE field1 WITH "valor1"
loDB.save()
loDB.close()
loDB.changeDB("northwind2")
lcSQLCommand = "SELECT * FROM customers WHERE country = 'Mexico'"
loDB.SQLExec(lcSQLCommand, "miCursor")
// Migrar todos los archivos DBF dentro de una carpeta
loDB.migrate("c:\ruta\carpeta\")
// Migrar un archivo DBF específico
loDB.migrate("c:\ruta\archivo.dbf")
MigraFox cuenta con un script interno que se ejecuta mediante un intérprete diseñado para facilitar las migraciones de bases de datos y la gestión de esquemas en múltiples lenguajes de programación. El objetivo principal es proporcionar una sintaxis intuitiva y unificada para definir y modificar estructuras de bases de datos, permitiendo a los desarrolladores evolucionar sus esquemas de manera sencilla y controlada.
La sintaxis del script está inspirada en YAML con algunas adaptaciones para satisfacer las necesidades específicas de la gestión de esquemas de bases de datos. La sintaxis se ha simplificado y se han agregado atributos personalizados para definir campos, tablas, relaciones y otros elementos de manera intuitiva.
- Sintaxis simplificada y legible para definir y gestionar esquemas de bases de datos.
- Soporte multiplataforma para lenguajes de programación populares.
- Migración eficiente y transformación de estructuras y datos de bases de datos.
- Actualización de estructuras a través de ficheros de scripting (.tmg)
- Control de versiones y seguimiento de cambios en los esquemas.
- Integración con varios sistemas de gestión de bases de datos.
A continuación se muestra un ejemplo completo que refleja toda la sintaxis del script.
# Definición de la tabla "Clientes"
- table:
name: Clientes
description: "Tabla que almacena información de los clientes."
fields:
- name: id
type: int
size: 11
autoIncrement: true
primaryKey: true
- name: nombre
type: varchar
size: 100
index: true
- name: direccion
type: varchar
size: 200
# Definición de la tabla "Categorias"
- table:
name: Categorias
description: "Tabla que almacena información de las categorías de productos."
fields:
- name: id
type: int
size: 11
autoIncrement: true
primaryKey: true
- name: nombre
type: varchar
size: 100
index: true
# Definición de la tabla "Productos"
- table:
name: Productos
description: "Tabla que almacena información de los productos."
fields:
- name: id
type: int
size: 11
autoIncrement: true
primaryKey: true
- name: nombre
type: varchar
size: 100
index: true
- name: precio_unitario
type: float
size: 8
decimal: 2
- name: categoria_id
type: int
size: 11
foreignKey:
fkTable: Categorias
fkField: id
onDelete: null
onUpdate: restrict
# Definición de la tabla "Facturas"
- table:
name: Facturas
description: "Tabla que almacena información de las facturas."
fields:
- name: id
type: int
size: 11
autoIncrement: true
primaryKey: true
- name: cliente_id
type: int
size: 11
foreignKey:
fkTable: Clientes
fkField: id
onDelete: null
onUpdate: restrict
- name: fecha
type: date
composed:
- columns: [cliente_id, fecha desc]
unique: true
# Definición de la tabla "Pedidos"
- table:
name: Pedidos
description: "Tabla que almacena información de los pedidos."
fields:
- name: id
type: int
size: 11
autoIncrement: true
primaryKey: true
- name: cliente_id
type: int
size: 11
foreignKey:
fkTable: Clientes
fkField: id
onDelete: null
onUpdate: restrict
- name: fecha
type: date
composed:
- columns: [cliente_id, fecha desc]
unique: true
# Definición de la tabla "DetallesFactura"
- table:
name: DetallesFactura
description: "Tabla que almacena el detalle de las facturas."
fields:
- name: id
type: int
size: 11
autoIncrement: true
primaryKey: true
- name: factura_id
type: int
size: 11
foreignKey:
fkTable: Facturas
fkField: id
onDelete: cascade
onUpdate: restrict
- name: producto_id
type: int
size: 11
foreignKey:
fkTable: Productos
fkField: id
onDelete: null
onUpdate: restrict
- name: cantidad
type: int
size: 11
- name: precio_unitario
type: float
size: 8
decimal: 2
composed:
- columns: [factura_id, producto_id]
unique: true
# Definición de la tabla "Empleados"
- table:
name: Empleados
description: "Tabla que almacena información de los empleados."
fields:
- name: id
type: int
size: 11
autoIncrement: true
primaryKey: true
- name: nombre
type: varchar
size: 100
- name: cargo
type: varchar
size: 50
# Definición de la tabla "Proveedores"
- table:
name: Proveedores
description: "Tabla que almacena información de los proveedores."
fields:
- name: id
type: int
size: 11
autoIncrement: true
primaryKey: true
- name: nombre
type: varchar
size: 100
index: true
- name: direccion
type: varchar
size: 200
# Definición de la tabla "Compras"
- table:
name: Compras
description: "Tabla que almacena información de las compras."
fields:
- name: id
type: int
size: 11
autoIncrement: true
primaryKey: true
- name: proveedor_id
type: int
size: 11
foreignKey:
fkTable: Proveedores
fkField: id
onDelete: null
onUpdate: restrict
- name: empleado_id
type: int
size: 11
foreignKey:
fkTable: Empleados
fkField: id
onDelete: null
onUpdate: restrict
- name: fecha
type: date
composed:
- columns: [proveedor_id, fecha desc]
unique: true
# Definición de la tabla "DetallesCompra"
- table:
name: DetallesCompra
description: "Tabla que almacena los detalles de las compras."
fields:
- name: id
type: int
size: 11
autoIncrement: true
primaryKey: true
- name: compra_id
type: int
size: 11
foreignKey:
fkTable: Compras
fkField: id
onDelete: cascade
onUpdate: restrict
- name: producto_id
type: int
size: 11
foreignKey:
fkTable: Productos
fkField: id
onDelete: null
onUpdate: restrict
- name: cantidad
type: int
size: 11
- name: precio_unitario
type: float
size: 8
decimal: 2
composed:
- columns: [compra_id, producto_id]
unique: true
Las contribuciones son bienvenidas. Si tienes alguna idea o mejora para MigraFox, no dudes en abrir un problema o enviar una solicitud de extracción.
MigraFox se distribuye bajo la Licencia MIT. Consulta el archivo LICENSE para obtener más información.
Si tienes alguna pregunta o comentario, puedes ponerte en contacto con el equipo de MigraFox enviando un correo electrónico a rodriguez.irwin@gmail.com.