Usar tablas estilo xBase

En los viejos lenguajes xBase las tablas tenias que abrirlas y seleccionarlas para usarlas. Cada tabla estaba en un area de trabajo distinta

WinDev tiene una forma parecida de trabajar con esas viejas tablas xBase pero las pone todas en un unico area de trabajo sin tener que seleccionar ninguna. Y además luego puedes hacer una SELECT de cualquiera de las tablas. Mira este código:

// Abrimos las tablas
rutaBBDD is string
rutaBBDD = "C:\MisDATOS\"

HMode("*", hModeMono)
HDBOpenNoLock("Clientes", "Clientes", rutaBBDD+"Clientes.dbf")
HDBOpenNoLock("Pedidos", "Pedidos", rutaBBDD+"Pedidos.dbf")
HDBOpenNoLock("Articulos", "Articulos", rutaBBDD+"Articulos.dbf")

sql is string = [
	SELECT COUNT(Pedidos.t37cantida) AS cantidad FROM Pedidos
	WHERE MONTH(Pedidos.t37fecha) = 
] + mes 

IF HExecuteSQLQuery(pedidosMes, sql) THEN
     .....
END

Variable tipo Variant

En WinDev las variables es necesario definir de qué tipo son y el tipo de dato que reciben sigue ese formato

lcCadena is string
….

Pero la variable tipo Variant admite cualquier tipo de dato. Por ejemplo una variable Variant con sub-elementos:

Person is Variant
Person.LastName = «MOORE»
Person.FirstName = «Vince»
Person.Edad = 32
Person.FNacimiento = StringToDate(«12-01-1965», «DD-MM-YYYY»)

ó con un Array de sub-elementos

Personas is Variant
Personas[1].LastName = «MOORE»
Personas[1].FirstName = «Vince»
Personas[1].Edad = 32
Personas[1].FNacimiento = StringToDate(«12-01-1965», «DD-MM-YYYY»)
Personas[2].LastName = «MOORE2»
Personas[2].FirstName = «Vince2»
Personas[2].Edad = 33
Personas[2].FNacimiento = StringToDate(«13-01-1965», «DD-MM-YYYY»)

Luego, para recorrer el arrah, hacemos:

FOR EACH vPersona OF Personas
Info(StringBuild([
Nombre: %1
Apellidos: %2
Edad: %3
F.Nacimiento: %4
], vPersona.LastName, vPersona.FirstName, vPersona.Edad, DateToString(vPersona.FNacimiento,»DD-MM-YYYY»)))
END

Más info en https://doc.pcsoft.fr/en-US/?1514019&name=Variant_type. Este tipo de datos es «necesario» cuando trabajas con ActiveX y con automatización.

TRY … CATCH

Bien. En Windev lo llaman

WHEN EXCEPTION IN

DO
IF ExceptionInfo(errCode) = UnknownExID THEN RESULT «»
END

Que es algo distinnto de una excepción general en una procedure o en toda la aplicación que se codifica:

Procedure myPro()

WHEN EXCEPTION
Info(…)
END

Variable Reset

Restablece la variable a su valor inicial.

Si la variable es una estructura, una clase, una variable compuesta, la función restablece todos los miembros a su valor inicial.

Si la variable es un array, la función restablece todos los elementos a su valor inicial sin modificar las dimensiones del array.

Si la variable es un array asociativa, una cola, una pila o una lista, VariableReset es equivalente a DeleteAll: todos los elementos se eliminan.

Ejemplo:

VariableReset({var..Name,indVariable})

NOTA: Una de las ventajas, es poder usar código “genérico” en clases o procedimientos e inicializar variables sin saber de que tipo son.