Este es un Ejemplo de Como Aprovechar la Nueva Clase "Empty" que nos proporciona VFP8.
Esta Rutina, nos permite Leer Los Nombres de las variables que usaremos en Nuestro Programa, en una Tabla y su Respectivo Valor, para No Tener que recompilar el programa cada vez que tengamos que cambiar el valor de una variable.
En Lugar de Variables Publicas, podemos tener un Objeto Global, que contendra una propiedad por cada Registro que encuentre en la tabla, y su valor correspondiente.
La Ventaja es que el objeto solo contendra propiedades, ningun metodo o evento, por lo tanto sera mas que liviano. y pueden ser facilmente pasado como parametro a otras aplicaciones nuestras variables.
El Codigo Es Este:
Define Class oEntorno As Session Procedure LeerConf Lparameters cArchivo, cCampo, cValor If Type('cArchivo')<>'C' Or Type('cCampo')<>'C' Or Type('cValor')<>'C' Or ; Len(Alltrim(cArchivo))= 0 Or Len(Alltrim(cCampo))= 0 Or Len(Alltrim(cValor))= 0 Wait Window 'Error del Programador!' Return .F. Endif Local uValor, cCad, nCiclo, oProp, cAlias Use In Select('Origen') Use (cArchivo) Alias Origen Again In 0 Shared cCad=',.*+/- =()[]{}<>^&%$#"!@)(¿?'+"'" Select Distinct (&cCampo) As cOpcion, (&cValor) As uValor From Origen Into Cursor CurProp Readwrite If Reccount('CurProp')>0 Update CurProp Set cOpcion =Chrtran(Alltrim(CurProp.cOpcion), cCad, Replicate('_',Len(cCad))) oProp = Createobject("Empty") Select CurProp Scan AddProperty(oProp, Alltrim(CurProp.cOpcion),'') Do Case Case Alltrim(Upper(transform(curprop.uValor)))='.NULL' cCad = [Store .Null. to Oprop.]+Alltrim(CurProp.cOpcion) Case Type(Evaluate("curprop.uValor"))='L' cCad = [Store ]+ Upper(Transform(CurProp.uValor))+[ to Oprop.]+Alltrim(CurProp.cOpcion) Case Getwordcount(CurProp.uValor,'/-')=3 And Len(Alltrim(CurProp.uValor))=10 cCad = [Store {^] +Alltrim(CurProp.uValor)+ [} to Oprop.]+Alltrim(CurProp.cOpcion) Case Type(Evaluate([curprop.uValor]))='N' cCad = [Store ]+ Upper(Transform(CurProp.uValor))+[ to Oprop.]+Alltrim(CurProp.cOpcion) Otherwise cCad = [Store "]+ Upper(Transform(CurProp.uValor))+[" to Oprop.]+Alltrim(CurProp.cOpcion) Endcase &cCad Endscan Endif Use In Select('CurProp') Use In Select('Origen') Return oProp Endproc Enddefine
Los parametros que deben pasarse son:
- La ruta al Archivo que leeremos
- El Nombre del Campo que contendra los nombres de las propiedades
- El Nombre del Campo que contendra los valores
Para Usarlo, suponiendo que Nuestra Tabla es: "C:\configuravariables.dbf" y la estructura es:
Id Numeric(2), Nombre char(16), Valor Char(200)
Hariamos
Set Library to oEntorno.prg && donde oEntorno.prg es el nombre con que grabaron esta rutina Local oEnt Public oGlobal oEnt = CreateObject("oEntorno") oGlobal = oEnt.LeerConf("C:\configuravariables.dbf","Nombre","Valor")
y a partir de este momento, oGlobal ya tiene tantas propiedades como registros en la tabla.
NOTA: Ambos campos tienen que ser Caracter. La rutina intenta detectar el tipo de dato que es, para las variables de tipo Date, debe ir almacenada en el formato AAAA/MM/DD. Acepta registros con campo =Null para los valores.
Saludos desde Guatemala.
Jorge Mota
Muy buen artículo
ResponderBorrar