qEntorno

Controla la apertura, cierre, generación de índices, depurar archivo (pack), procesos de actualizaciones de archivos, permitiendo la convivencia de archivos cuando sea necesario para no tener que abrir un archivo más de una vez para distintos módulos.

Hija de
No tiene clase padre.

Variables
lAbierto Indica si el entorno ya fue abierto (solo lectura)

Métodos
new() Método constructor
add() Agrega un archivo para ser abierto
open() Abre los archivos del entorno
close() Cierra los archivos del entorno
reindex() Inicia proceso de creación de índices o de actualización
alias() Devuelve el alias de un archivo utlizado dentro del entorno
object() Devuelve el objeto qDBF compartido de un archivo

Descripción
Esta clase permite:
Controlar entornos de archivos 1. Maneja el control de la apertura y cierre de archivos para que el programador solo se preocupe de que archivos y como los quiere abrir, solamente tenrá que inicar el conjunto archivos que desea abrir, indicar el momento de la apertura y el momento del cierre, qEntorno les asignará el alias para que el programador lo utilice, y al final del proceso solo se indica que se cierra el entorno y qEntorno se encarga de los procesos de cerrado o control de archivos compartidos.
2. Al indicar los archivos que se desean abrir hay dos maneras para usarlos:
   a) Se abre el archivo y se le asigna un alias
   b) Se maneja como un archivo compartido, el cual solamente se abrirá si no se ha abierto como compartido, si ya se abrío, simplemente devolverá el alias utilizado para que el programador lo utilice de manera normal, de esta manera no se abre un archivo varias veces cuando puede ser utilizado por varios módulos sin problema, por ejemplo, se quiere un módulo para direccion de personas, se abre el archivo de personas y el archivo de colonias, en el archivo de personas se guarda la clave de la colonia y cada vez que se muestra se realiza la busqueda en el archivo de colonias, tambén se quiere un módulo para control de mascotas, se abre el archivo de mascotas, el archivo de personas y el archivo de colonias, el de colonias puede ser utilizado por ambos módulos, si se tienen abiertos los dos módulos al mismo tiempo no es necesario abrir el archivo de colonias más que una vez, el de personas si se necesita abrir dos veces, una apra el control de personas y otra para el de mascotas, pero en el control de mascotas puede abrirse el archivo de personas de manera compartida por si algún otro módulo lo necesita.
Crear índices y depurar archivos (pack) Tiene una opción para crear índices, simplemente se indican los archivos casi de la misma manera como si se crearan con comandos xBase y se da la instrucción para crear indices, esta instrucción abre un diálogo en la que permite seleccionar a que archivos se les crea los índices y que archivos son depurados.
Crear procesos de actualización Se indica que archivos van a ser actualizados, pueden indicarse simplemente como un archivo que será abierto o como un archivo al que se le creará un índice, posteriormente se indica que realice el proceso de actualización y lo realiza para todos los archivos indicados. Si a los archivos de les indicó el índice, se crean los índices despues de realizar el proceso de actualización.

Es recomendable utilizar el juego de comandos DBFS/END DBFS definidos en qSoft.ch.

Métodos

new()
Este método crea un objeto qEntorno.
Devuelve: Una referencia al objeto.

add( cArchivo, lMultiEntorno, cAlias, oObjeto, lShared, lReadOnly, cRDD, xBloqueaDBF, cLlave, cNomIndice, cNomContenedor, cFor, lUnico, lDescend, lCustom, lNoOptim )
Agrega un archivo para ser abierto.

Si no se envían parametros despues de xBloqueaDBF, se abrirá el archivo, pero no creará índice de él en proceso de creación de índices o actualización.

Si se envía algún parámetro a partir de cLlave, se considera para la creación de índice para el proceso de creación de índices o actualización.
Devuelve: NIL
cArchivo Nobre del archivo DBF
lMultiEntorno Indica si el archivo se abrirá solo para este entorno (.f.), o se puede copartir con otros (.t.), si no se envía, se abre coparido
cAlias Variable que debe ser enviada por referencia, en ella se devolverá el álias cuando se abra el entorno
oObjeto Variable que debe ser enviada por referencia, en ella se devolvará un objeto qDBF cuando se abra el entorno
lShared Permite si el archivo se abre de manera compartida, es el atributo shared de xBase
lReadOnly Indica si se abre como solo lectura, es el atributo read only de xBase
cRDD Rdd utilizado para abrir el archivo, si no se indica se utiliza el predeterminado
xBloqueaDBF Codeblock, nombre de función o apuntador a la función que se encargará de bloquear o desbloquer el archivo DBF, esto permite encriptar el archivo o cualquier operación para encriptar el archivo, esta función tiene que realizar algo simple y que no cree conflictos con el uso del archivo en el abmiente compartido (SHARED) de xBase, la función es llamada en tres ocaciones:
   1. Antes de abrir el archivo, se envían como argumentos el nombre del archivo y verdadero (.t.)
   2. Si el archivo se abre en modo compartido (SHARED), despues de abrir el archivo
   3. Si el archivo se abre de manera exclusiva, al momento de cerrar el archivo
Esta función debe devolver .t. o .f., lo que indica si se realizó la operación correctamente porque será considerada al momento de abrir el archivo, si devuelve .f. no se abrirá, ni siquiera se hará el intento.
Si no se envía simplemente se abre el archivo de manera normal.
cLlave Llave del índice
cNomIndice Nombre de la etiqueta que se utilizará para el índice en índices con varios varios índices por contenedor (archivo de índices)
cNomContenedor Nombre del archivo que contendrá el índice
cFor Filtro que se utilizará para indicar que registros se incluirán en el índice, si no se indica, todos los registros serán incluidos, si se envía, solamente los registros que cumplan con esta condición formarán parte del índice
lUnico Indica si se creará un índice unico (sin registros duplicados en el índice) (.t.) o con todos los registros (.f.), si no se envía tomará el valor del parámetro global _SET_UNIQUE (SET UNIQUE)
lDescend Indica si se creará un índice en órden descendente (.t.) o ascendente (.f.), si no se envía, se creará en forma ascendente
lCustom Para RDDs que lo permitan se creará un índice personalizado (.t.) o normal (.f.), si no se envía, será normal
lNoOptim Para RDDs que lo permitan indica si la condición FOR (cFor) se debe optimizar (.t.) o no (.f.) si no se envía no se optimiza

open()
Realiza la operación de apertura de archivos del entorno, en este caso:
   - Abre los archivos que deberán abrirse únicamente para el entorno.
   - Abre los archivos compartidos entre entornos que no han sido abiertos.
   - Si hay un archivo compartido entre entornos abierto, toma control de él para el entorno.
Devuelve: Valor lógico indicando si el entorno fue abierto (.t.) o no (.f.).

close( xArchivo )
Cierra uno o todos los archivos abiertos del entorno, esto quiere decir:
Si es un archivo abierto únicamente para el entorno, lo cierra.
Si es un archivo compartido para el entorno revisa si esta abierto por otro entorno, si es así, únicamente libera el archivo de este entorno, de no estar abierto por otro entorno, lo cierra.
Devuelve: .t.
cArchivo Alias del archivo u objeto qDBF o equivalente del archivo que se desea cerrar, si no se envía, cierra todos los archivos del entorno

reindex( xUpdate, cTitulo, xRecursoSi, xRecursoNo, nPermiso, oUsr )
Inicia el proceso de creación de índices o de actualización.
Devuelve: .t.
xUpdate Nombre o apuntador de una función o codeblock que realizará el proceso de actualización para cada archivo, esta función recibirá dos parámetros, el objeto meter que se actualizará conforme se realice el proceso y el nombre del archivo que se procesará.
cTitulo Título que tendrá el diálogo
xRecursoSi Simbolo utilizado para indicar que fue seleccionado para generar índice o depurar archivo
   nil - Mostrará "Si" cuando se seleccione un archivo
   número - Manejador de un bitmap
   texto - Nombre del un recurso bitmap
xRecursoNo Simbolo utilizado para indicar que no se ha seleccionado para generar índice o depurar archivo
   nil - Mostrará "  " cuando no esté seleccionado un archivo
   número - Manejador de un bitmap
   texto - Nombre del un recurso bitmap
nPermiso Número utilizado para controlar los derechos de usuario para la seleccion de archivos para la generación de índices y depuración (pack), si no se envía oUsr se validará el número directamente de acuerdo a las definiciones utilizadas por qPassword, si se envía oUsr será la clave utilizada para el control de acceso, si no se envía nPermiso, se tiene acceso total.
Los derechos son:
   PSW_ESCRITURA - Creación de índices
   PSW_BORRADO - Creación de índices y depuración
oUsr Objeto qPassword utilizado para el control de usuarios, si no se envía nPermiso será validado según el número enviado de acuerdo a las definiciones utilizadas por qPassword

alias( xAlias )
Devuelve el alias de un archivo utlizado dentro del entorno.
Devuelve: Alias del archivo
xAlias Si se envía un número indica la posición del archivo del alias que se quiere obtener de acuerdo a como se indicaron al crear el entorno.
Si se envía el nombre del archivo indicado para la apertura devolverá el alias utilizado

object( xAlias )
Devuelve el alias de un archivo utlizado dentro del entorno.
Devuelve: Objeto qDBF abierto por defecto, es el que se devuelve para el parámetro oObjeto del método add(), o la clausula OBJECT del comando DBFS/END DBFS.
xAlias Si se envía un número indica la posición del archivo del objeto que se quiere obtener de acuerdo a como se indicaron al crear el entorno.
Si se envía el alias del archivo indicado para la apertura devolverá el objeto

Ejemplo

oEntorno := qEntorno():new()
oEntorno:add( "nombres" , .f., @cNombres )
oEntorno:add( "colonias", .t.,, @oColonias )
oEntorno:add( "estados" , .t., @cEstados, @oEstados )
oEntorno:add( "autos" )
oEntorno:open()
? ( cNombres )->clave
? oColonias:nombre
? oEntorno:alias( "autos" )
oEntorno:close()