Características

Actualizada a la Versión FoxyDb 3.0 (8 de enero 2020)

Características Principales de FoxyDb

  • Es una librería de clases Gratuita (OpenSource) contenida en un único archivo PRG de fácil acceso y modificación foxydb.prg, el cual no se debe modificar para evitar problemas con las actualizaciones.
  • Permite actualmente conectarse a los servidores Mysql, MariaDb, FireBird, PostGreSql y SqlServer, e incluso se pueden agregar mas.
  • Se puede operar completamente desde la línea de comando de Visual FoxPro, lo que evita tener que estar probando dentro de un formulario, estar guardándolo y ejecutándolo, es decir abres otra ventana de Vfp donde haces las pruebas de lo que necesitas con la librería y en tu formulario pegas el código ya probado.
  • Administración completa de los cursores en memoria es decir el clásico control de Altas, bajas y modificaciones en un cursor como si fuera un simple DBF pero con la potencia del servidor de base de datos.
  • Administración completa de transacciones tanto en cursores como en el servidor de base de datos, es decir, que no tienes que preocuparte si aplicas o cancelas una transacción, si hay un error ya que FoxyDb se encarga de ello, deshaciendo automáticamente o manualmente según sea el caso, tanto en los cursores locales como en el servidor de base de datos, a demás maneja transacciones de solo lectura para solicitar consultas al servidor para mejorar el rendimiento y transacciones de Escritura para enviar a actualizar, insertar o eliminar datos al servidor
  • Generación automática de los comandos SQL necesarios para enviar al servidor como INSERT, UPDATE y DELETE, de forma transparente.
  • Administración completa de la Conexión al servidor, es decir tienes el control de conectarte y desconectarte, permanecer conectado siempre o desconectarte al enviar una instrucción al servidor o conjunto de instrucciones, te permite re-conectar, validar si realmente se esta conectado, etc, todo de forma automática o manual según la necesidad ajustando una sencillas propiedades.
  • Los cambios hechos a los cursores se pueden hacer desconectado del servidor, ya cuando se requieran enviar a guardar los datos se puede realizar la conexión al servidor, esto permite mantener un buen rendimiento en el servidor ya que que no hay transacciones en curso pendientes si no hasta el pequeño instante en que se requiere guardar la información.
  • Compartir conexión, útil cuando usas formularios con sesión privada de datos, no tienes que tener una conexión nueva, la puedes compartir y tendrás tus sesiones privadas con cursores devueltos de consultas al servidor todo separado como debe ser, es decir puedes realizar una conexión permanente (no recomendable por las buenas practicas) y abrir formularios con sesiones privadas de datos, compartes la primera conexión y las demás conexiones dentro de los formularios privados compartirán la primera conexión pero simulando ser diferentes como si tuvieras múltiples conexiones físicas pero realmente solo es una.
  • Es Importante usar el almacenamiento InnoDb en tus tablas para MySql y MariaDB ya que las transacciones son realizadas por la librería no tienes que preocuparte de nada, FoxyDb no es compatible con tablas MySam.
  • A demás debes agrega a todas tus tablas un Campo Primary Key Auto incrementable con el nombre que quieras (por default es ID) para que FoxyDB pueda realizar las operaciones necesarias, puedes decidir no usarlo en algunos casos pero tendrás que generar de forma manual las actualizaciones a esa tabla, usar un campo PK en una tabla con un registro no le afecta en nada, pero sin embargo te beneficia en permitir administrarla desde FoxyDb.
  • Permite obtener el ultimo valor del campo autoincremental  insertado, olvídate de usar MAX() u otras formas raras que no funcionan en ambientes con múltiples sesiones de usuarios, FoxyDb esta programado para usar las instrucciones SQL Nativas de cada Servidor para realizar esta tarea y tendrás la certeza de que siempre obtendrás el ultimo ID insertado sin importar cuantos usuarios estén conectados al a base de datos y agregando registros a la misma tabla.
  • Permite saber si se realizaron cambios en un cursor o en todos los cursores, muy útil para informar al Usuario si ha realizado algún cambio y evitar enviar al servidor a guardar cuando realmente no se hizo ningún cambio, incluso solo enviando la tabla y el campo o los campos en los que se realizaron los cambios, es muy común ver programadores que envían todo de nuevo para asegurase que se guarde todo, esto es realmente una mala practica porque el servidor realiza una acción que no requiere.
  • Recorre la tabla y revisa los registros para verificar los cambios que hayan tenidos y enviar los comandos SQL necesarios.
  • Genera Códigos únicos consecutivos, que no se salte, no duplique, muchos usuarios pueden estar guardando, por sucursal o periodo, por fecha, por empresa, facturas por serie y sucursal, de todas la formas que se necesiten por medio de una simple función, puedes usar una tabla para controlar todos los consecutivos de diferentes catálogos o puedes usar tablas diferentes. Ademas FoxyDb te permite iniciar o modificar el valor del consecutivo, agrega el registro si no existe, etc. a demás de aplicar el bloque necesario al registro para asegurarse de que el usuario reciba siempre el consecutivo correspondiente, sin saltarse aun cuando varios usuarios están intentando obtener un consecutivo único.
  • Permite refrescar los datos de un cursor que previamente fue guardado por medio de la instrucción SQL que lo abrió de forma automática, de forma manual por medio del valor del campo Primary Key Autoincremental, o enviando la instrucción SQL.
  • Actualiza solo los campos de la tabla en el servidor cuando el SELECT incluye 2 o mas tablas (inner join), por lo que solo se deben guardar los cambios hechos en una de ellas, generando el SQL correcto sea Insert o Update, seleccionando solo los campos modificados y por supuestos únicamente los que corresponden a la tabla que se modifico, aun cuando hayas modificado los valores de los otros campos que pertenecen a otra tabla de forma transparente.
  • Procedimientos Almacenados? por supuesto, ya que FoxyDb realmente hace uso de SQLEXEC y lo encapsula en la función oDb.Sql() que ahorra lineas de código y validaciones.
  • Transacciones tanto en los cursores generados locales y modificados por tus consultas , como en el servidor de base de datos.
  • Control de errores, son importantes, FoxyDb te informa con detalle que esta pasando en cada instrucción, a demás de informarte si algún comando SQL esta mal escrito o no se pudo ejecutar, tienes la propiedad oDb.error_Show = .t. para habilitar que se muestren los errores SQL, a demás que te devuelve un valor numérico de error en la propiedad oDb.error_Code que te permite administrar y crear tu propio código de errores según la función que usaste y modifica el valor de esta propiedad.
  • Errores ODBC, tambien te permite obtener el codigo de error ODBC, por medio de la propiedad oDb.error_ODBC, muy útil por ejemplo para saber que se intento duplicar un registro u otros casos.

FoxyDB tiene mas características que iré documentando, por lo que debes revisar sus propiedades y funciones para mas detalles.

8 pensamientos en “Características

  1. Buenas tardes, he tratado de implementar la clase en un proyecto con base de datos mysql pero me genera error en el procedimiento update, creo que tiene q ver algo con una «tabla» que se llama foxydb_TableFields, no esta en los zips descargables, se invoca en varias partes de la libreria pero no veo donde la definen o como se debería crear, si me pueden ayudar les agradeceré.

    Me gusta

    • Buen día ! Noticia fresquita. Anoche me quedé hasta las 5:30 AM viendo ese mismo problema. ¿Cómo un autor tan prolijo podría cometer semejanteS «burradaS»?… Firmado: El Juez, Señor de los burros. El autor aclara que FOXYDB es incompatible con el motor MyISAM que HAY QUE USAR INNODB. Si hubiera leído lo que el Sr. Antonio escribió, hoy no tendría tanto sueño. Ojalá le sirva de ayuda mi reniegue.

      Me gusta

  2. Buenas Tardes

    Excelente trabajo con la librería foxyDB, solo un pequeño detalle que impide implementarla con facilidad a programadores que ya están usando un motor de base de datos cliente servidor, es la obligatoriedad de tener que usar un campo con el nombre ID como primary Key, en los casos que ya la base de datos estén en producción, realizar todo ese cambio para ir implementando la librería sin tener que rehacer todo de un tirón es un poco cuesta arriba, mi sugerencia es que al método «Query» o al «CursorEdit» le agreguemos otro parámetros opcional, donde podamos poner el o los campos que conforman la Primary Key, en caso de no proporcional este parámetro entonces por defecto la librería utilizaría el campo «ID». De mi parte estoy en toda la disposición de ayudar en esta funcionalidad.

    Saludos,
    Fausto.

    Me gusta

Deja un comentario