Acerca de

ACTUALIZACIÓN (8 de Enero 2020): A partir de la versión FoxyDb 3.0, ya se puede utilizar SqlServer y PostGreSql

Me llamo Antonio Meza Pérez y les envió saludos desde México.

Soy programador de Visual Fox Pro, y desarrolle una pequeña pero potente Liberia (prg) que quiero compartir con ustedes, es totalmente gratis (OpenSource) que les permitirá crear una Capa de acceso a Datos, con varios Servidores de Bases de Datos, en especial con MySql, MariaDB y FireBird, en un futuro con ayuda de alguien que use Sql Server y PostgreSql se pueden agregar, al igual que otros mas.

Por ello cree este Blog para documentar la librería que he bautizado como FOXYDB, para que se pueda tener una referencia, a demás de que si alguien se interesa y pueda contribuir con reportar un error o mejorar las funciones, así como agregar otros motores de bases de datos.

Historia de FoxyDB

FoxyDb anteriormente conocido como DBVFP, comencé su desarrollo hace aproximadamente 5 años, la publique en el Foro de la Comunidad de Visual FoxPro en Español, pero trabajaba convirtiendo un Cursor devuelto por SqlEject en un Cursor Actualizable y estaba contenida en una clase visual dbvfp.vcx no muy flexible.

Llegue hasta la versión 3.8 corrigiendo pequeños bug, pero los tiempos cambian y DbVfp también lo hizo, por lo que eh reescrito desde Cero la librería DBVFP a principios del 2014, y como dio un giro de 360 grados inicio la versión 5.0 actualmente 5.33, cabe mencionar que las funciones están nombras en español lo que fue una mala idea en su momento para su desarrollo, asi como su estructura de funciones que dificulta el análisis para otros programadores que deseen mejorarla,  DBVFP solo puede trabajar con Mysql y MariaDB.

Por lo que decidí tomar la base estable de DBVFP  y a principios de Agosto 2014 reescribí la librería  que ahora se llama FOXYDB., que a demás ya trabaja con MySql, MariaDB y FireBIrd,  que ademas se pueden agregar otros motores de bases de datos ya que esta preparada pera ello.

Saludos
Antonio Meza Pérez

52 pensamientos en “Acerca de

  1. TENGO UN DESARROLLO DE CODIGO ABIERTO EN EL QUE QUISIERA USAR LA LIBRERIA PERO NO HE PASADO DEL CONNECT, EL CUAL SI ME DA POSITIVO, SIN EMBARGO CUALQUIER INSTRUCCION COMO QUERY, SQL, ETC ME ARROJA ERROR -5, UN SALUDO ANTONIO, YO TAMBIEN ESTOY EN MEXICO Y MIS RESPETOS COMO PROGRAMADOR,

    Me gusta

  2. Te felicito un gran aporte para todo el grupo de visual foxrpo 9 sp2, seria crear formularios (Catalogos, Maestro Detalle, Consultas, Reportes) en las diferentes bases de datos y colocarlos a disposición de todos en la muestra de tu formulario de prueba esta muy completo pero se necesita complementarlo mas.

    Me gusta

  3. Hola Antonio, quiero felicitarte por tu libreria, está muy buena,

    Hay bug cuando se quiere trabajar en sesion privada de datos, la libreria cierra el cursor que regresa la consulta SQLEXE, lo he probado con el metodo Query.

    Ejemplo.

    WITH _screen.ORRIBON.foxyDb
    IF .Conect(.handle)
    query(‘Select * asigntauras’,’asignaturas’)
    endif
    endwith

    La consulta la realiza correctamente, pero cierra el cursor y deja abierto el cursor donde guarda los cursores y tablas llamado DbCursor.

    Saludos.

    Me gusta

    • buenos días Lewis, la verdad no se mucho de esto de las bases de datos y no he podido establecer la comunicación con mariadb, sabes si hay que instalar algo mas ya que me marca error 1526, conexión de de controlador de ODBC, gracias.

      Me gusta

  4. Antonio antes de nada gracias por compartir el esfuerzo, no sé donde estoy fallando pero no logro hecharlo a andar, incluso me baje tu ABM de prueba, utilize, driver 5.1 de mysql y peor, lo baje de a 3.51 y me realiza las conexiones cuando le doy oDb.test() muestra .T. lo propio con ? oDb.connect() me dice siempre .T. pero al intentar hacer ? oDb.Sql(“Select * from usuarios”,»usuarios») me da siempre .F. ahora habilitando el debug, el error inicia en oDb.Begin da -1 y luego da error -5 y el mensage personalizado de no se puede abrir la tabla.

    Estoy con vfp 9 SP2, mysql driver 3.51, windows 7, y la DB esta en otro equipo en la LAN.

    Gracias por al ayuda de antemano..

    Me gusta

    • Hola que Version de Mysql estas usando? porque el uso de transacciones de solo lectura se implemento a partir de la 5.6 si no mal recuerdo, para las versiones anteriores hay una propiedad que debes poner en True y es

      mysql_Compatibility = .t.

      Prueba a ver si eso soluciona el detalle, te recomiendo usar el driver 5.1 de mysql o posterior ya que corrgien errores y aprovechan las mejoras de las versiones nuevas de Mysql o MariaDb.

      saludos
      Antonio Meza

      Me gusta

  5. Hola Antonio
    Estoy probando la clase la version 2.5 con un servidor web con conexion Mysql el detalle es que cuando trabajo localmente no tengo problemas al momento de grabar pero cuando grabo en el servidor web no me permite grabar me sale
    Command cannot be issued within a transaction
    y no graba al momento de abrir el programa me indica en esta seccion

    IF CURSORSETPROP(«Buffering», 5,__cursorName)

    Quisiera saber porque el local si y en servidor web no

    Saludos

    Wilbert

    Me gusta

  6. Saludos y gracias por tu esfuerzo y compartirlo.
    El caso es que con VFP9 SP2 estoy haciendo pruebas con MariaDB y MySQL y consigo conectar y traerme un cursor con los datos con oDb.sql() o oDB.query() sin problemas. Pero cuando hago un browse de este cursor para probar de cambiar datos nunca consigo que se graben en la base de datos/tabla con Odb.commit().
    Estoy ya un podo desanimado.
    Los ejemplos parecen siempre incompletos para explicar esto, supongo que pensais que ya tenemos algunos conceptos basicos mas claros. Pero esto que trato de hacer parece muy simple y no lo consigo!

    Gracias

    Le gusta a 1 persona

  7. Estimado Antonio, yo estoy usando FoxyTB y FoxyRB un excelente trabajo amigo. Ahora tengo que preguntarte si tienes algun inconveniente en que pase el codigo PRG a VCX ya que necesito tenerla en VCX???

    Saludos

    Me gusta

  8. Hola Antonio, excelente trabajo, felicidades. Estoy usando tu libreria con sql server 2017 y el ODBC Driver version 17, me funciona perfecto la conexion y la consulta, pero al momento de mandar la actualizacion siguiendo el ejemplo que muestras aqui en la pagina, me manda el error «Varialbe ID is not found» y pues mejor te hago la consulta antes de meterme a «escarbarle» a tu programa… de antemano muchas gracias por tu tiempo y saludos desde Matamoros!!!

    Me gusta

  9. Por cierto en tu codigo cambie esto para utilizar el ultimo ODBC Driver de SQL Server:

    * SqlServer
    driver_SqlServer = «{ODBC Driver 17 for SQL Server}»
    port_SqlServer = «1433»

    Me gusta

    • Hola, te comento que no debes cambiar los valores dentro del código, porque si hay una actualización tendrías que entrar a cambiarlos, simplemente cuando llamas a la librería en esa propiedad la cambias por el valor y listo.

      Respecto al campo ID todas tus tablas que quieras administrar con FoxyDb deben tener un campo ID autoincrementable, por default busca el campo con el nombre ID, pero si le pones otro nombre lo puedes indicar en la función .Update(«tabla», «nombreCampoId») y si quieres obtener el ultimo ID insertado seria así: .Update(«tabla», «nombreCampoId», .t.)

      saludos!!

      Me gusta

  10. Hola Antonio. Soy Carlos. Estoy iniciando con FoxyDB y hasta ahora voy bien, pero tengo un inconveniente con dos formularios. Resulta que en ambos realizo un query sobre la misma tabla usando el comando .sql() y en ambos para el cursor resultante utilizo el mismo nombre. Si abro ambos formularios (modaless) los cursores chocan y dejan de desplegarse en el grid. Trate de usar sesion privada de datos pero entonces FoxyDB no me reconoce los cursores generados. Como puedo resolver este problema. Saludos

    Me gusta

    • Hola!!! Lo recomendable es que siempre uses sesiones privadas de datos y sobre todo debes iniciar la librería en cada formulario, por lo que comentas la debes estar iniciando en tu Prg Inicial o en una variable publica por eso el problema con las sesiones privadas, Crea un propiedad en el formulario por ejemplo thisform.odb y en el load de tu formulario creas el objeto de foxydb

      * Load del Formulario
      thisform.odb = Newobject(‘foxydb»……..

      Y listo ya puedes usar esa propiedad dentro de todo tu formulario con sesión privada de datos, de preferencia si usaste clases de formularios puedes dejar lista tu clase base de formulario para que no tengas que repetir el código en cada formulario.

      saludos

      Me gusta

  11. Hola Antonio, despues de probar tu libreria FoxyDb V.3.01, encontre las siguientes observaciones:

    Plataforma de prueba:
    OS : Windows 10 x86 64 bits
    VFP : Advanced x86 32 bits
    PostGreSql : PostgreSQL 12.2, 64-bit

    1.- Driver, genera error
    driver_Postgresql = «{PostgreSQL ANSI}»

    Solucion:

    driver_Postgresql = «{PostgreSQL ODBC Driver(ANSI)}»

    2.- SET TRANSACTION : Sugerencia
    Referencia : https://habr.com/en/company/postgrespro/blog/467437/
    Cambiar:
    handle_Transaction_Mode_Select_PostgreSql = «READ ONLY»
    handle_Transaction_Mode_Update_PostgreSql = «ISOLATION LEVEL READ COMMITTED»
    Por:
    handle_Transaction_Mode_Select_PostgreSql = «ISOLATION LEVEL SERIALIZABLE READ ONLY DEFERRABLE»
    handle_Transaction_Mode_Update_PostgreSql = «ISOLATION LEVEL SERIALIZABLE READ WRITE»

    3.- Metodos UUID y VERSION
    Error: Name Column: __uuidGenerated = foxydb_uuid.uuid
    Error: Name Column: __currentVersion = foxydb_version.version
    SELECT uuid_generate_v4()
    SHOW server_version;

    Solucion:
    SELECT uuid_generate_v4() as uuid
    SELECT version() as version

    4.- PROCEDURE CursorClose
    Error: Aplicar TABLEREVERT en un cursor SIN CAMBIOS, causa error.
    En la version 2.61, estaba correcto, la aplicacion de TABLEREVERT

    IF __cursorClosingForce = true
    = TABLEREVERT(true,__cursorName)
    ENDIF

    Solucion:

    IF this.CursorChanges(__cursorName)
    IF __cursorClosingForce = true
    = TABLEREVERT(true,__cursorName)
    ELSE
    __errorCode = __cursorContainsChanges
    ENDIF
    ENDIF
    IF __errorCode = 0 && Si no hubo errores
    *!* Cerrar Cursor
    USE IN (__cursorName)
    *!* Quitar de dbCursor
    this.dbCursor(__cursorName,__cursorNameDelete)
    __errorCode = __cursorClosed
    __return = true
    ENDIF

    Me gusta

  12. En caso que el nombre del campo IDENTIFICADOR de la tabla (PostgreSql) es diferente de «ID», entonces cambiar
    en «PROCEDURE Command»

    __commandSql = __commandSql + » RETURNING » + __idFieldTableName

    Por

    __commandSql = __commandSql + » RETURNING » + __idFieldTableName + » AS Id»

    Me gusta

  13. Buenas tardes a Todos.
    Estoy apenas comenzando con FOXYDB 3.0 y he buscado por todas partes un ejemplo sencillo de guardar, nuevo y eliminar registro por lo menos de una tabla o cursor. El que hay en wordpress lo vi muy complejo. Es para arrancar.
    Si hay alguien que me pueda ayudar, le quedaré altamente agradecido.
    mi correo por si acaso: germanja@hotmail.com

    Mil gracias

    Me gusta

  14. Estimado Antonio. Estoy intentando bajar la librería DLL para manejo de correo SMTP pero por mas que busco, no encuentro el link de descarga. Podrías ayudarme por favor?. Gracias

    Me gusta

  15. Algo que debes resolver y es que en la funcion cursorEdit, puedes añadirle el id como parametro, pues por ejemplo tengo una tabla maestra y otra de detalles, y cuando defino en la conexion odb.id_name, pues tengo dos cursores para modificar, deberia en la funcion cursorEdit pasarle tambien el id de mi PK para solapar la definicion del anterior.

    Me gusta

    • Hola!!

      Realmente el id_name se ocupa en la función Update() por lo que en esta función puedes indicar el nombre de tu campo ID, ejemplo

      odb.Update(«NombreTablaMaestra»,»NombreIDMaestro», .t. )

      odb.Update(«NombreTablaDetalle»,»NombreIDDetalle»)

      saludos

      Me gusta

  16. Sr. Meza acabo de probar la libreria dbvfp5.31 que ud. tan generosamente a proporcionado a la comunidad Fox y satisface mis necesidades entre VFP9 y MySql, le estoy muy agradecida, por otro lado ¿ me recomienda ud. pasarme a la nueva version FoxyDb? la base de datos con la que trabajo y creo no cambiar es Mysql.

    Me gusta

    • Hola Jazmin!!! me da gusto que te haya servido, sin embargo es mejor que uses la ultima versión de FoxyDb, es mucho mejor, porque aprovecha las capacidades del servidor que uses, en cambio dbvFp trabaja con cursores actualizables que por ejemplo si te desconectas da problemas, en cambio con FoxyDb puedes obtener los cursores y trabajar estando desconectado del servidor y luego cuando se requiera te conectas y envías a actualizar y muchas otras mejoras.

      saludos!!

      Me gusta

  17. Saludos Antonio, excelente trabajo. Estoy probando la libreria y el jempo de ABC a clientes, monté la base de datos Foxydb y las tablas clientes y correlativos. El punto es que cuando hago conexión con la base de datos me funciona perfectamente cuando quiero ingresar datos de cliente la unica manera que no me da error es que vuelva darle clic en el boton Conectar a Mysql usando .Connection() y ahi si realiza el update del cursor a la base de datos. pregunto: Como corregir sin estar dando clic en la conexión?, cambié el datos de la variable driver_Mysql_51={MySQL ODBC 8.0 ANSI Driver}, la conexion me funciona aunque he leido por ahi que debe ser obligatoriamente con 5.1 32 bits

    saludos Antonio

    Me gusta

    • Hola!!! Es por las propiedades de conexión, por ejemplo:

      handle_Reconnection – Si se intenta reconectar al servidor

      Ponla en .T. para que se conecte y desconecte automáticamente es la forma en que la uso y que indican las buenas practicas, aun cuando tu servidor de base de datos esta de forma local.

      Pero si quieres estar siempre conectado entonces usa

      handle_Network – Si mantiene permanente la conexión al Servidor

      saludos

      Me gusta

  18. hola Antonio buenos día estoy tratando de utilizar CsFoxySmtp ya las tengo registrada las dos dll y la tengo en una capeta del sistema tengo win10 64bits pero me muestra error con gmail y outlook mi pregunta debo utilizar CsFoxySmtp64 por tengo el win10 a 64 pero cuando la cambio a 64 me dice la class definition CsFoxySmtp64 is not found que debo hacer

    Me gusta

Deja un comentario