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
Huy, compadre. Qué buena utilería!
Me gustaría aportar….
Cuando la liberes, conversamos….
Me gustaMe gusta
AL USAR EL QUERY, O SQL O NEW ME ARROJA ERROR -5 (1526 DE ODBC), OJALA ME PUEDAS AYUDAR
Me gustaMe gusta
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 gustaMe gusta
Hola, que versión de Mysql y Driver ODBC estas usando?
saludos
Antonio Meza
Me gustaMe gusta
Antonio, baje la 1.15 y jala bien con mysql, a que cuenta bancaria te puedo hacer una donacion?
No mucho, de acuerdo a mis posibilidades, pero tu trabajo merece respeto.
Un abrazo
Eulogio Mendoza
Me gustaMe gusta
Hola!!
Que bueno que te ha funcionado y gracias por el interés sobre aportar una donación, de hecho ya había pensando en poner un botón de paypal para ello, ya con tiempo lo pongo y si gusta sera bien recibida.
saludos
Antonio Meza
Me gustaMe gusta
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 gustaMe gusta
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 gustaMe gusta
WITH _screen.ORRIBON.foxyDb
IF .Conect(.handle)
query(‘Select * from asigntauras’,’asignaturas’)
endif
endwith
Me gustaMe gusta
Hola Antonio, creo que el error es mio.
Saludos.
Me gustaMe 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 gustaMe gusta
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 gustaMe 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 gustaMe gusta
Hola Antonio: Me gusta mucho tu librería, pero estoy usando vfp sp1, ¿hay algún inconveniente con algunas de las funciones?
Me gustaMe gusta
Hola, si te puede dar problemas no recuerdo exactamente donde pero si comentaron que marcaba errores, te recomiendo actualizar al SP2
saludos
Me gustaMe gusta
Hola Antonio gracias por tu aportación, me gustaría si tienes el tiempo de guiarme para hacer el cambio de mis tablas nativas a Firebird. Mi correo es spc.jrveliz@gmail.com
Me gustaMe gusta
buenas tardes, no he podido probar tu librería ya que baje el mariadb, pero me dice que no tengo conexión ODBC?, hay que bajar algo mas?, gracias por tus aportes.
Me gustaMe gusta
Hola!! si debes bajar el controlador ODBC actualmente se usa el de mysql porque el de MariaDB no funciona marca errores, te recomiendo bajar el 5.1 de 32bit, lo puedes bajar de aqui
https://dev.mysql.com/downloads/connector/odbc/5.1.html
saludos
Antonio Meza
Me gustaMe gusta
Gracias Antonio por responder, pero no, ya baje esa librería que mencionas y configure el conector, pero al ejecutar el test me sigue marcando error de que no se pudo conectar con el servidor, error 1526, ya reinicie pero no. tengp vfp 9 sp2, win 7 prof 64bits
Me gustaMe gusta
Buenas. Saludos. Si tienes Windows 64 Bits debes acceder a los odbc desde %SystemRoot%\SysWOW64\odbcad32.exe. Desde ahi instalas el controlador odbc de 32 bits de mariadb.
Me gustaMe gusta
Algo tienes mas configurado de los datos de conexion a MariaDB, comenta los detalles en el foro
https://groups.google.com/forum/?hl=es#!forum/publicesvfoxpro
saludos
Antonio Meza
Me gustaMe gusta
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 gustaMe gusta
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
Me gustaLe gusta a 1 persona
Saludos Luis, De casualidad tienes esta linea al momento de abrir tu cursor?
oDb.cursorEdit(«mi_cursor»)
Me gustaMe gusta
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 gustaMe gusta
La librería es opensource puedes realizar los cambios que necesites y si haces mejoras o encuentras errores me avisas !!.jeje
Me gustaMe gusta
Hola Antonio, tendrás por casualidad ejemplos de tu excelente trabajo,para iniciar con tu libreria yotra pregunta ya funciona con SQL Server uso, 2008 , 2011 y 2014, gracias, de antemano
Me gustaMe gusta
De donde se puede bajar la version 3.0 ?
Me gustaMe gusta
Ya esta en Descargas la versión 3.0.
saludos!!
Me gustaMe gusta
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 gustaMe gusta
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 gustaMe 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 gustaMe gusta
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 gustaMe 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 gustaMe gusta
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 gustaMe gusta
Muchas gracias por la información, voy a realizar los cambios que mencionas, una consulta con que otra versión de PostGreSql funcionan los cambios indicados?
saludos
Me gustaMe gusta
Probe con la versiones 10,11 y 12 en ambos plataformas de 32 y 64 bits de PostgreSql
Me gustaMe gusta
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 gustaMe gusta
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 gustaMe gusta
Puedes tomar este ejemplo escrito por el mismo Antonio
https://groups.google.com/g/publicesvfoxpro/c/Zf2N0Apnd84/m/Yzgc5H4rAgAJ
Saludos !
Me gustaMe gusta
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 gustaMe gusta
Hola Antonio…
¿Esta librería funciona para formularios que estén desarrollados con CursorAdapter?
Saludos y éxitos
Ricardo
Me gustaMe gusta
Hola!!
No, es diferente y con mejor rendimiento, incluso mas fácil de usar.
saludos
Me gustaMe gusta
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 gustaMe 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 gustaMe gusta
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 gustaMe 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 gustaMe gusta
Necesito comunicarme con antonio meza, si alguno del foro tiene su telefono o su correo le agradezco que me lo pase
Me gustaMe gusta
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 gustaMe 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 gustaMe gusta
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 gustaMe gusta
Buenas noches. Desd Republica Domicana, escribo. La carpeta en MEGA que usas para compartir archivos, me esta diciendo que ha sido removida por violacion
Me gustaMe gusta