Como todavía estoy trabajando con la versión 20, pongo aquí el link de las novedades en Español: https://www.pcsoft-windev-webdev.com/WX20-Features_ES.pdf
Mes: noviembre 2016
Extensiones de la Base de Datos
Cuando estás en desarrollo, en el Analisis sueles tener tablas como:
– product
– customer
– order
etc…
Pero el cliente cuando ha instalado la base de datos le ha puesto una extensión por ejemplo: ph_
Y así el cliente tiene las tablas como:
– ph_product
– ph_customer
– ph_order
Tu aplicación dará error, cuando la corra el cliente salvo que al principio del proyecto hagas.
DB_ext is string = "ph_" HChangeName(product, DB_ext + "product") HChangeName(customer, DB_ext + "customer") HChangeName(order, DB_ext + "order")
Escribir una etiqueta por código
iDestination(iPrinter,"Imprimiendo Documento de venta") iCreateFont(1, 9, iNormal, "Times New Roman", iBlack, 0) iPrint(iFont(1)+iXPos(0,False)+ "Vendedor: " ) iPrint(iFont(1)+iXPos(0,False)+"Fecha: "+ " Hora: "+TimeSys() ) iPrint(iFont(1)+iXPos(0,False)+"Cliente: " ) iPrint(iFont(1)+iXPos(0,False)+"NIF: " ) iPrint(iFont(1)+iXPos(0,False)+"Direccion: ") iPrint() iEndPrinting()
Tablas con espacios en MySQL
Si haces una consulta a una tabla con espacios en vez de:
Select * from `mi tabla`
es
Select * from [mi tabla]
Esto me parece que lo han cambiado en la version 22 y ya se puede poner con comillas
Librerias de MySQL
Las librerias del MySql las puedes poner en el proyecto (las correspondientes de 32 y 64 según el tipo de aplicación).
pero, hay un sitio mejor que sirve para todas las aplicaciones que hagas:
C:\WinDev 20\Programs\Framework\Win32x86 (para las de 32)
C:\WinDev 20\Programs\Framework\Win64x86 (para las de 64)
Ahí las tendrás siempre disponibles para todos los proyectos.
Al entregar el ejecutable al cliente tienes que adjuntarle las librerías correspondientes.
Otra forma de crear un cursor
En el ejemplo anterior se creaba un cursor partiendo de una tabla existente.
En este caso se crea totalmente desde 0 el cursor:
CRES is Data Source AFile is File Description AnItem is Item Description // Nombre y descripcion del cursor AFile..Name = "CRES" AFile..Type = hFileNormal AFile..FicCryptMethod = hCryptStandard // Campo tipo texto AnItem..Name = "TITULO" AnItem..Type = hItemText AnItem..Size = 40 HDescribeItem(AFile, AnItem) // Campo numerico AnItem..Name = "IMPORTEd" AnItem..Type = wlNumeric AnItem..Size = 10 HDescribeItem(AFile, AnItem) // Validates the description of the data file HDescribeFile(AFile) // Nos situamos en un directorio de temporales para crear el cursor fisico HChangeDir(CRES, "C:\TEMP\") // Se crea el fichero. Lo crea con ese nombre y la extension *.FIC HCreation( CRES ) // vinculamos temporalmente el cursor al analisis HDeclareExternal("C:\temp\CRES.fic", "cCursor")
Crear un cursor
lqQry is Data Source lcSQL is string // Preparamos cursor lcSQL = "Select * from tabla1 where 1 = 0" HExecuteSQLQuery(lqQry, lcSQL) // borramos ficheros anteriores fDelete("C:\temp\tmp.fic") fDelete("C:\temp\tmp.ndx") // guardamos el resultado en un fichero IF HToFile(lqQry, "C:\temp\tmp.fic") = True THEN Trace("si") END // vinculamos temporalmente el cursor al analisis HDeclareExternal("C:\temp\tmp.fic", "cCursor") // A continuacion se puede hacer una relacion con el cursor lcSQL = "Select * from tabla2 left join tabla2.campo1 = cCursor.Capo1" HExecuteSQLQuery(lqQry, lcSQL)
Conexión a MySQL
Como sabes hay 2 formas de conectarse.
Con
– HDescribeConnection (la base de datos debe estar en el análisis)
– SQLConnect (no hace falta que la base de datos esté en el análisis)
Si te conectas al Mysql con SQLConnect pero la base de datos está en otro puerto tienes que ponerle el parametro del final acabado en ;
nHandle is int
nHandle = SQLConnect(DBHostName, DB_USERNAME, lcPassword, db_database,»MySQL»,»»,»Server Port=3307;»)
IF nHandle < 0 THEN Info("Imposible conectarse") RETURN END
Invocar Objetos COM
WHEN EXCEPTION IN oCom is object OLE dynamic oCom = GetActiveObject(“SYStree.fls_sysfunc”) IF oCom=Null THEN Error("No se ha podido instanciar el objeto SYStree.fls_sysfunc") EndProgram() END DO Info(oCom>>cPathDAtos + " " + oCom>>cPathRaiz) oCom = Null END
Creación de controles en tiempo de ejecución
Tasa is Control y is int = 567 WHILE NOT HOut //Crear el control Tasa <- ControlCreate(dsTasas.name, typNum, 66, y, 200, 25) //Darle Valor Tasa = (EDT_SubTotal * dsTasas.rate)/100 //Maquetacion del control Tasa..Caption = dsTasas.name Tasa..Style = EDT_ID..Style Tasa..CaptionWidth = 150 Tasa..HorizontalAlignment = haRight Tasa..InputMask = "9.999,99" Tasa..State = DisplayOnly //Ubicacion del siguiente control y+=30 HReadNext(dsTasas) END