ERROR AL ABRIR TABLA EN ENTORNO DE DATOS-URGE

15/07/2004 - 20:27 por Silvia G. Cerrillo Ramírez | Informe spam
HOLA QUE TAL AGRADECERIA INFINITAMENTE SU AYUDA...

TENGO UN PROYECTO MULTIEMPRESA DONDE MEDIANTE UNA TABLA LIBRE DEFINO
LA UBICACION DE LAS DIFERENTES BD DE C/EMPRESA, EN EL ENTORNO DE DATOS DE
CADA FORMA UBICO LA RUTA DE DATOS SELECCIONADA ACTUALMENTE, Y DE HECHO
HASTA
AHI PUEDO OBSERVAR QUE ESTA EN LA RUTA ADECUADA , SOLO QUE CUANDO INTENTO
ABRIR
LA FORMA ME MARCA "LA TABLA MITABLA.DBF" NO ESTA MARCADA COMO
PERTENECIENTE A LA BD "MIDBD" DESEA CREAR EL VINCULO ANTERIOR PARA
MARCARLA si no , LE DOY SI
Y ME PONE "ERROR AL CARGAR EL ARCHIVO # REG 6 "FRMMIFORMA >O UNO DE SUS
MIEMBROS> CARGANDO EL FORMULARIO O EL ENTORNO DE DATOS EL ARCHIVO C:MI
RUTA\MITABLA.DBF ES DE SOLO LECTURA.

ME IMAGINO QUE ES UN PROBLEMA AL CARGAR EL ENTORNO DE DATOS LO CURIOSO ES
QUE YO PUEDO CORROBORAR QUE LA RUTA ES LA ADECUADA Y SOLO ES EN EL
EJECUTABLE EN MI APLICACION DESDE VPF NO ME MARCA NINGUN ERROR.

GRACIAS DE ANTEMANO POR SU COLABORACION

*--CODIGO QUE USO EN EL ENTORNO --*
PUBLIC pcRuta, pcNombre_BD
LOCAL lcUnidad, lcDirDatos

IF USED("Config")
SELECT Config
SET ORDER TO TAG Id_Emp
ELSE
USE Config ORDER TAG Id_Emp SHARED IN 0
ENDIF

SEEK pnId_Emp
IF FOUND()
lcUnidad = Config.Unidad
lcDirDatos = RTRIM(Config.Carpeta)
pcRuta = lcUnidad + lcDirDatos
pcNombre_BD = pcRuta + "PRODUCCION.DBC"
MESSAGEBOX(pcNombre_BD)
SET PATH TO pcRuta
OPEN DATABASE (pcNombre_BD) SHARED
SET DATABASE TO (pcNombre_BD)


IF !EMPTY(lcDirDatos) and !EMPTY(lcUnidad)
*No importa la cantidad de cursores que sean se almacenan en el
siguiente vector
=AMEMBERS(A_Cursors,THISFORM.dataenvironment,1)
=ASORT(A_Cursors, 2) && Esto es opcional
nStartpos=ASUBSCRIPT(A_Cursors, ASCAN(A_Cursors, "Object"),1)
* Ahora recorro el dataenvironment asignado el path

FOR I = nstartpos TO ALEN(A_cursors,1)
IF A_Cursors(i,2) = "Object"
cObjClass = "THISFORM.DATAENVIRONMENT."+a_cursors(i,1)+".class"
IF EVAL(cObjClass)="Cursor"
cObjName="THISFORM.DATAENVIRONMENT." +
A_Cursors(i,1)+".DATABASE"
Data_Name=EVAL(cObjName)
* Modifico el path para la base de datos
NewDataPath =lcUnidad + lcDirDatos +
ALLTRIM(SUBSTR(Data_Name, RAT("\",Data_Name)+1))
* Evaluo el cursor para estar seguro
oRef = EVAL( "THISFORM.DATAENVIRONMENT."+a_cursors(i,1) )
* Le Modifico la propiedad de la base de datos
oRef.Database = newdatapath
ENDIF
ELSE
EXIT
ENDIF
ENDFOR
ENDIF
*-- Cierra Tabla CONFIG
USE IN (SELECT("Config"))
ELSE
MESSAGEBOX("Ha ocurrido un Error de Configuración." + CHR(13) +;
"El Sistema no reconoce el ID Empresa seleccionado o Falta
asignar Directorio de Datos!", CRUZ+OK, "Menu Principal")
Thisform.Release
ENDIF





PortalFox :: Nada corre como un zorro
http://www.portalfox.com

PortalFox - NNTP Forum Gateway
 

Leer las respuestas

#1 Norberto Gomez Maure
21/07/2004 - 20:58 | Informe spam
En beforeopentables de los forms y reports escribo:
goApp.FixDataPath(THIS) y todo funciona correctamente.

El metodo FixDataPath esta en la clase de la app y lo adopte de un
articulo en
VFUG March 2000 Newsletter by Jim Osieczonek

****************************
METHOD FixDataPath
LPARAMETERS toDataEnv
LOCAL lcDataPath,laCursors,lnStartPos,lcDataName,;
lcNewDataPath,lnI,lcObjClass, lcObjName, loCursor

DIMENSION laCursors[1,1]
lcDataPath = THIS.cDataFolder && esta seria to pcRuta. Debe terminar con \
* 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
***************************************************
Norberto




PortalFox :: Nada corre como un zorro
http://www.portalfox.com

PortalFox - NNTP Forum Gateway

Preguntas similares