Trabajar con Mysql y Vfp9

2,306 views
Skip to first unread message

alvarocastellar

unread,
Aug 4, 2017, 3:05:28 PM8/4/17
to Comunidad de Visual Foxpro en Español
Buenas tardes amigos.
Llevo tiempo travbajando en vfp y la verdad me ha ido de maravilla
Sin embargo ahora tengo un cliente que quiere(es una orden) trabajar desde su casa y actualizar la informacion de su almacen que se encuentra en otro punto de la ciudad.
Entiendo que la manera mas facil es cambiar de base de datos a una que se pueda montar en la nube, servidor web etc.., por temas de licencimiento y rendimiento creo que se le adapta Mysql. Mis inquietudes son estas.
hay alguna otra solucion que le puedar dar a ese cliente?
Alguien tiene algun codigo referente a la conexion y manejo de la base de datos? (temas como la cadena de conexion y tambien si la conexcion esta activa cuando quiera hacer una consulta o modificacion a algun registro de la tabla).  
Si es posible algun link o manual de como trabajar con vfp9 y msql les estaria muy agradecidos


Alvaro castellar
Cartagena-Colombia



Antonio Meza

unread,
Aug 4, 2017, 4:16:57 PM8/4/17
to Comunidad de Visual Foxpro en Español
Mysql no te lo recomiendo por que es de PAGO, salvo que quieras publicar tu codigo fuente entonces es gratis jajaja

Mejor MariaDB que es lo mismo pero mejorado y para tu pregunta puedes probar FoxyDb 


saludos
Antonio Meza

alvarocastellar

unread,
Aug 4, 2017, 6:03:08 PM8/4/17
to Comunidad de Visual Foxpro en Español
Hola antonio buenas tardes estuve revisando y me suena mucho tu propuesta, una consulta adicional:
Hay alguna forma de migrar las tablas dbf a MariaDb?

Antonio Meza

unread,
Aug 4, 2017, 6:09:08 PM8/4/17
to Comunidad de Visual Foxpro en Español
Por ahi alguien creo un migrador para Mysql ese te sirve perfectamente, en mi caso opte por crear las tablas manualmente y luego con la ayuda de FoxyDb pase tabla por tabla segun mi necesidad al nuevo desarrollo, fue lo mejor que exportar todo igual pues tienes que aprender mucho sobre SQL y olvidarte de los dbf de tener todos los registros siempre disponibles y otros detalles mas.

Carlos Miguel FARIAS

unread,
Aug 4, 2017, 6:09:22 PM8/4/17
to Grupo Fox
La migración más fácil es la que puedes hacer con el mismo fox.
Una pequeña aplicación tuya evita tener que estar chequeando tipos de datos poco compatibles (necesitan un casteo especial, ni imposible ni difícil).
Además, es el momento ideal para pegarle una revisada a la normalización que tienes
Saludos: Miguel

Carlos Miguel FARIAS

unread,
Aug 4, 2017, 6:10:03 PM8/4/17
to Grupo Fox
Tal cual.

alvarocastellar

unread,
Aug 4, 2017, 6:16:11 PM8/4/17
to Comunidad de Visual Foxpro en Español
Gracias antonio, yo Sql lo manejo he realizado algunos proyectos pero no con VFP, y podria crear las tablas de forma manual no le veo inconveniente  pero como puedo hacer para migrar la informacion de ese cliente al nuevo motor de base de datos?, se puede hacer por FoxyDb?

Algo adicional amigo antonio ya que veo que manejas bastante el tema. En el aplicativo que les comento yo realizo un cierre diario este proceso lo que haces es cambiar la fecha de corte de trabajo y limpiar tres tablas que uso para el POS de ventas, estas tres tablas una contiene los articulos que se venden, otra los totales de la cuenta junto con el numero de factura y otra la o las diferentes formas con las que se pagaron las cuentas. Cuando cierro el dia las tres tablas las copio con otro nombre y las originales las limpio para comenzar un nuevo dia de trabajo.
Como me puedes sugerir que manejo este proceso de ahora en adelante?

Nuevamente te agradezco mucho tu ayuda

alvarocastellar

unread,
Aug 4, 2017, 6:17:24 PM8/4/17
to Comunidad de Visual Foxpro en Español
Gracias amigo miguel. checare esa opcion tambien porque la idea es que el cliente no se atrase demasiado por el cambio de base de datos.

Antonio Meza

unread,
Aug 4, 2017, 6:38:20 PM8/4/17
to Comunidad de Visual Foxpro en Español
Una vez que ya estas conectado al servidor con FoxyDb, solo abres tu tabla DBF y luego simplemente creas un Cursor con FoxyDb hacia la tabla del servidor y por medio de un scan actualizas ese cursor con los datos del dbf y luego mandas a guardar y listo, algo asi

use clientes.dbf
odb.Connect()
odb.Query("Select * from Clientes", "ClientesMariaDb")
odb.CursorEdit("Clientes")

Select Clientes 
scan
       insert into ClientesMariaDb (campo1, campox....) values (clientes.campo1, clientes.campox....)
endscan

odb.Update("ClientesMariaDb")
odb.Commit()

Algo así seria a grandes rasgos!!!

En cuanto al menejo que tienes de limpiar las tablas tienes que replantear el problema, porque aun cuando usas DBF no deberías hacer eso.

saludos
Antonio Meza

alvarocastellar

unread,
Aug 4, 2017, 6:41:05 PM8/4/17
to Comunidad de Visual Foxpro en Español
Gracias, si.. debo ver como lo manejo de ahora en adelante

Andres Naranjo Robledo

unread,
Aug 4, 2017, 8:03:31 PM8/4/17
to Comunidad de Visual Foxpro en Español
AmigoS aqui dejo una conversacion donde subi algunos carpetas y ahí pdf de como.conectarse a.MySQL y SQLserver con ADO y ODBC , también descarga los.libros que pongo.ahi y ahi te pongo los números de los capítulos y de la.pagina de.los.libros.donde.esta todo lo que deseas

Revisa el Quinto mensaje de la conversación

https://groups.google.com/forum/m/#!topic/publicesvfoxpro/HIa0-NAXUJ8

Andres Naranjo Robledo

unread,
Aug 4, 2017, 8:07:18 PM8/4/17
to Comunidad de Visual Foxpro en Español
Amigos dejó la dirección ( sitio web) de una conversación en la comunidad de VFP9 y una carpeta con los instaladores de MyOLEDB Y su uso en VFP9 SP2 , esta en google drive donde puedes descargarlos, si quieres usar sql server , bajate sqloledb desde microsoft y si otra base de datos baja los instaladores de OLEDB para esa base de datos, que quieres usar , también dejo Las Letras(codigo) en un bloc de notas ALGUNAS FORMAS DE SACAR DATOS CON VFP9SP2
- ADO - MYSQL - OLEDB DE MYSQL(MYOLEDB) Y TMABIEN LES DEJO LA CADENA DE CONEXION DE (MYOLEDB (OLEDB DE MYSQL) CON VFP9

https://groups.google.com/forum/m/#!topic/publicesvfoxpro/-RwuMTfQvDQ

Antonio Meza

unread,
Aug 5, 2017, 12:09:10 AM8/5/17
to Comunidad de Visual Foxpro en Español
Pero manejar OleDb o Ado es una pesadilla jejeje sera mas rápido que ODBC pero el manejo no se compara, tanto usarlos directamente como con CursorAdapter, me quedo 1000 y 100 veces mas con ODBC con SPT de VFP!!!.

saludos
Antonio Meza

alvarocastellar

unread,
Aug 6, 2017, 12:24:04 PM8/6/17
to Comunidad de Visual Foxpro en Español
Muchas gracias a todos por sus aportes, de verdad que este foro es lo mejor, voy seguir el consejo de Antonio meza y trabajare como MariaDb despues les comento mi experiencia

amarante...@gmail.com

unread,
Aug 6, 2017, 2:01:11 PM8/6/17
to Comunidad de Visual Foxpro en Español
Hola señor / señora
Soy una persona que ofrece préstamos a las personas necesitadas con un capital que se utilizará en el corto y largo plazo a partir de 1000? a 3000.000? cualquiera que desee serio este préstamo. 5% de interés anual, de acuerdo con la cantidad prestada como particularmente no quiero violar la ley contra la usura. Usted puede pagar en 2 a 20 años como máximo en función de la cantidad prestada. Depende de usted para los pagos mensuales. No te pido que el reconocimiento de escritura certificado de deuda. Para obtener más información póngase en contacto con mi dirección de correo electrónico: amarante...@gmail.com

amarante...@gmail.com

unread,
Aug 6, 2017, 2:03:29 PM8/6/17
to Comunidad de Visual Foxpro en Español

amarante...@gmail.com

unread,
Aug 6, 2017, 2:29:00 PM8/6/17
to Comunidad de Visual Foxpro en Español

Carlos Miguel FARIAS

unread,
Aug 6, 2017, 6:14:07 PM8/6/17
to Grupo Fox
Alvaro, buena elección y si María DB  mucho, tienes la opción de amarante

GETIANG

unread,
Aug 7, 2017, 12:05:11 PM8/7/17
to Comunidad de Visual Foxpro en Español
Buenas tardes Antonio

Pregunto: Si utilizas mariadb, en teoria deberías utilizar el conectar de maria db. cual coneces que se estable. porque tengo entendido que dan problemas
Yo actualmente utiliza el conector de Mysql

Gracias por tu respuesta

Antonio Meza

unread,
Aug 7, 2017, 12:37:01 PM8/7/17
to Comunidad de Visual Foxpro en Español
Uso el de Mysql 5.1 y no he tenido problemas, hay quienes usan versiones mas recientes pero igual de Mysql, de MariaDb lo que no me gusta es que las fechas vacías te pone la fecha actual del sistema, entonces en un campo vació o que debería estar vació te muestra la fecha actual y eso confunde al usuario.

saludos
Antonio Meza

Jairo Miranda

unread,
Aug 7, 2017, 12:46:29 PM8/7/17
to publicesvfoxpro
Con ActiveVfp . puedes hacer muchas cosas sin necesidad de cambiar el motor de base de datos.



JM

GETIANG

unread,
Aug 7, 2017, 1:33:25 PM8/7/17
to Comunidad de Visual Foxpro en Español
Gracias por sus respuestas

Jairo este ActiveVfp. como trabaja en sí.! Me puedes dar una visión rápida del proyecto.

Gracias

alvarocastellar

unread,
Aug 7, 2017, 1:54:29 PM8/7/17
to Comunidad de Visual Foxpro en Español
Hola Antonio te comento que ya migre algunas tablas, instale el driver de conexion de mysql y cargue la utilidad FoxyDb, si embargo no he podido conectarme,  puedes indicarme donde tengo el error ?? te envio algunas imagenes para que puedas ayudarme. Muchas gracias
Imagen3.png
Imagen2.png
Imagen1.png

Andres Naranjo Robledo

unread,
Aug 7, 2017, 2:54:04 PM8/7/17
to Comunidad de Visual Foxpro en Español
Amigo apesar de loq ue diceantonio meza que es verdad, SPT CON ODBC es mas rapido , pero OLEDB , su union(conexion) a la base de datos es mas segura Y TE DA VARIAS opciones de conectarte y lo haces como en visual studio , con la tecnologia ADO Y OLEDB, prueba con lo que te envie alavarocastellar me preguntas si pruebas

Antonio Meza

unread,
Aug 7, 2017, 4:18:14 PM8/7/17
to Comunidad de Visual Foxpro en Español
El problema es que te hace falta instalar el Driver ODBC, te recomiendo el Mysql Odbc Driver 5.1 y debe ser siempre por siempre y para siempre 32bit ya que VFP trabaja solo a 32bit, no pasa nada que el servidor de Mysql o MariaDb sea de 64bit.

saludos
Antonio Meza

El lunes, 7 de agosto de 2017, 12:54:29 (UTC-5), alvarocastellar escribió:

Antonio Meza

unread,
Aug 7, 2017, 4:21:00 PM8/7/17
to Comunidad de Visual Foxpro en Español
Por lo que he leído OLEDB y ADO son mas rápidos que ODBC, lo que digo que es mas rápido usar ODBC que las otras dos, incluso con CursorAdapter, el problema es que OLEDB y ADO no te crean un cursor como lo obtienes en automático con ODBC por medio de SPT, y es ahí donde esta la ventaja en VFP,

saludos
Antonio Meza

alvarocastellar

unread,
Aug 7, 2017, 5:16:03 PM8/7/17
to Comunidad de Visual Foxpro en Español
Gacias antonio, en realidad si lo habia bajado pero instala la version de 64, ya pude conectarme y  cargar una tabla, sigo cacharriando nuevamente gracias




El lunes, 7 de agosto de 2017, 12:54:29 (UTC-5), alvarocastellar escribió:

GETIANG

unread,
Aug 7, 2017, 5:44:43 PM8/7/17
to Comunidad de Visual Foxpro en Español
aprovechando que estamos en Mysql

Una instrucción o rutina que haga algo asi, como en dbf,
use Tablanueva.dbf -
append from tabla vieja

Garcias

Mario Dal Degan

unread,
Aug 9, 2017, 2:30:23 PM8/9/17
to Comunidad de Visual Foxpro en Español
Insert into TablaNueva Select * From TablaVieja

alvarocastellar

unread,
Aug 13, 2017, 12:52:09 PM8/13/17
to Comunidad de Visual Foxpro en Español
Que tal buenos dias a todos, tengo una nueva pregunta Antonio ya hice los cambios que me indicaste y  puedo traer los datos, hacer los insert y ejecutar consultas, mi pregunta es saber tu opinion acerca de usar procedimientos almacenados, usando foxydb puedo: Traer los datos a traves de una sentencia select, realizar Insert - Update en fin todo lo relacionado con el maneo de tablas, pero no se si esta trabaja desde la maquina de trabajo o desde el equipo servidor donde se encuenra la base de datos, por lo general lo que yo haria seria crear un procedimiento almacenado para que corra en el servidor y los datos lleguen mas rapido al equipo cliente. Que luces o ideas me pueden dar para trabajar y optimizar al maximo la carga y actualizacion de datos?.

alvarocastellar

unread,
Aug 13, 2017, 4:26:26 PM8/13/17
to Comunidad de Visual Foxpro en Español
Hola antonio nuevamente averiguando, esto actualizando un registro con UPdate sin embargo no me esta funcionando puedes ayudarme a detectar para ver que estoy haciendo mal?
odb.Query("Select * From Mae_mark", "_Mae_Mark")
odb.CursorEdit("_Mae_Mark")
UPDATE _Mae_Mark SET Nomb_Mark = 'Jeans Dama test' WHERE mark_Id = 79
odb.Update("_Mae_Mark")
Odb.Commit()
Odb.Close("_Mae_Mark")
odb.Query("Select * From Mae_mark", "_Mae_Mark")

Gracias por tu ayuda

Alvaro castellar

Antonio Meza

unread,
Aug 14, 2017, 11:56:02 AM8/14/17
to Comunidad de Visual Foxpro en Español
Si puedes usar procedimientos almacenados, para ello usas solo la función odb.Sql() y con eso lo mandas a llamar.

Puedes usar IF para saber donde esta el problema ejemplo

If odb.Update("_Mae_Mark")
   if odb.Commit()
         messagebox("Datos Guardados")
   else
         odb.Rollback()
         messagebox(odb.error_code,"Error en Commit") 
   endif
else
   odb.Rollback()
   messagebox(odb.error_code,"Error en Update")
endif

Es decir cada que ejecutas una función el valor de odb.error_Code cambia y en el mismo código de FoxyDb vas al procedimiento y ahí puedes ver que significa el numero según el procedimiento, en este caso ver el valor retornado por odb.Update().

saludos
Antonio Meza

Amarante Gilbert

unread,
Aug 14, 2017, 2:14:27 PM8/14/17
to publice...@googlegroups.com

Carlos Miguel FARIAS

unread,
Aug 14, 2017, 6:23:56 PM8/14/17
to Grupo Fox
No se lo puede expulsar de la lista?

alvarocastellar

unread,
Aug 14, 2017, 10:36:18 PM8/14/17
to Comunidad de Visual Foxpro en Español
Nuevamente agradecido con tu ayuda carlos, ya pude solucionarlo, el problema era el nombre de mi campo Autoincremental si no se le define en la propiedad
Id_Name  Foxydb asume que el campo se llama "ID"

alvarocastellar

unread,
Aug 14, 2017, 11:16:00 PM8/14/17
to Comunidad de Visual Foxpro en Español
Hola antonio una nueva cunsulta, no he encontrado ejemplos de como eliminar un registro, estoy usando la  funcion query, mas o menos asi:

cCmdExec = ' Delete  From '  + (cTabla) + ' Where ' + (cCamId) + " = " + Str(nRegId)
oDb.Query(cCmdExec)
If odb.Update()
        If odb.Commit()
            Messagebox('Registro eliminado exitosamente',32,Thisform.Caption)
        Else
            odb.Rollback()
            Messagebox(odb.error_code,32,"Error en Commit")
        Endif
 Else
        odb.Rollback()
        Messagebox(odb.error_code,32,"Error en Update")
  Endif

Sin embargo me da un error que dice que es una transaccion read only, adjunto una imagen para que puedas ver todo el mensaje.
Gracias por tu ayuda




El lunes, 14 de agosto de 2017, 10:56:02 (UTC-5), Antonio Meza escribió:
Imagen4.png

Antonio Meza

unread,
Aug 15, 2017, 10:54:06 AM8/15/17
to Comunidad de Visual Foxpro en Español
Si vas a usar odb.Query() debes obtener el registro en la consulta, luego hacer editable el cursor y ya posteriormente eliminar el registro y actualizar.

cCmdExec = ' Select * From '  + (cTabla) + ' Where ' + (cCamId) + " = " + Str(nRegId)
oDb.Query(cCmdExec)
oDb.CursorEdit(cTabla)
Select (cTabla)
cCmdVFP = ' Delete  From '  + (cTabla) + ' Where ' + (cCamId) + " = " + Str(nRegId)
&cCmdVFP
If odb.Update()
        If odb.Commit()
...
...

Si vas a usar comandos SQL nativos en el servidor entonces puedes usar oDb.Sql() directamente, pero por default FoxyDb usa transacciones de solo lectura para hacer mas rápidas las consultas, tienes que iniciar la transacción de escritura para enviar comandos SQL de Update o Delete.

oDb.Begin(3)
cCmdExec = ' Delete  From '  + (cTabla) + ' Where ' + (cCamId) + " = " + Str(nRegId)
if oDb.Sql(cCmdExec)
        If odb.Commit()
.....
.....

Jorge González

unread,
Aug 15, 2017, 6:07:36 PM8/15/17
to Comunidad de Visual Foxpro en Español
Hola chicos. He estado siguiendo este hilo desde que nació. No he podido participar por cuestiones de tiempo. Tengo un año trabajando con postgresql obedeciendo asesorías de que es el servidor que mejor se adecúa a los sistemas de gestión de datos que tengo diseñado.
Hay algo importante a tomar en cuenta al empezar en este tipo de programación multilenguaje si se le puede decir así. Y es aprender y aplicar el lenguaje del servidor de base de datos que en su mayoría es el lenguaje SQL, es decir, sencillo, lo que hay estar claro es en la estructura de cada quien. Lo menciono por el tema del pass Throug... con odbc. Lo que se hace es pasar la cadena de programación y eso esta al momento de querer obtener un cursor para rellenar uno creado en vfp. Pero hay necesidades dentro de las peticiones que aunque somos sabios para resolver en vfp lo mejor y conveniente es obtener los resultados desde el servidor programando Store Procedures o como en mi caso funciones en postgres. Sobre todo transacciones donde el guardar registros en una tabla afecta a otras, esos casos no es prudente dejarlos del lado del cliente. Para esto también es aconsejable de manera estricta trabajar en capas

Jorge González

unread,
Aug 15, 2017, 6:10:01 PM8/15/17
to Comunidad de Visual Foxpro en Español
Voy a pasar algunos ejemplos

Carlos Salcedo

unread,
Aug 15, 2017, 6:21:36 PM8/15/17
to Comunidad de Visual Foxpro en Español

Hola Jorge


Como manejas los Pack de Postgresql( es decir los bacumm) que se le deben hacer ?


Y como haces con los triggers ?


Saludos

Carlos




De: publice...@googlegroups.com <publice...@googlegroups.com> en nombre de Jorge González <jrockg...@gmail.com>
Enviado: martes, 15 de agosto de 2017 5:07 p. m.
Para: Comunidad de Visual Foxpro en Español
Asunto: [vfp] Re: Trabajar con Mysql y Vfp9
 

alvarocastellar

unread,
Aug 15, 2017, 6:24:42 PM8/15/17
to Comunidad de Visual Foxpro en Español
Hola jorge que tal, muy interesante tu punto de vista  quedamos atentos a tus ejemplos sobre todo para el manejo de capas

Un Abrazo

El martes, 15 de agosto de 2017, 17:10:01 (UTC-5), Jorge González escribió:
Voy a pasar algunos ejemplos

Ivan Martinez (imvh.g.c)

unread,
Aug 15, 2017, 10:14:34 PM8/15/17
to publice...@googlegroups.com

No, de pronto un dia al ver que nadie le pide prestamos empieza a regalarnos a todos su capital. Esperemos con paciencia.

Saludos

Ivan


Libre de virus. www.avg.com

Jorge González

unread,
Aug 16, 2017, 9:01:21 AM8/16/17
to Comunidad de Visual Foxpro en Español
Hola Alvaro.El siguiente ejemplo es muy sencillo. Se trata de obtener el nombre o razón social de un cliente según el código del mismo:

En la capa de negocio en VFP se encuentra la siguiente rutina:
PROCEDURE SolicitaNombreClienteSegunCodigo
   PARAMETERS cCodigoEnviado
   This.oDatos=This.RetornaNombreClienteSegunCodigo(cCodigoEnviado)
   RETURN This.oDatos
ENDPROC

PROCEDURE .RetornaNombreClienteSegunCodigo
   PARAMETERS cCodigoCliente
   RETURN This.oDb..RetornaNombreClienteSegunCodigo(cCodigoCliente)
ENDPROC

En la capa de datos está el siguiente código:

PROCEDURE RetornaNombreClienteSegunCodigo
   PARAMETERS cCodigo
   cNombreCliente=''
   TEXT TO linea_cmd NOSHOW PRETEXT 15
      SELECT retornanombrecliente(?cCodigo)
   ENDTEXT
  a1=comunica(linea_cmd,'qNombreCliente')
  cNombreCliente=qNombreCliente. retornanombrecliente
  USE IN SELECT('qNombreCliente')
  RETURN cNombreCliente
ENDPROC

Y en el Postgres tengo una función bajo el siguiente código PGSQL
CREATE OR REPLACE FUNCTION comp01.retornanombrecliente(
    IN ccodigo character,
    OUT cnombre character)
  RETURNS character AS
$BODY$
BEGIN
    SELECT into cnombre clientes.rsocial_cliente FROM clientes WHERE codigo_cliente=ccodigo;   
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION comp01.retornanombrecliente(character)
  OWNER TO postgres;

Entonces, desde cualquier parte del sistema en VFP, cuando necesites el nombre de un cliente simplemente haces el llamado:
thisform.txtText1.value=oApp.oClientes.SolicitaNombreClienteSegunCodigo(Thisform.txtObjetoCodigoCliente.Value)

Hay varios puntos que explicar partiendo desde como instanciar un objeto como el caso de oApp.oClientes
oApp es un objeto que tiene a su vez varios objetos hijos en este caso oClientes que esta instanciado a un prg donde se instancia la capa de negocios como por ejemplo: clientes_bus.prg y el prg de la capa de datos clientes_db.prg
Eso está muy, pero muy bien explicado en un material de apoyo de Fernando Bozzo. Allí se explica como programar en capas con VFP:

Pero lo que quiero acotar en este ejemplo es que hay que dejar de programar ciertas rutinas sobre todo las complejas en VFP y programarlas dentro del servidor de base de datos. En mi caso Postgresql. Todos manejan este tipo de procedimientos. Entonces desde VFP lo que haces son peticiones entre capas.

Mira el siguiente ejemplo:
Necesito saber cuantas sucursales tiene un cliente porque sino tiene ninguna tengo que crear aunque sea una sucursal única. Con VFP haría una petición de un query y luego veo cuantos registros tiene el cursor generado. Pero con un código simple en Postgres obtengo esa información:

Capa de datos VFP:
Parameters cCodigoCliente
TEXT TO linea_cmd NOSHOW PRETEXT 15
   SELECT dime_cuantas_sucursales(?cCodigoCliente);
ENDTEXT
a1=comunica(linea_cmd,'nResp','')
nSucursales=nResp.dime_cuantas_sucursales
IF nSucursales<1
   <codigo.....>
ELSE
   <codigo.....>
ENDIF

Funcion en Postgres:
CREATE OR REPLACE FUNCTION comp01.dime_cuantas_sucursales(
    IN ccodigo character,
    OUT numero_registros numeric)
  RETURNS numeric AS
$BODY$
BEGIN
    SELECT INTO numero_registros COUNT(*) FROM comp01.sucursales WHERE codigo_cliente=ccodigo;   
END;
$BODY$
  LANGUAGE plpgsql

Tengo muchos mas ejemplos ya que estoy desarrollando un sistema de gestión administrativa para el ramo de producción avícola con VFP + Postgresql en capas.
Espero haberte ayudado con esto.

Quiero hacer pruebas es con un aplicacion en VFP pero que se comunique a una IP remota donde se encuentre el servidor Postgres. He investigado y por medida de seguridad los proveedores de hosting no dan el IP, pero me han hablado de VPN o IP disfrazas.
Otra única forma es programando con lenguajes para browser; PHP, Python, JAVA, ASP junto con servidores de bases de datos: ORACLE, MySQL, Postgresql, mariadb, etc

Antonio Meza

unread,
Aug 16, 2017, 3:06:41 PM8/16/17
to Comunidad de Visual Foxpro en Español
El salto de DBF a un servidor de base de datos es muy fuerte, hay que acabar con muchos malos hábitos generados por las facilidades que nos da VFP.

Ahora saltar de DBF a Store Procedure es por no decirlo abismal, me refiero a la mayoría que viene de DBF y a penas sabe que es un servidor de base de datos.

Programar en Spagetti y pasar a Clases otro gran reto, y programar en Capas otro reto aun mas grande, no es fácil para los que vienen de DBF con VFP y se acostumbraron a usar el DataEnvieronment, incluso hay usuarios que no usas el contenedor DBC si no tablas libres y el cambio se vuele aun mas grande.

Puedo seguir con una lista interminable pero en conclusión cambiar la forma de programar de un día para otro no es fácil, a mi me costo mucho pero mucho terminar con las malas practicas, veía que todo se repetía, me parecía tonto pero hasta que entendí el porque de cambiar.

Les comento esto porque tienes razón hay que usar Store Procedures, Vistas y todo lo que se pueda hacer en el servidor sera mucho mejor que hacerlo en el cliente, pero llegar a eso viniendo del clásico manejo de DBF es un verdadero trastorno mental el aceptar el cambio, personalmente lo digo por experiencia propia.

El usar los Store Procedure también tienes su pro y contras, no todo se resuelve con eso, en lo personal empece por controlar el servidor de base de datos y aprender a usar Select, Update, Delete, Vistas, Manejo de Conexiones, Transacciones y otras tripas mas, pues si no sabes que significa eso menos vas a saber que es un Store Procedure, hay que ir conociendo y aprendiendo para ir mejorando, no dar el salto a la luna si ni siquiera conoces la tierra.

Por eso cree FoxyDb en primera instancia para mejorar mi desarrollo y al ver el beneficio que tenia lo compartí con la comunidad, me tomo mucho tiempo entender las buenas practicas para el manejo de un servidor de base de datos, desde como crear las tablas, los indices, que campos usar y porque, hasta el manejo de transacciones, leí mucho sobre Store Procedure y no los domino mucho pero se que existen y para que sirven y repito es lo mejor como dices pero con sus detalles.

FoxyDb es una capa de acceso a datos, que se puede usar con cualquier capa actual que se tenga ya que solo se encarga de enviar y recibir datos, por eso es una Capa de acceso a datos, no es una capa de Datos, si no de acceso a datos, una capa de datos se encarga de preparar las consultas que se van a enviar por la capa de acceso a los datos, pero aprender a programar en Capas es otro reto, es la mejor inversión que pueden hacer pues esto les servirá para cualquier lenguaje.

Tengo mis capas llamadas FoxyBi que es la capa de negocios, luego tengo FoxyData que es la capa de datos y luego viene FoxyDb que es la capa de acceso a datos, y FoxyFw (FrameWork, clases visuales) que es la capa de presentación o formularios que se conecta a FoxyBi y FoxyBi se conecta a FoxyData y FoxyData a FoxyDb todo separado aprovechando Clases no visuales, pero llegar a esto no es sencillo pero tampoco es imposible solo es cuestión de querer cambiar la forma desordenada que permite VFP y muchos otros lenguajes como Windev que actualmente estoy probando y que no es mas que un VFP moderno con esteroides , tienes lo mismo pero mas moderno y mejor en algunas cosas, pero igual usarlo con sus asistentes tienes código espagetti y malas practicas, pero usando sus Clases y programación Orientada a Objetos puedes tener tu desarrollo con buenas practicas. lo malo es que casi nadie lo usa con buenas practicas y no hay mucha información en español ni en ingles si no Frances jajajaja

Un ejemplo de código desordenado por no decir otra cosa jajaj, es poner el código dentro de un simple y común y corriente botón en el formulario, así sea una simple y tonta suma, no debe ir ahí, claro aparecerán cerca del 90% diciendo que no tiene nada de malo y que solo el 10% te dirá que no es correcto y si nos vamos a diferencia de porcentaje pareciera que la mayoría tiene la razón pero no es así para este caso y muchos otros que tienen que ver con buenas practicas donde la mayoría no las usa, pero el hecho que la mayoría no lo haga no quiere decir que sea bueno si no todo lo contrario, la minoría es la que programa como debe ser y la mayoría como no debe ser.

ya me extendí mucho jajaja

saludos
Antonio Meza

alvarocastellar

unread,
Aug 16, 2017, 3:31:56 PM8/16/17
to Comunidad de Visual Foxpro en Español
Buenas tardes amigos, antes agradezco a todos por el interes mostrado en el tema, veo que hemos llegado a un punto clave. La programacion en capas, los que venimos de Vfp como bien dice antonio nos da durisimo el cambio de base de datos y aplicar el concepto de manejo de capas sobre todo cuando es de 3,  ya que muchas veces no comprendemos o no sabemos que codigo colocar en cada capao, nos parece que va bien en X o Y capa. Yo particularmente trabaje para un proyecto hecho a tres capaz pero en otro lenguaje (Vb.Net), es cierto que lo ideal es que cuando se hable de traer datos del servidor se haga a  traves de un procedimiento almacenado para aprovechar los recuersos del servidos. Sin embargo y soy sincero aun no se como implementar ese conocimiento aca no se si es porque uso vfp desde que era 2.6 o simple bloqueo mental al cambio(Adoro Vfp!!). De momento estoy haciendo que la aplicacion camine, se sostenga y por lo menos sea estable, creo que esa seria la primera parte, la segunda parte y seria una mejora a la aplicacion consistiria en ir cambiando la aplicacion a tres capas.
No se si les parezca bien la idea de conseguir ejemplos basicos sobre programacion a tres capas aplicadas a VFP, creo que seria de mucha ayuda para todos nosotros.

Víctor Hugo Espínola Domínguez

unread,
Aug 18, 2017, 4:26:26 PM8/18/17
to publice...@googlegroups.com

Saludos,
Víctor.
Lambaré - Paraguay.

Gustavo Colmenares

unread,
Sep 20, 2017, 1:10:32 AM9/20/17
to Comunidad de Visual Foxpro en Español
Saludos 

Tengo año y medio usando FOXYDB version 2,5 con el Servidor MySQL y alrededor de 50 usuarios repartidos en 10 sucursales y de verdad que me ha sido demasiado útil... Me resolvió todos los problemas de INSERT, UPDATE, DELETE, etc con el servidor.
De verdad que lo recomiendo


El viernes, 4 de agosto de 2017, 14:05:28 (UTC-5), alvarocastellar escribió:

Gustavo Colmenares

unread,
Sep 20, 2017, 1:14:32 AM9/20/17
to Comunidad de Visual Foxpro en Español

Saludos amigo Antonio Meza 

Gracias por tu ayuda... Ahora estoy en un Nuevo Proyecto y utilizo FoxyDB

Ya domino y entiendo más el FoxyDB y hago ya cosas muchos más complejas

Estamos en contacto

Antonio Meza

unread,
Sep 20, 2017, 10:13:51 AM9/20/17
to Comunidad de Visual Foxpro en Español
Excelente!!!

Me da mucho gusto que te sea de utilidad la librería cualquier duda o detalle lo comentamos!!

saludos
Antonio Meza

Gustavo Colmenares

unread,
Sep 20, 2017, 8:05:50 PM9/20/17
to Comunidad de Visual Foxpro en Español
Saludos Antonio...

Para utilizar MariaDB que cambios necesito hacer en los parámetros???

Estoy arrancando un Proyecto Nuevo y a lo major utilize MariaDB

Gracias de antemano

Antonio Meza

unread,
Sep 20, 2017, 10:29:07 PM9/20/17
to Comunidad de Visual Foxpro en Español
absolutamente ninguno!!! bueno al menos yo no he hecho cambios, incluso me conecto a una db de hosting que tiene mysql para enviar datos para consultas de la base de datos local con MariaDb.

saludos
Antonio Meza

Gustavo Colmenares

unread,
Sep 20, 2017, 11:13:37 PM9/20/17
to Comunidad de Visual Foxpro en Español
OK... Lo que hago es indicar en los parámetros que voy a usar MariaDB y lo demás se mantiene igual
Reply all
Reply to author
Forward
0 new messages