Tengo armada una aplicación para la actualización de las bases de datos de los sistemas y NO la puedo hacer andar, se las dejo para que la vean, o bien si tienen alguna para sugerirme
muchas gracias
David Barrio
davidbarrio_arg@hotmail.com
- Code: Select all Expand view RUN
#include 'Directry.ch'
Function ActuArchivos()
local oDlgSe
local ORIGEN :=SPACE(60) , oORIGEN ,;
DESTINO:=SPACE(60) , oDESTINO
local oICOCMOV
DEFINE DIALOG oDlgSe FROM 0,0 TO 10,99 TITLE 'Actualización de BASES de DATOS'
@ 0.875, 1 SAY 'Ubicación ORIGEN:' of oDlgSe
@ 13,85 BTNBMP oICOCMOV of oDlgSe ;
FILE 'LUPA2.BMP' ;
SIZE 10,10 ;
ACTION(ORIGEN:=DIRECMain() ,;
ORIGEN:=ORIGEN+'' ,;
oORIGEN:refresh() )
@ 01,13 GET oORIGEN var ORIGEN of oDlgSe
@ 1.750, 1 SAY 'Ubicación DESTINO:' of oDlgSe
@ 26,85 BTNBMP oICOCMOV of oDlgSe;
FILE 'LUPA2.BMP';
SIZE 10,10 ;
ACTION(DESTINO:=DIRECMain() ,;
DESTINO:=DESTINO+'' ,;
oDESTINO:refresh() )
@ 02,13 GET oDESTINO var DESTINO of oDlgSe
@ 3,08 BUTTON '&Actualizar' of oDlgSe ACTION ( ActArch(ORIGEN,DESTINO) , oDlgSe:End() ) SIZE 40, 10
@ 3,28 BUTTON '&No Actualizar' of oDlgSe ACTION ( oDlgSe:End() ) SIZE 40, 10
ACTIVATE DIALOG oDlgSe CENTERED
dbcloseall()
RETURN NIL
Function ActArch(ORIGEN,DESTINO)
local x:=DIRECTORY('*.dbf'),;
NOM_DBF:={}
local TR_1:=1
local Paso
local C1,C2,C3,C4,C5,C6,C7
local AC1,AC2,AC3,AC4,AC5,AC6,AC7
local Campos
If ORIGEN=='' .or. DESTINO==''
MsgStop( 'Error de Directorio ORIGEN o DESTINO' )
Return .t.
EndIf
*-------------------------- Carga archivos DBF en Directorio de ORIGEN
X:=DIRECTORY(ORIGEN+'*.DBF')
AEVAL(X,{|FILE|AADD(NOM_DBF,FILE[F_NAME])})
* NOM_DBF = Nombres de Archivos DBF que se deben agregar/reemplazar en carpeta de DESTINO
* C1 = Nombre de Archivos DBF A Cambiar (En directorio de ORIGEN)
* C3 = Nombre de Archivos DBF de Transferencia (En directorio de DESTINO) Cambia 1° x '_'
* C4 = Nombre de Archivos DBF en Directorio de ORIGEN
* C5 = Nombre de Archivo que debe renombrar el archivo DBF => DB (En directorio de ORIGEN)
* C6 = Nombre de Archivo DBT (En directorio de ORIGEN)
* C7 = Nombre de Archivo que debe renombrar el archivo DBT => DT (En directorio de ORIGEN)
dbcloseall()
While TR_1<=LEN(NOM_DBF)
*
C1:=NOM_DBF[TR_1] // Nombre de Archivo en DESTINO
*
C4:=NOM_DBF[TR_1] // Nombre de Archivo en ORIGEN
C1:=FilNomArc(C1)
C4:=FilNomArc(C4)
Paso := .f.
If .NOT. FILE(C1) // NO existe el archivo en Destino
If MsgNoYes(oemtoansi('Base de Dato NUEVA: '+C1+;
', Realiza la Actualización ?'),;
oemtoansi('Elija opcion SI/NO') )
PathSet(ORIGEN)
AC4:=ER_3(C4,1,1)
COPY TO &(C1)
Paso := .t.
Else
Paso := .f.
EndIf
ElseIf FILE(C1) // EXISTE el Archivo en Destino
* En C3 coloco el NOMBRE archivo a reemplazar cambiando
* la 1° letra del Nombre por el 1(UNO)
* ejemplo 'CUENTA.DBF' pasa a '_UENTA.DBF'
If MsgNoYes(oemtoansi('Base de Dato a Actualizar: '+C1+;
', Realiza la Actualización ?'),;
oemtoansi('Elija opcion SI/NO') )
C3:='_'+SUBSTR(NOM_DBF[TR_1],2,LEN(NOM_DBF[TR_1]))
MsgWait( 'Guardando Información de Base de Dato de DESTINO de: '+C1+' en '+C3 )
PathSet(DESTINO)
use &(C1)
pack
COPY TO &(C3)
DBCLOSEALL()
use &(c3)
DBCLOSEALL()
MsgWait( 'Copiando Nueva Base de Dato en DESTINO: '+C4 )
PathSet(ORIGEN)
use &(C4)
PathSet(DESTINO)
COPY TO &(DESTINO+C1)
DBCLOSEALL()
PathSet(DESTINO)
use &(c1)
ZAP
pack
DBCLOSEALL()
MsgWait( 'Copiando Información Base de Dato: '+C3+' en '+C1 )
PathSet(DESTINO)
AC1:=ER_3(C1,1,1)
AC3:=ER_3(C3,1,1)
Campos := FCOUNT()
While !eof()
DbSelectArea(AC1)
&(AC1)->( DBAPPEND() )
FOR x = 1 TO Campos
&(AC1)->&(FIELDNAME(x)) := &(AC3)-> &(FIELDNAME(x))
NEXT x
DbSelectArea(AC3)
DBSKIP()
EndDo
Paso := .t.
Else
Paso := .f.
EndIf
Else
MsgStop( 'Error de Actualización de Archivos: '+C4 )
Paso := .f.
EndIf
If Paso
MsgInfo( 'Archivo ACTUALIZADO: '+C1 )
PathSet(ORIGEN)
*-------------------------
* Renombrar los archivos DBF y DBT de ORIGEN para que NO los transfieran de nuevo
* Carga en C5 el nombre como debe renombrar el archivo de ORIGEN (de DBF a DB)
C5:=SUBSTR(NOM_DBF[TR_1],1,LEN(NOM_DBF[TR_1])-3)+'DB'
* Carga en C6 el nombre del posible archivo DBT
C6:=SUBSTR(NOM_DBF[TR_1],1,LEN(NOM_DBF[TR_1])-3)+'DBT'
* Carga en C7 el nombre como debe renombrar el archivo de ORIGEN (de DBT a DT)
C7:=SUBSTR(NOM_DBF[TR_1],1,LEN(NOM_DBF[TR_1])-3)+'DT'
If FILE(C5) // Si Existe el archivo DB (en ORIGEN) se BORRA
If FERASE(&(C5)) == -1
MsgStop( 'Archivo: '+C5+' NO Borrado' )
EndIf
EndIf
If FILE(C7) // Si Existe el archivo DT (en ORIGEN) se BORRA
If FERASE(&(C7)) == -1
MsgStop( 'Archivo: '+C7+' NO Borrado' )
EndIf
EndIf
MsgWait( 'Renombrando Base: '+C4+' a: '+C5 )
If FRENAME(C4,C5) == -1 // Renombre el Archivo DBF de ORIGEN (DBF a DB)
MsgStop( 'Archivo: '+C4+' NO Renambrado' )
EndIf
If FILE(C6) // SI Existe DBT
MsgWait( 'Renombrando Base: '+C6+' a: '+C7 )
If FRENAME(C6,C7) == -1 // Renombre el Archivo DBT de ORIGEN (DBT a DT)
MsgStop( 'Archivo: '+C4+' NO Renambrado' )
EndIf
EndIf
*-------------------------
EndIf
dbcloseall()
TR_1:=++TR_1
EndDo
MsgInfo( 'Archivo Actualizados: '+str(len(NOM_DBF),2) )
dbcloseall()
RETURN NIL
*-----------------------------------
Function FilNomArc(NomArc)
local x,NomFil:=''
For x = 1 to len(NomArc)
If substr(NomArc,x,1) == '.'
exit
EndIf
NomFil := NomFil + substr(NomArc,x,1)
Next x
Return NomFil