FoxPro/Visual FoxPro - Error File is in use

   
Vista:

Error File is in use

Publicado por Marco (19 intervenciones) el 07/03/2014 23:59:15
buenas compañeros
tengo el siguiente error
cuando abro la aplicacion dentro de foxpro 9 me corre bien el boton del backup y el de restaurar
cuando creo el .exe me lo crea sin ningun problema
ahora cuando lo abro me lo abre bien
cuando le doy en el formulario guardar donde se encuentra el backup y el de restaurar
me lo abre sin ningun problema
pero cuando le doy click en el formulario de backup me dice el sguiente error "file is in use"
e hecho de todo y nada que me funciona el bakup del proyecto

codigo del boton de backup

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
CLOSE TABLES ALL
CLOSE DATABASES ALL
*CLOSE ALL
CLEAR PROGRAM error
RUTA = "c:\Backup\"
IF DIRECTORY("c:\Backup")
    IF messagebox("Desea Crear la Copia de Respaldo",65,"Facturacion")=1
        COPY FILE (FULLPATH("*.dbf")) TO RUTA+"*.*"
        COPY FILE (FULLPATH("*.CDX")) TO RUTA+"*.*"
        COPY FILE (FULLPATH("*.FPT")) TO RUTA+"*.*"
        MESSAGEBOX("Hecho La Copia De Respaldo Debe Reiniciar El Sistema",16,"Facturacion")
	    QUIT
    ELSE
        MESSAGEBOX("Cancelada Copia de Respaldo",16,"Facturacion")
    ENDIF
ELSE
    IF MESSAGEBOX("No se a creado la carpeta, desea crearla: se creara en C:",33,"Facturacion")=1
        MD "c:\Backup"
        COPY FILE (FULLPATH("*.dbf")) TO RUTA+"*.*"
        COPY FILE (FULLPATH("*.CDX")) TO RUTA+"*.*"
        COPY FILE (FULLPATH("*.FPT")) TO RUTA+"*.*"
        MESSAGEBOX("Hecho La Copia De Respaldo Debe Reiniciar El Sistema",16,"Facturacion")
		QUIT
    ELSE
        MESSAGEBOX("Cancelada Copia de Respaldo",16,"Facturacion")
    ENDIF
ENDIF

codigo el de restaurar

1
2
3
4
5
6
7
8
9
10
11
12
CLOSE DATABASES ALL
CLOSE TABLES ALL
CLOSE ALL
SET SKIP OF MENU _MSYSMENU .T.
RUTA = "c:\Backup\"
IF DIRECTORY("c:\Backup")
 
	COPY FILE Ruta + '*.*' TO SYS(5)+ SYS(2003)+'\'+ '*.*'
	MESSAGEBOX("Hecho La Copia De Respaldo Debe Reiniciar El Sistema",16,"Facturacion")
	quit
 
ENDIF

muchas gracias por su sugerencias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Error File is in use

Publicado por Fidel José (558 intervenciones) el 08/03/2014 15:18:31
1) Parece que tienes las tablas en la raíz del proyecto. Esa es una mala decisión. Debería estar en una subcarpeta del proyecto, por ejemplo, "Datos".
2) Fullpath() no te asegura que la carpeta de origen sea la correcta. Si en alguna parte se produjo un cambio de directorio (CD, por ejemplo), la ruta no será la que esperas. Siempre tomo en una propiedad de screen la ruta en el programa de inicio de la aplicación. Por ejemplo:
IF _VFP.StartMode > 1
LcRoot=JUSTPATH(SYS(16))
ELSE
LcRoot="C:\miProyecto"
CD &lcRoot
ENDIF
Addproperty(_Screen,"ruta",lcRoot)

3) Conviene implementar el control de errores y para eso, es mejor dividir la tarea para particularizar el problema. Para eso, en lugar de copiar en bloque, es mejor generar un Array con Adir().

4) Si copias dbf y cía de la raíz del proyecto, evita Appuser, FoxUser y la tabla _app asociada al proyecto.

5) También conviene dejar un log sobre el trabajo de copia de respaldo, para lo cual Adir() es apropiado, mientras que copy FILE *.* no te sirve.

Esto que sigue te da una idea de como detectar el problema.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
*<BackUp CommandButton.Click>
 
LOCAL lcRoot,lcRootBack,;
	lcFile,lcFileBack,;
	i,j,lnFiles,lcFileLog,lnHand,;
	lcMens,lnMess,;
	lcProject,lnLenProject
 
lcProject=UPPER(JUSTSTEM(_vfp.ActiveProject.Name))
lnLenProject=LEN(lcProject)
lcRoot=FULLPATH("")
lcRootBack="c:\backup"
 
 
lcFileLog=ADDBS(lcRoot)+"Backup.log"
 
LOCAL ARRAY gatipos(3),gaFiles(1)
gatipos[1]="dbf"
gatipos[2]="fpt"
gatipos[3]="cdx"
 
TRY
	LOCAL loEx as Exception
 
	IF !DIRECTORY(lcRootBack)
		MD &lcRootBack
	ENDIF
	CLOSE DATABASES ALL
	lnHand=FCREATE(lcFileLog)
	=FPUTS(lnHand,"<Backup>")
	=FPUTS(lnHand,CHR(9)+"<datetime="+TTOC(DATETIME(),1)+"/>")
	=FPUTS(lnHand,CHR(9)+"<datasource="+lcRoot+"/>")
	=FPUTS(lnHand,CHR(9)+"<datatarget="+lcRootBack+"/>")
	FOR i=1 TO ALEN(gatipos)
		lnFiles=ADIR(gaFiles,ADDBS(lcRoot)+"*."+gaTipos[i])
		FOR j=1 TO lnFiles
 
			IF INLIST(UPPER(LEFT(gafiles[j,1],7)),"APPUSER","FOXUSER") ;
				OR UPPER(LEFT(gaFiles[j,1],lnLenProject))==lcProject
				* Salta
			ELSE
 
				lcFile=ADDBS(lcRoot)+gaFiles[J,1]
				lcFileBack=ADDBS(lcRootBack)+gaFiles[J,1]
				COPY FILE &lcFile TO &lcFileBack
				=FPUTS(lnHand,CHR(9)+"<Source="+lcFile+"/>";
					+"<Target="+lcFileBack+"/>")
			ENDIF
		NEXT
	NEXT
	=FPUTS(lnHand,"</Backup>")
CATCH TO loEx
	loEx.UserValue=PROGRAM()+" Ruta Origen="+lcRoot
	lcMens="Fecha: "+TRANSFORM(DATETIME());
		+CHR(13)+"Mensaje: "+loex.Message ;
		+CHR(13)+"ErrorNo: "+TRANSFORM(loex.ErrorNo);
		+CHR(13)+"LineNro: "+TRANSFORM(loex.LineNo);
		+CHR(13)+loex.uservalue
	STRTOFILE(lcMens,"ThError.log",1)
	MESSAGEBOX(lcMens)
FINALLY
	=FCLOSE(lnHand)
 
	IF VARTYPE(loex)#"O"
		lnmess=MESSAGEBOX("Backup Finalizó Exitosamente"+CHR(13);
			+"Desea ver el log de Backup?",4,LOWER(PROGRAM()))
		IF lnMess=6
			MODIFY FILE &lcFilelog NOEDIT
		ENDIF
	ENDIF
ENDTRY
 
*</BackUp CommandButton.Click>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error File is in use

Publicado por Marco (19 intervenciones) el 09/03/2014 19:51:48
AHORA ME SALE EL SGUIENTE ERROR CUANDO HAGA EL INSTALADOR


Error loading file - record number 5. ACCESO<or one of its member>. loadinf form or the data environment : the table file has moved. please validate database and try again

PORQUE CUANDO HAGO DESDE .EXE ME FUNCIONA TODO BIEN NO SE POR QUE ME SALE ESTE ERROR CUANDO HAGO EL INSTALADOR
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar