miércoles, agosto 28, 2024

Conectar aplicaciones WinDev a MySQL 8.4.0 o superior

Para conectar aplicaciones desarrolladas en WinDev a MySQL 8.4.0 o versiones superiores, es fundamental seguir algunos pasos clave debido a los requisitos de compatibilidad con la arquitectura de 64 bits. A continuación, se describen los pasos necesarios para garantizar una conexión exitosa.

Generación de la aplicación a 64 bits

MySQL 8.4.0 o superior solo funciona en entornos de 64 bits. Por lo tanto, asegúrate de que la aplicación se genere en ese formato.

Uso de las librerías necesarias

Debes utilizar la librería libmysql.dll, que se encuentra en la instalación de MySQL. Puedes encontrarla en la siguiente ruta:

C:\Program Files\MySQL\MySQL Server 8.4\lib

Además, es necesario contar con las librerías libcrypto-3-x64.dll y libssl-3-x64.dll, que puedes obtener de la siguiente ubicación:

C:\Program Files\MySQL\MySQL Server 8.4\bin

Coloca las tres DLLs (libmysql.dll, libcrypto-3-x64.dll, y libssl-3-x64.dll) junto al archivo ejecutable (EXE) generado de tu aplicación WinDev.

Consideraciones adicionales

Estas DLLs fueron compiladas utilizando Visual C++, por lo que es posible que debas instalar el runtime correspondiente. Puedes descargarlo desde el siguiente enlace:

Descargar Visual C++ Redistributable

Verificación de dependencias

Si es necesario investigar las dependencias adicionales que puedan requerir las librerías, puedes utilizar la herramienta Dependency Walker, disponible en el siguiente enlace:

Dependency Walker

Siguiendo estos pasos, podrás asegurar que tus aplicaciones desarrolladas en WinDev se conecten correctamente a bases de datos MySQL 8.4.0 o superiores.


lunes, agosto 12, 2024

Conocer versión de MySQL con una query

 Para obtener la versión del MySQL o MariaDB al que estamos conectados, solo ejecuta esta query:


SELECT @@version_comment,version();




jueves, septiembre 15, 2022

Función para hacer ping en foxpro

 FUNCTION Ping(tcIp)
IF EMPTY(tcIp)
RETURN .F.
ENDIF 
loShell = CreateObject("WScript.Shell")
IF VARTYPE(loShell)<>'O'
RETURN .F.
ENDIF 
loScriptExec = loShell.Exec("ping -n 1 -w 2 -4 "+tcIp)
lcResp = loScriptExec.StdOut.ReadAll()
llRet = [TTL=]$lcResp
loScriptExec = null
loShell = null 
RETURN llRet
ENDFUNC 


Ejemplo de uso:

ip = "172.16.10.210"
? IP + " - " + TRANSFORM(ping(ip))

miércoles, diciembre 18, 2019

Clase Windev para Sellar, Timbrar y Cancelar CFDI


A considerar:

  • Te igualo el costo de timbre que vienen manejando.
  • Los timbres con nosotros NO caducan.
  • Las cancelaciones NO cuestan timbre, siempre y cuando el CFDI que quieras cancelar los timbraste con nosotros, si lo timbraste con otro proveedor, te cuesta 1 timbre.
  • No hay minino de compra, se les da acceso a mi.disxii.com para la administración de sus emisores; puedes ver parte del funcionamiento del panel en: https://www.youtube.com/watch?v=ydAZUguqqGU


Código para sellar:
sXML is ANSI string = "C:\Ruta\archivo.xml"
sCer is ANSI string = "C:\Ruta\CSD_Sucursal_1_EKU9003173C9_20230517_223850.cer"
sKey is ANSI string = "C:\Ruta\CSD_Sucursal_1_EKU9003173C9_20230517_223850.key"
sPassKey is ANSI string = "12345678a"
oTimbrar.Sellar(sXML, sCer, sKey, sPassKey)
IF oTimbrar.nEstatus <> 0 THEN
    Error(oTimbrar.sError)
ELSE
    Info("Sellado")
END



Código para Timbrar:
oTimbrar.Timbrar(sXML)
IF oTimbrar.nEstatus <> 0 THEN
    Error(oTimbrar.sError)
ELSE
    Info("Timbrado", oTimbrar.oTimbre.nStatus, oTimbrar.oTimbre.nStatusPAC,oTimbrar.oTimbre.sMensaje,oTimbrar.oTimbre.sUUID)
END
Código para cancelar:

sAcuse is ANSI string = "C:\Ruta\acuseCancelacion.xml"
sMotivoCancelacion is ANSI string = "02"
sFolioSustitucion is ANSI string = ""
oTimbrar.Cancelar(sXML , sCer, sKey, sPassKey ,sAcuse,sMotivoCancelacion,sFolioSustitucion)
IF oTimbrar.nEstatus <> 0 THEN
    Error(oTimbrar.sError)
ELSE
     Info("Cancelado",oTimbrar.oTimbre.nStatus,oTimbrar.oTimbre.sMensaje)
END


La clase la pueden descarar desde: https://www.dis12.com/Clases/WinDev/

Nota. Es necesaria la carpeta SSL a un lado del exe.

La clase es 100% funcional para testing (adelante con tus pruebas), para productivo hay que dar de alta al emisor en el panel para obtener el usr/pass de timbrado de cada emisor.

lunes, septiembre 02, 2019

Mientras tú creías que yo no estaba mirando

Mientras tú creías que yo no estaba mirando, yo vi que:

Pegaste con un imán mi dibujo al refrigerador, por eso de inmediato quise hacer otro.

Le diste de comer a un gatito sin hogar, entonces entendí que a los animales hay que tratarlos con amor y respeto.

Preparaste mi pastel favorito especialmente para mi, así me dí cuenta que los pequeños detalles ocultan mucho sentido.

Fuiste a visitar a tu amigo enfermo, y entonces entendí que las personas deben cuidarse mutuamente.

No niegas la ayuda a los necesitados, y comprendí que si tienes tiempo y dinero, hay que ayudar a aquellos que no lo tienen.

Tratas con mucho cuidado nuestra casa y a todos los que vivimos aquí, y entendí que cada persona debe cuidar lo que tiene y lo que quiere.

Incluso cuando te sientes mal, continúas cumpliendo con tus obligaciones, y me di cuenta de lo que significa la responsabilidad.

A veces no pudiste contener las lágrimas, y entendí que en la vida hay tristeza y dolor, y llorar es normal.
Nunca dejas de cuidar de mí, y yo quise cumplir todas tus expectativas y hacer todo lo posible para que te sientas orgulloso de mí.

Mientras tú creías que yo no estaba mirando, aprendía de ti la vida. Tomé tu ejemplo y traté de ser como tú.

En lo más profundo de mi alma estaba un pequeño adulto que se decía a sí mismo:

Queridos padres gracias por todo lo que he visto mientras creían que yo no estaba mirando.

Autor Desconocido

martes, junio 13, 2017

Validar RFC en Windev

PROCEDURE ValidaRFC(tcRfc is ANSI string):boolean
IF MatchRegularExpression(tcRfc, "[A-ZÑ&]{3,4}[0-9]{2}[0-1][0-9][0-3][0-9][A-Z,0-9][A-Z,0-9][0-9A]") = True THEN
RESULT DateValid(StringToDate(Middle(tcRfc,Length(tcRfc)-8,6),"YYMMDD"))
END
RESULT False