La Web del Programador: Comunidad de Programadores
 
    Pregunta:  1104 - BACKUP EN VFP 5.0
Autor:  Cristobal Alberto Melara
Deseo conocer como puedo respaldar bases de datos (o cualquier tipo de archivo) a un disco flexible u otro medio desde un programa en Visual Foxpro 5.0. utilizando algun compresor de archivos.

De antemano les agradezco su valiosa ayuda.


  Respuesta:  JULIO LOMANTO
mira yo hice una pequeña rutina que me ha servido para todos mis programas y no tengo problema de copiar las tablas y los index, ademas las aseguro para que nadie las modifique y asi poder mantener un nivel de seguridad. Primero: cuando instale el programa principal en su carpeta C: SIMVER, luego dentro de esta carpta cree otra llamada REGISTER en esta carpeta guardo las bases de datos .DBF y los archivos indices .CDX para seguridad de mi sistema, pero lo bueno es que le cambie la extension y asi nadie, "bueno hablando del cliente" me las puede molestas con excel, y les puse otra extension.

1. esta rutina esta en el evento INIT del formulario
CLOSE TABLES all

PUBLIC ARRAY gaDatabase(100,100)
PUBLIC ARRAY ARRAYPROP(100,100)
PUBLIC ARRAY eRReYPRaP(100,100)
PUBLIC ARRAY cdxarray(100,100)
PUBLIC ARRAY raylmt(100,100)
ASD = ADIR(ARRayprop, '*.DBF')
dsa = ADIR(eRReYPRaP, ALLTRIM(THISFORM.ruta_y)+ ALLTRIM(THISFORM.archivo)+""+"*.BAK")
CXD = ADIR(cdxarray, "*.CDX")
lmt = ADIR(raylmt,ALLTRIM(THISFORM.ruta_y)+ ALLTRIM(THISFORM.archivo)+""+"*.LMT")

SELECT 99
USE AUDITOR
THISFORM.ruta_y = auditor.ruta_y
THISFORM.archivo = auditor.archivo
THISFORM.mes_actual = auditor.mes_actual
USE
gnDbcnumber = ADIR(gaDatabase, ALLTRIM(THISFORM.ruta_y)+"simver10"+"*.DBF")


2.- esta rutina esta en el boton command que lo llame "iniciar", que es cuando cliente le da click para iniciar el proceso de copiar o restaurar copia de seguridad
thisform.label1.Enabled 	= .T.

thisform.label3.Enabled = .T.
thisform.PORcentaje.Enabled = .T.
thisform.PORcentaje.Visible = .T.
thisform.origen.Enabled = .t.
THISFORM.ORIgen.Visible = .T.
thisform.destino.Enabled = .t.
THISFORM.destino.Visible = .T.

SET CURSOR OFF
CLOSE DATABASES

DO CASE
CASE thisform.backup.Value = 1
gnDbcnumber = ADIR(gaDatabase, '*.DBF')
CASE thisform.backup.Value = 2
gnDbcnumber = ADIR(eRReYPRaP, ALLTRIM(THISFORM.ruta_y)+ ALLTRIM(THISFORM.archivo)+""+"*.BAK")
CASE thisform.backup.Value = 3
CASE thisform.backup.Value = 4
ENDCASE
FOR nCount = 1 TO gnDbcnumber
DO CASE
CASE thisform.backup.Value = 1
THISFORM.v_base = ALLTRIM((gaDatabase(nCount,1)))
Thisform.BACKUps(THISFORM.v_base)
THISFORM.porcentajes(1)
CASE thisform.backup.Value = 2
THISFORM.v_base = ALLTRIM((eRReYPRaP(nCount,1)))
gnPWZ = ASCAN(eRReYPRaP, THISFORM.v_base )
IF gnPWZ != 0
Thisform.restore(THISFORM.v_base)
THISFORM.porcentajes(1)
ENDIF
CASE thisform.backup.Value = 3
CASE thisform.backup.Value = 4
ENDCASE
ENDFOR

THISFORM.porcentaje.Caption = "00 %"
thisform.label1.Enabled = .f.
thisform.label3.Enabled = .f.
thisform.PORcentaje.Enabled = .F.
thisform.PORcentaje.Visible = .F.
thisform.origen.Enabled = .F.
THISFORM.ORIgen.Visible = .F.
thisform.origen.Caption = "."
thisform.destino.Enabled = .t.
THISFORM.destino.Visible = .T.
thisform.destino.Caption = "."
thisform.num_porcentaje = 0

SET CURSOR ON
THISFORM.Refresh


3. luego cree un metodo mio llamado BACKUPS donde le puse esta rutina
PARAMETERS pa_nombre

lago = LEN(pa_nombre)
CDX_ARC = ALLTRIM(THISFORM.ruta_y) + "simver10" + LEFT(pa_nombre, (lago - 4)) + ".CDX"
CDX_BUS = LEFT(pa_nombre, (lago - 4)) + ".CDX"
LMT_ARC = ALLTRIM(THISFORM.ruta_y)+ ALLTRIM(THISFORM.archivo)+"" + LEFT(pa_nombre, (lago - 4)) + ".LMT"
a_rign = ALLTRIM(THISFORM.ruta_y) + "simver10" + pa_nombre
a_norg = ALLTRIM(THISFORM.ruta_y)+ ALLTRIM(THISFORM.archivo)+"" + LEFT(pa_nombre, (lago - 4)) + ".BAK"
COPY FILE &a_rign TO &a_norg
zaPWZ = ASCAN(cdxarray, CDX_BUS)
IF zaPWZ != 0
COPY FILE &CDX_ARC TO &LMT_ARC
ENDIF


4.- y el otro metodo mio llamado restore donde puse esta rutina restaurar copia
PARAMETERS pa_nombre

lago = LEN(pa_nombre)
CDX_ARC = ALLTRIM(THISFORM.ruta_y) + "simver10" + LEFT(pa_nombre, (lago - 4)) + ".CDX"
CDX_BUS = LEFT(pa_nombre, (lago - 4)) + ".LMT"
LMT_ARC = ALLTRIM(THISFORM.ruta_y)+ ALLTRIM(THISFORM.archivo)+"" + LEFT(pa_nombre, (lago - 4)) + ".LMT"
a_rign = ALLTRIM(THISFORM.ruta_y) + "simver10" + LEFT(pa_nombre,lago - 4) +".DBF"
a_norg = ALLTRIM(THISFORM.ruta_y)+ ALLTRIM(THISFORM.archivo)+"" + LEFT(pa_nombre, (lago - 4)) + ".BAK"
COPY FILE &a_norg TO &a_rign
azPWZ = ASCAN(raylmt, CDX_BUS)
IF azPWZ != 0
COPY FILE &LMT_ARC TO &CDX_ARC
ENDIF


5. a parte de eso le puse una rutina que muestra los datos copiado y un contador numerico para que el cliente vea lo que pasa y llame a este metodo mio PORCENTAJE
PARAMETERS valorllega

THISFORM.num_porcentaje = THISFORM.num_porcentaje + valorllega
num_xctaje = THISFORM.num_porcentaje
NOM_HOME = LEFT(THISFORM.v_base, LEN(THISFORM.v_base)- 4)
THISFORM.PORcentaje.Caption = ALLTRIM(STR(num_xctaje))+ " %"

DO CASE
CASE thisform.backup.Value = 1
THISFORM.origen.Caption = ALLTRIM(THISFORM.ruta_y)+"simver10" + ALLTRIM(UPPER(thisform.v_base))
thisform.destino.Caption = ALLTRIM(THISFORM.ruta_y)+ ALLTRIM(THISFORM.archivo)+"" + NOM_HOME + ".BAK"
CASE thisform.backup.Value = 2
THISFORM.origen.Caption = ALLTRIM(THISFORM.ruta_y)+ ALLTRIM(THISFORM.archivo)+"" + NOM_HOME + ".BAK"
thisform.destino.Caption = ALLTRIM(THISFORM.ruta_y)+"simver10" + NOM_HOME + ".DBF"
CASE thisform.backup.Value = 3
CASE thisform.backup.Value = 4
ENDCASE

WAIT WINDOWS "" TIMEOUT 0.001


6.- Luego cree un entorno donde le puse al formulario los siguientes elementos

option group donde el cliente puede seleccionar si copia o restaura
labels, para mostrar los datos origen de copiado y los datos destino de copiado
otro label que contiene los numero asi "23%" que es el que va aumentando como un contador
y el resto es imaginacion.

y me ha servido pero que te sirva

  Respuesta:  jose jaimes
Mira Copia esto en un boton de Comando y listo
thisform.l13.visible = .t. es una imagen para animacion la cual tiene que ver con las tablas del sistema OK suerte...

mi_unidad = sys(5)+ sys(2003)

set exclusive on
respuesta=messagebox("¿ Desea efectuar el respaldo de la información manejada por el sistema ?",4+32,"Respaldar...")
if respuesta = 6
do while .t.
if diskspace ("A") = -1
res=messagebox("La unidad no esta preparada, Por favor verifique e intente de nuevo",4+64,"Error")
if res = 6
loop
else
thisform.release()
return .f.
endif
else
set defa to a:
wait window "Status: unidad preparada..." Nowait
exit
endif
enddo

if diskspace() < 160
messagebox("Seleccione un disco limpio para realizar el respaldo e intente de nuevo",0+64,"Inserte otro disco....")
set defa to &mi_unidad
else
set safety off
set defa to &mi_unidad

copy file CLIENTES.DBF to a:\
thisform.l1.visible = .t.

copy file PELICULAS.DBF to a:\
thisform.l2.visible = .t.

copy file PROVEEDOR.DBF to a:\
thisform.l3.visible = .t.

copy file ALQUILER.DBF to a:\
thisform.l4.visible = .t.

copy file ALQUILER2.DBF to a:\
thisform.l5.visible = .t.

copy file COMPRAS.DBF to a:\
thisform.l6.visible = .t.

copy file COMPRA2.DBF to a:\
thisform.l7.visible = .t.

copy file Contar.DBF to a:\
thisform.l8.visible = .t.

copy file cARLOS.DBF to a:\
thisform.l9.visible = .t.

copy file HORAS1.DBF to a:\
thisform.l10.visible = .t.

copy file PEDIDOS.DBF to a:\
thisform.l11.visible = .t.

copy file PEDIDO2.DBF to a:\
thisform.l12.visible = .t.

copy file EQUIPOS.DBF to a:\
thisform.l13.visible = .t.

messagebox("El respaldo fue realizado con éxito...",0+64,"AXL_JOSE@HOTMAIL:COM")
endif

else
thisform.release()
endif

thisform.release()

  Respuesta:  GERMAN A. MORALES L.
SI SABES HACER USO DE LOS COMANDOS DOS, CON VFP PUEDES REALIZAR LAS COPIAS DE TUS BASES LA VECES QUE LAS NECESITES ESPERO TE SIRVA ESTE EJEMPLO:

IF (respuesta=6) THEN
run copy e:\ok\tablas\*.dbf a: &&\temporales\backup\.
run copy e:\ok\tablas\*.cdx a: &&\temporales\backup\.
ENDIF

  Respuesta:  Coco
Usa el Winzip Command line Support Add-on
con este programa puedes lograr lo que necesitas, la direccion URL es :
http://www.winzip.com/wzcline.htm

Espero te ayude
Saludos


  Respuesta:  Cristóbal Melara
En mi búsqueda por algo mejor me encontré la siguiente dirección:

www.greeneclipsesoftware.com

Aquí encontré unos controles activex (eclipse cabinet)que te hacen la tarea más fácil y puedes programar los cambios. Lo mejor es que los archivos son freeware.
Te invito a que la visites y espero que te sirva de alguna ayuda la información que ahí se encuentra.