C# y VFP

Como todos sabemos VFP tiene ciertas limitaciones porque ya no se actualiza como otros lenguajes, pero eso no quiere decir que no se puede extender.

Actualmente me veo en la necesidad de enviar correos electrónicos desde cuentas de Outlook.com y Office365, como muchos sabemos la librería CDOSYS.DLL tiene la limitación de no poder usar seguridad TLS requerida por algunos servidores como en el caso de Outlook.com que si se pueden enviar correos por SMTP pero solo por el puerto 25, sin embargo la mayoría de los proveedores de servicios de Internet tienen bloqueado dicho puerto para evitar el SPAM y no es posible enviar por el puerto 587 por la seguridad antes mencionada.

En el caso de GMAIL muy pronto ya no va a permitir el envió de correos con la seguridad que aun se puede configurar por CDOSYS, lo que es preocupante para los que aun dependemos de esta Dll.

En Internet existen muchas librerías para solucionar este problema pero son muy costosas, por lo que decidí realizar una usando C#.

No soy experto en C#, pero como he tomado cursor del lenguaje de Google DART, y la sintaxis es casi la misma entre ambos lenguajes, pues me ha sido algo fácil programa en C#.

Para no hacer muy largo el cuento he actualizado mi Blog para compartir una librería a la que he nombrado CsFoxySmtp.dll y espero les pueda servir así como me ayuden a mejorarla.

Ya esta documentada en C# y VFP.

saludos
Antonio Meza

Administrar Archivos en MariaDb / Mysql usando FoxyDb 3.0

Les comparto un pequeño formulario de ejemplo de como subir, bajar y mostrar Archivos de todo tipo a una base de datos MariaDb o Mysql, para FireBird es el mismo proceso solo que no tengo instalado Firebird de momento y no puedo realizar la prueba.

Utilizo una librería adicional base64Helper del Maestro Víctor Espina la cual permite codificar un archivo en Base64 lo que evitara cualquier problema de poder bajar el archivo de la base de datos y que este se muestre correctamente, la misma librería permite decodificar nuevamente el archivo.

Aunque la librería ya va incluida en el ejemplo les paso el link del Autor ya que cada linea de código merece su reconocimiento.

http://www.victorespina.com.ve/wiki/index.php?title=Parser_Base64_para_VFP_usando_CryptoAPI

El ejemplo es un archivo comprimido con http://www.7-zip.org el cual contiene tanto FoxyDb 3.0, la librería base64Helper y un pequeño formulario, así como el código SQL para generar la tabla llamada «digital»

Les recomiendo abrir el formulario foxydb_administrar_archivos_mariadb.scx desde la carpeta donde lo descarguen o copien  para evitar errores de rutas, editar el método INIT del formulario para que configuren la conexión al servidor y va un archivo tabla_digital.sql el cual contiene la tabla llamada Digital que usa el ejemplo.

Cualquier mejora o duda lo comentamos.

Descargar Ejemplo

saludos
Antonio Meza

Ejemplo de Formulario ABM usando FoxyDb 3.0 para Mysql

Anexo link de ejemplo sencillo de como usar FoxyDb 3.0 con una tabla Clientes y el uso de Correlativos, para Mysql o MariaDb, es decir el clásico Altas, Bajas, Consultas y Modificaciones de un catalogo.

También el uso de algunas propiedades.

Anexo archivo foxydb3.sql con la estructura de la base de datos para el ejemplo, crea una base de datos llamada FoxyDb y 2 tablas.

También pueden cambiar el motor a Firebird y crear las tablas de forma manual para que hagan las pruebas.

Descargar Proyecto de Prueba de FoxyDb 3.0

Cualquier duda la pueden comentar en el Grupo de la comunidad de VFP o aquí.

https://groups.google.com/forum/?hl=es#!forum/publicesvfoxpro

saludos
Antonio Meza

Liberado FoxyDb 3.01 estable (SqlServer Beta y PostGreSql Beta)

*!* Ver 3.01 Rev. 02/02/2020 Estable
*** Se actualiza la función .Refresh() a la versión 3.0 que me faltaba.
*** Se corrige un error en la función .Code() que me falto quitar unas lineas y provocaba error en una variable local que elimine.
———————————————————————————

Para Descargar FoxyDb 3.01 vayan al menú Descargar.

Cualquier duda o comentario lo pueden comentar en el Grupo de la Comunidad de VFP en Español o aquí en el blog.

https://groups.google.com/forum/?hl=es#!forum/publicesvfoxpro

saludos
Antonio Meza

Liberado FoxyDb 2.61 estable (SqlServer Beta)

Nueva Versión de FoxyDb 2.61 (SqlServer Beta)

IMPORTANTE!!!

FoxyDb 2.61 es compatible con la versión 2.60 y 2.50

Gracias al compañero William López se integra SQLSERVER que debe ser tomado como BETA ya que se requiere hacer pruebas de la nueva versión 2.6 y los cambios que hizo William López y desde luego el apoyo de los que usan SQLSERVER hagan pruebas y reporten bug o mejoras.

*!* Ver 2.61 Rev. 30/01/2019 Estable
*** Se integra SQLSERVER (BETA) por William López (gracias por contribuir)
*** en espera de revisión y pruebas por parte de William López
*** NOTA: Las siguientes propiedades no se deben modificar dentro de la librería
*** si no desde el archivo FoxyDb.prg o ya dentro del desarrollo.
*** debug = .t. && Depurar mostrando paso a paso lo que hace la librería
*** engine = this.sqlServer && Motor de Base de Datos por defecto
*** id_Active = true && Si se solicita recuperar el Ultimo ID Insertado
***
*** Los valores por defecto son
*** debug = false && Depurar mostrando paso a paso lo que hace la librería
*** engine = this.mySql && Motor de Base de Datos por defecto
*** id_Active = false && Si se solicita recuperar el Ultimo ID Insertado
———————————————————————————

Para Descargar FoxyDb 2.61 y ver los detalles de la actualización, vayan al menú Descargar.

Cualquier duda o comentario lo pueden comentar en el Grupo de la Comunidad de VFP en Español o aquí en el blog.

https://groups.google.com/forum/?hl=es#!forum/publicesvfoxpro

saludos
Antonio Meza

Liberado FoxyDb 2.6 estable

Nueva Versión de FoxyDb 2.6

IMPORTANTE!!!

FoxyDb 2.6 es compatible con la versión 2.5

La diferencia notable entre versiones es que renombre la librería con el nombre que uso en mis desarrollo para facilitar las actualizaciones.

  • foxydb.prg
  • foxydb_class.prg

Por lo que tienen que modificar su archivo FOXYDB.PRG la siguiente linea

DEFINE CLASS FoxyDb As foxyDb_library OF «foxydb_library2.5.prg»

por la siguiente

DEFINE CLASS FoxyDb As foxyDb_class OF «foxydb_class.prg»

Les recuerdo que la idea de usar FOXYDB.PRG es para que ustedes ahí realicen sus adaptaciones o configuraciones y en un cambio de versión no tengan que reemplazar este archivo, ya que este no tiene cambios, es decir, realmente es una subclase.

De igual forma si quieren conservar los números de versiones solo es cuestión de renombrar foxyDb_class.prg por foxydb_library2.6.prg y dentro del archivo foxydb.prg la siguiente linea

DEFINE CLASS FoxyDb As foxyDb_library OF «foxydb_library2.6.prg»

Y dentro del archivo foxydb_class.prg que ahora re nombraron por foxydb_library2.6.prg la siguiente linea

DEFINE CLASS foxydb_class AS custom

por la siguiente

DEFINE CLASS foxyDb_library AS custom

 

Del cambio de versión 2.5 a la 2.6 hay varios cambios entre versiones que no había publicado, les paso el Historial para que lo tomen en cuenta porque es importante.

*!* Ver 2.51 Rev. 03/05/2017 Estable
*** Se agrego una propiedad de conexión CURSORSETPROP(«MapBinary»,.t.,0)
*** Convierte campos mayores de 254 caracteres (blob) a Campo Memo

*!* Ver 2.52 Rev. 10/11/2017 Estable
*** Bug al usar servidores Linux
*** se ajustó la función DBCURSOR para que respete los nombres de las tablas (mayúsculas y minúsculas)
*** tal como se escriben dentro de las funciones SQL, Query, etc.

*!* Ver 2.53 Rev. 25/01/2018 Estable
*** Se agrega nuevo parámetro __tableName as Character a la función QUERY()
*** para poder indicar de forma opcional el nombre real de la tabla en la base de datos porque
*** en ocasiones el SELECT es muy complejo y es difícil de obtener el nombre de la tabla.

*!* Ver 2.60 Rev. 05/10/2018 Estable
*** Se puede Obtener el LOG por tabla que es abierta usando QUERY()
*** para conocer los cambios realizados al ejecutar UPDATE() y dicha información se puede consultar
*** desde el cursor llamado DBCURSOR que automáticamente crea y administra FoxyDb
*** Se agrega nueva propiedad sql_log = .f. para activar o desactivar LOG
*** Se Agrego una nueva función llamada LOG, para obtener los detalles de la tabla actualizada
*** Se modifico la función Update y Commnad.
*** Se modifico la estructura del cursor DBCURSOR para los nuevos datos del registro LOG e ID
*** La nueva estructura de DBCURSOR es la siguiente
*** tabla C(100) – Nombre real de la Tabla contenida en la base de datos (incluye nombre de la base de datos)
*** cursor C(100) – Nombre del cursor local
*** sql Memo – Instrucción SQL que se usó para obtener el cursor
*** log Memo – Registro de Cambios enviados al servidor
*** id n(11) – Ultimo ID insertado, en caso de solicitar obtenerlo en UPDATE()
*** ———————————–
*** Tipos de comando SQL que registra el LOG
*** 1 – Update, 2 – Delete y 3 – Insert
*** ———————————————-
*** Ejemplo de datos devueltos por Tipo 1 – Update
*** |TIPO|ID|CAMPO|Nuevo Valor|Valor anterior
*** ejemplo de Update
*** |1|6600|Nombre|Paco|Carmelo
*** |1|6600|Fecha|01/10/2018|01/01/2017
*** ———————————————-
*** Ejemplo de datos devueltos por Tipo 2 – Delete
*** |TIPO|ID|CAMPO|Nuevo Valor|Valor anterior
*** ejemplo de Delete
*** |2|6600|Nombre|Paco|Paco
*** |2|6600|Fecha|01/10/2018|01/10/2018
*** ———————————————-
*** Ejemplo de datos devueltos por Tipo 3 – Insert
*** |TIPO|ID|CAMPO|Nuevo Valor
*** ejemplo de Insert
*** |3|6600|Nombre|Carmelo
*** |3|6600|Fecha|01/01/2017
*** ———————————————-
*** NOTAS: Dentro del campo LOG los registros esta separado por un salto de línea con CHR(10)
*** y los valores separados por el carácter PIPE «|».
*** El nombre de la tabla y cursor así como el ID de un registro nuevo
*** se obtienen del cursor DBCURSOR.
*!* ————————————————————————————

Para Descargar FoxyDb 2.6 y ver los detalles de la actualización, vayan al menú Descargar.

Cualquier duda o comentario lo pueden comentar en el Grupo de la Comunidad de VFP en Español o aquí en el blog.

https://groups.google.com/forum/?hl=es#!forum/publicesvfoxpro

saludos
Antonio Meza

Actualización FoxyTb 0.83 beta

Esta versión contiene correcciones y mejoras

  • Versión 0.83 beta 20/07/2016
    •  Correcciones:
      •  Error reportado Douglas Sánchez
      • Al cambiar el tamaño de fuente del título no respondía a veces
      • se ajustó para que se muestre correctamente.
    • Mejoras:
      • A petición de Douglas Sánchez ahora se puede agregar una imagen
      • en la barra de título para no usar color, solo es necesario indicar
      • en la propiedad FoxyTb.PICTURE = «ruta:\NombreArchivo.Extensión»
      • al agregar la imagen se ajusta la barra a tamaño simple no funcuiona la barra a tamaño normal (doble)

Descargar FoxyTb 0.83 beta

saludos
Antonio Meza

Actualización de FoxyTb 0.8 y FoxyRb 0.9

Para comentarles que he realizado una actualización tanto a FoxyTb como a FoxyRb, algunas correcciones en ambos y ahora ya se pueden usar juntos.

De igual forma se pueden usar separados sin problema, de hecho va un nuevo proyecto que incluye 3 formularios una para FoxyRb, otro para FoxyTb y un tercero de como unir ambas clases.

Se puede unir FoxyRb con FoxyTb pero no al revés, es decir si cambian alguna propiedad de FoxyTb y el mismo formulario tienen agregado FoxyRb no se verán los cambios reflejados en FoxyRb.

Pero si unen FoxyRb con FoxyTb, y cambian por ejemplo alguna propiedad de FoxyRb se cambiara la respectiva en FoxyTb, por ejemplo el color de la barra de foxyRb si lo cambian se cambia el color de la barra de titulo de FoxyTb, como si fueran una sola clase.

Para lograr unirlas agregue un parámetro para que al crear el Objeto de FoxyRb se le indique con que nombre se creo previamente el objeto FoxyRb, ejemplo del Load de un formulario

  • Cargar FoxyRb (FoxyRibbonBar)
    SET PROCEDURE TO foxyrb_class.prg ADDITIVE
  • Cargar FoxyTb (FoxyTitleBar)
    SET PROCEDURE TO foxytb_class.prg ADDITIVE
  • Crear objeto FoxyTb
    this.AddObject(«foxytb«, «foxytb», «FoxyTb 0.80 y FoxyRb 0.90»)
  • Crear objeto FoxyRb e indicar que se usara junto a FoxyTb
    this.AddObject(«foxyrb»,»foxyrb», «FoxyTb«)

Con ese sencillo cambio al modificar una propiedad de FoxyRb se reflejara en FoxyTb siempre y cuando tengan equivalencia.

Es importante que lo agreguen al momento de crear el objeto FoxyRb como el ejemplo del código de arriba solo si van a unir ambas clases, si no les marcara errores.

Algunas capturas de pantallas de como se ven unidos.

foxyTb_foxyRb01

En la siguiente pantalla oculte las pestañas de FoxyRb y cambie el color

foxyTb_foxyRb-02

Como pueden observar este formulario contiene las propiedades de FoxyRb y FoxyTb, y al cambiar los colores de estilo de FoxyRb se cambian los de FoxyTb sin tener que indicar por separado.

Espero y les gusten los cambios y ambas librerías les sean de utilidad.

Descargar
FoxyTb_FoxyRb

Saludos
Antonio Meza

FoxyTB – Barra de Titulo para VFP

Que es FoxyTB

Es una librería prg Open Source desarrollada 100% en VFP 9.0 Sp2, para crear una Barra de Titulo parecido al estilo de MS-Office 2016 en tus formularios o _screen de VFP.

Es decir para sustituir la barra de titulo nativa de VFP.

¿Que hace FoxyTB?

A diferencia de muchas otras librerías FoxyTB solo requiere de un solo archivo FoxyTB_class.prg, y el tipo de letra WebDings para mostrar las imágenes de los botones, si no se cuenta con este tipo de letra se mostrara caracteres en vez imágenes.

Es totalmente personalizable, colores, fuentes, tamaños, etc.

Si el formulario es de Nivel superior (ShowWindow = 2) se comporta como una ventana normal de windows, se puede Maximizar a pantalla completa o pantalla normal mostrando la barra de windows, si se arrastra hacia arriba se maximiza si esta maximizada y se arrastra hacia abajo se restaura como lo hacen las ventanas en windows 10.

En la descarga va un formulario de ejemplo con la mayoría del las propiedades y funciones explicadas para su uso.

Como se Usa?

Para agregarlo en un formulario solo es necesario cargar la librería y agregar el Objeto, ejemplo:

  • Load del Formulario
    SET PROCEDURE TO foxyTB_class.prg ADDITIVE
    this.AddObject(“foxyTb”,”foxyTb”, «Titulo de la Ventana»)

Mostrara una ventana como la siguiente imagen

foxytb01

Jugando con sus propiedades se puede personalizar

foxytb02

Agregando Botón de Pantalla Completa y Ayuda

foxytb03

Espero y les sea de utilidad ya que estoy cambiando el diseño de mis programas por lo que estaré trabajando en la librería añadiendo mas cosas.

Nota: Estoy modificando FoxyRb para que sea compatible con FoxyTb.

Descargar FoxyTb
https://1drv.ms/u/s!ArbS7ICS2KHBz1OyfKkavy3sg74e

saludos
Antonio Meza