FoxPro/Visual FoxPro - Backup Completo

   
Vista:

Backup Completo

Publicado por Gabriel (2 intervenciones) el 23/05/2013 23:20:32
Estimado buenas tardes!

Mi consulta hoy es sobre, si a mi sistema en un "formulario" le puedo agregar un boton que me lleve a realizar el backup completo automatico, por cualquier razon de error en la pc del cliente, poder tener respaldado automaticamente todo en un directorio del equipo.

Leyendo entiendo que una de las maneras es haciendo "Pnr" con codigo para el backup, pero quisiera saber si hay alguna forma mas sencilla, eficaz y rapida que se pueda hacer, y tambien que al backup lo realize mediante un boton llamado "BACKUP".
Saludos estimado.
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

Backup Completo

Publicado por neo (1601 intervenciones) el 24/05/2013 00:24:53
Yo lo que hago es llamar un prg "respaldos.prg" cada vez que el usuario cierre el sistema

Aunque ahora voy a cambiar esa forma por un programa que me gustó y lo puede hacer automaticamente y manualmente.

Este es el codigo que utilizo: (se guarda los dbc, dbf)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SET SAFETY OFF
SET NOTIFY OFF
SET CENTURY off
SET TALK OFF
 
 
CLOSE DATABASES
CLOSE TABLES ALL
WAIT WINDOW "Creando respaldo de Seguridad..." TIMEOUT .8
SET DEFAULT TO c:\puntodeventadlv
SET PATH TO datos
 
COPY FILE c:\mi_carpeta\*.dbf TO c:\respaldos\datos\*.dbf
COPY FILE c:\mi_carpeta\*.cdx TO c:\respaldos\datos\*.cdx
COPY FILE c:\mi_carpeta\*.dcx TO c:\respaldos\datos\*.dcx
COPY FILE c:\mi_carpeta\*.dct TO c:\respaldos\datos\*.dct
COPY FILE c:\mi_carpeta\*.dbc TO c:\respaldos\datos\*.dbc
 
WAIT WINDOW "Terminó el respaldo de datos con éxito..." TIMEOUT .8
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

Backup Completo

Publicado por Fidel (558 intervenciones) el 24/05/2013 01:11:28
En la lista de copy te faltan los *.fpt. Si no, los archivos con campo memo serán inusables.
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

Backup Completo

Publicado por neo (1 intervención) el 24/05/2013 03:57:41
Oh si, lo que pasa es que en esa aplicación no usé campos memo...

Saludos!
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

Backup Completo

Publicado por Gabriel (3 intervenciones) el 27/05/2013 02:55:36
Esto la hago en el Prg? o me sirve para un boton en un form?
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

Backup Completo

Publicado por Fidel (558 intervenciones) el 29/05/2013 15:17:46
Lo puedes poner en un prg, o como método de una clase custom.
Luego lo puedes llamar desde un botón, o en el cierre del sistema, sujeto a alguna condición.

Si estás trabajando en un entorno multiusuario, deberás comprobar que los archivos no estén en uso. Por este motivo yo utilizo una rutina con la que se puede generar una copia de respaldo aunque haya usuarios en línea e incluso trabajando. Siempre es mejor tener datos guardados (aunque puedan estar algo incompletos) que ningún dato.

La estrategia es crear tablas nuevas cuyo nombre será el prefijo "b_"+nombre de tabla.
Con una rutina como esta no necesitas que las tablas estén cerradas porque se acceden en modo SHARED. Pueden olvidarse las máquinas encendidas con el sistema abierto y puedes realizar tu copia de respaldo.
Los archivos "b_" contendrán o no los registros marcados para borrar dependiendo de SET DELETED.
Si las tablas tienen campos memo, se generará el *.FTP correspondiente.

Nota: Como yo trabajo con tablas libres, en la rutina no consideré los archivos de Base de DAtos (dbc). No obstante el método no cambia (también son tablas).

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
PROCEDURE getBack()
*******************
* Copia de respaldo
rutaback="C:\BACKUP"
ruta="\\Equipo\Carpeta\SubCarpeta"
nFiles=ADIR(gafiles,"&ruta\*.dbf")
IF nFiles=0
	MESSAGEBOX("Nada para copiar en &ruta")
endif
FOR i=1 TO ALEN(gafiles,1)
	cFile=JUSTSTEM(gafiles[i,1])
	ldoit=.t.
	lClose=.f.
	IF !USED(cfile)
		gFile=ADDBS(ruta)+cFile
		WAIT WINDOW "abriendo &gfile como &cfile" AT 12,15 nowait
 
		USE (gfile) IN 0 SHARED
		ldoit=USED(cfile)
		lClose=lDoit
	ENDIF
	IF ldoit
 
 
		cbackFile="b_"+cfile
		cFilegen=ADDBS(rutaback)+cBackFile
		WAIT WINDOW "Copiando &cfile a &cBackFile en &rutaback" AT 12,15 nowait
 
		SELECT (cfile)
		AFIELDS(gaStruct)
		lMemo=.f.
		FOR xi=1 TO ALEN(gaStruct,1)
			IF gasTruct[xi,2]="M"
				lMemo=.t.
				EXIT
			ENDIF
		NEXT
		CREATE TABLE &cFilegen FREE FROM ARRAY gaStruct
		SELECT (CFILE)
		IF !lMemo
			SCAN
				SCATTER MEMVAR
				INSERT INTO (cBackFile) FROM MEMVAR
			ENDSCAN
 
		else
			SCAN
				SCATTER MEMO MEMVAR
				INSERT INTO (cBackFile) FROM MEMVAR
			ENDSCAN
		endif
		SELECT (cBackFile)
		USE
		IF lClose
			SELECT (CFILE)
			USE
		ENDIF
	ENDIF
NEXT
 
WAIT WINDOW "terminado " AT 12,15
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