Ayuda con DBC para Sistema multiempresa

22/07/2004 - 20:43 por Jose Maria Vilar | Informe spam
Hola a todos.

Se me ha presentado un problema que no se como solucionar, espero que
otros ojos me saquen del estancamiento.

Estoy desarrollando un sistema de Sueldos y Jornales para una consultora y
el problema que tengo es que estoy utilizando DBC porque me resulta muy
util el uso de vistas.

El tema es que necesito crear multiples carpetas una para c/emprresa en
donde se ubicaran las tablas como Empleados,Obras Sociales etc. y en una
carpeta general las tablas comunes a todos.
El inconveniente se me presenta porque las DBC guardan la relacion con
cada tabla por lo que no se como copiar las mismas en cada carpeta para
que tome las tablas necesarias.

No se si fui claro, espero que alguien tenga alguna idea de como armarlo.

NOTA:
Ya se que podria tener una sola tabla para cada cosa como ser
Empleados,Obras Sociales Etc. y con un campo Empresa pero el usuario no
quiere tener todo junto (por miedo a perder datos).
Actualmente el sistema que tengo (En Cobol) trabaja con todas las empresas
separadas y en fox para DOS lo tenia igual pero el problema lo tengo ahora
con los DBC.

Desde ya muchas gracias


Jose Maria Vilar
Analista de Sistemas

-
PortalFox :: Nada corre como un zorr
http://www.portalfox.co

PortalFox - NNTP Forum Gatewa

Preguntas similare

Leer las respuestas

#1 allan
22/07/2004 - 20:55 | Informe spam
creo que podrias utilizar un DBC, por empresa, guardado
fisicamente en la carpeta correspondiente.

Allan,
Respuesta Responder a este mensaje
#2 Norberto Gomez Maure
23/07/2004 - 22:30 | Informe spam
Hola Jose Maria
Te sugiero el siguiente esquema:
En la carpeta de tu proyecto crea la carpeta DATA y dependiendo de esta la
carpeta ORIGEN
Por Ejemplo C:\Sueldos\data y c:\Sueldos\data\origen ( o como tu prefieras
denominarlas)
En ..\data guardas la DBC comun a todas conteniendo por ejemplo la tabla
usuarios, empresas, ciudades,tipo_oper, etc.
En ..\data\origen guardas la DBC que luego vas a copiar a la carpeta de
cada empresa.
En el formulario que te permite crear una nueva empresa defines la carpeta
a crear por ejemplo:
c:\Sueldos\data\Telefonica o \\server\xxx\telefonica y alli copias la
DBC, tablas e indices de ..\data\origen.
Al seleccionar una empresa guardas en una variable publica el path a esta
carpeta y en el metodo BeforeOpenTables de los forms y de los Reports
escribes lo siguiente:
goApp.FixDataPath(THIS)
y listo !!

Este metodo que puedes tener en la clase de la app es el siguiente

METHOD FixDataPath
* adapted from an article in VFUG March 2000 Newsletter by Jim Osieczonek
LPARAMETERS toDataEnv
LOCAL lcDataPath,laCursors,lnStartPos,lcDataName,;
lcNewDataPath,lnI,lcObjClass, lcObjName, loCursor
DIMENSION laCursors[1,1]
lcDataPath = THIS.cDataFolder
* See .cDataFolder_access and .cDataFolder_assign.Already checked
existence and back slash
* Make a list of all the cursors in the Data Environment
=AMEMBERS(laCursors,toDataEnv,1)
=ASORT(laCursors, 2)
lnStartPos = ASCAN(laCursors, "Object")
IF lnStartPos <= 0
* there are no cursors assigned to data environment of this form.
RETURN
ENDIF
lnStartPos=ASUBSCRIPT(laCursors, lnStartPos,1)
FOR lnI = lnStartPos TO ALEN(laCursors,1)
IF laCursors(lnI,2) = "Object"
lcObjClass = "toDataEnv."+laCursors(lnI,1)+".class"
IF EVAL(lcObjClass)="Cursor"
lcObjName="toDataEnv." ;
+ laCursors(lnI,1)+".DATABASE"
lcDataName=ALLTRIM(EVAL(lcObjName))
IF !EMPTY(lcDataName)
lcNewDataPath = lcDataPath + JUSTFNAME(lcDataName)
* Evaluate the cursor object
loCursor = EVAL( "toDataEnv."+laCursors(lnI,1) )
*Modify the Database property with the new path
loCursor.Database = lcNewDataPath
ENDIF
ENDIF
ELSE
EXIT
ENDIF
ENDFOR

Suerte !
Norberto



-
PortalFox :: Nada corre como un zorr
http://www.portalfox.co

PortalFox - NNTP Forum Gatewa
Respuesta Responder a este mensaje
#3 Norberto Gomez Maure
24/07/2004 - 15:25 | Informe spam
Olvide agregar que en el loop FOR.. ENDFOR tendrias que cambiar el path
solo para las que no estan en la carpeta comun a todas las empresas.
Ya sea con
IF ATC("ORIGEN",UPPER(lcDataName)) > 0
or
IF (ATC("\empresa.dbc",lcDataName) > 0)
Norberto

-
PortalFox :: Nada corre como un zorr
http://www.portalfox.co

PortalFox - NNTP Forum Gatewa
Respuesta Responder a este mensaje
#4 Jose Maria Vilar
26/07/2004 - 20:41 | Informe spam
Gracias Norbeto, lo voy a probar

Jose Maria Vilar
Analista de Sistemas

-
PortalFox :: Nada corre como un zorr
http://www.portalfox.co

PortalFox - NNTP Forum Gatewa
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida