Está en la página 1de 4

Como crear sistemas multiempresa

VISUAL FOXPRO TIPS


Por: Lic. Sergio Hugo Sanchez O.
29, Abril, 2002 - H. Matamoros, Tam. Mexico - I.D. Systems
Hay ocasiones en que es necesario que nuestras bases de datos o nuestras
tablas cambien de ubicacin. Tal es el caso de un sistema multiempresa.
Supongamos que al hacer un sistema multiempresa necesitamos que nuestras
diferentes tablas o base de datos esten cada una en una carpeta diferente para
que se manejen de manera individual. Esto lo podemos hacer facilmente
utilizando por ejemplo el codigo dentro de nuestras formas o programas al abrir
nuestras tablas de la siguiente manera;
view source
print?
1.
2.USE <em>c:\sistemas\carpeta\tabla</em>.dbf IN 0

Esto como vemos abre la tabla desde la carpeta especificada. En FoxPro


anterior que no teniamos las formas y codificabamos la mayor parte del tiempo
no era tanto problema. En algunas ocasiones teniamos una tabla donde
especificabamos el nombre de la empresa y la ubicacin, esto se pasaba a una
variable desde el principio del programa y mas adelante al abrir las tablas
respectivas se utilizaba el siguiente codigo:
view source
print?
1.
2.VPath = "c:\sistemas\carpeta2"
3.CTabla = vPath + "\tabla.dbf"
4.USE <em>(cTabla)</em> IN 0

O con una macro

view source
print?
1.
2.VPath = "c:\sistemas\carpeta2"
3.CTabla = vPath + "\tabla.dbf"

4.USE &<em>cTabla</em> IN 0
5.

Bien. Lamentablemente el VisualFoxPro me encontre que al poner mis tablas


(trabajo con tablas libres y en este ejemplo asi las usare) dentro del
DATAENVIRONMENT de la Forma este queda de una manera fija (hardcode) y
hace referencia para abrirse directamente desde esta ubicacin, no importando
si la forma se cambia de carpeta.
En algunas ocasiones he copiado una forma de un sistema a otro y la tabla al
abrirse conserva su ubicacin original. Cmo entonces decirle a la forma que
abra una tabla desde otra ubicacin si esta esta dentro del DATAENVIRONMENT
de la Forma?
Una sencilla respuesta seria poner la propiedad AUTOOPENTABLES como .F. y
incluso en el INIT de la forma codificar de la manera antes mencionada.
Pero para probar algo nuevo y para tener mis tablas en la misma forma dentro
del DATAENVIRONMENT he aqu un ejemplo de cmo se podria codificar y hacer
que las tablas contenidas dentro del DATAENVIRONMENT cambien de ubicacin
aunque este prefijadas.
1. Se tiene una tabla con los datos de la empresa a abrir con un campo
que indique la ubicacin. Mas o menos asi:

EMPRESA Ubicacin
DEMO1 C:\SISTEMAS\CARPETA1
DEMO2 C:\SISTEMAS\CARPETA2
Etc.

2. Tener una variable PUBLICA dentro de nuestro programa principal o con el


cual arranquemos, algo asi como:
PUBLIC vPath
3. Hacer una forma donde podamos seleccionar la empresa que
queramos, y una vez seleccionada, pasar a nuestra variable publica la
ubicacin correspondiente.

4. Hacer nuestra forma donde abrimos nuestras diferentes tablas.


Creamos una nueva forma, abrimos el area del DATAENVIRONMENT y
agregamos a ella nuestra tabla o tablas (estamos usando tablas
libres, pero puede usar una base de datos tambien). Recuerde que no
importa de donde venga el camino. Cada tabla hace un CURSOR, una
tabla temporal que es la que se abre con la forma. El cursor tiene una
propiedad llamada CURSORSOURCE que veremos esta en italica y no
se nos permite modificar dentro de nuestra ventana de propiedades.
5. Ahora pondremos los campos que deseemos en la forma tal y como se
haria con una tabla de manera normal.
6. Abrimos de nuevo nuestro DATAENVIRONMENT (o lo seleccionamos si
no lo hemos cerrado) y haremos dos cosas: 1) poner la propiedad
AUTOOPENTABLES como .F. y 2)
Poner dentro del metodo OPENTABLES:
view source
print?
1.
2.this.cursor1.cursorsource = TRIM( vPATH ) + "\tabla.dbf"

Si tiene mas de una tabla entonces debera poner esta referencia por cada tabla
que este ah, cambiando el numero de cursor de que se trate.
7. Ahora cerramos nuestro DATAENVIRONMENT y en el INIT de nuestra
FORMa tecleamos lo siguiente:
view source
print?
1.
2.ThisForm.DataEnvironment.OpenTables()

Esto ejecutara el metodo OPENTABLES que hemos programado y listo, nuestra


forma abrira la tabla desde la ubicacin correcta.
Si incluso desea pasar un parametro a la forma para una nueva ubicacin,
dentro del INIT de la forma debera poner:

view source
print?
1.
2.PARAMETER cWhichDBC
3.

Luego creamos una propiedad en la forma llamada por ejemplo


* WhichDBC
Y ah ponemos:
view source
print?
1.
2.This.WhichDBC=cWhichDBC
3.ThisForm.DataEnvironment.OpenTables()
4.

En el OPENTABLES del DATAENVIRONMENT pondremos:


view source
print?
1.
2.This.Cursor1.Database=ThisForm.WhichDBC
3.This.Cursor2.Database=ThisForm.WhichDBC
4.

También podría gustarte