PROCEDURE juntar
*---------------
LOCAL i,lnfiles
LOCAL ARRAY laFiles(1)
USE tabla_Madre
lcFolder = GETDIR(FULLPATH(""),"Carpeta","Carpeta con dbf iguales",64+48)
IF !EMPTY(m.lcFolder)
lnFiles = ADIR(laFiles,ADDBS(m.lcFolder)+"*.dbf","",1)
FOR i = 1 TO m.lnFiles
lcTabla = ADDBS(m.lcFolder)+laFiles[i,1]
USE (m.lcTabla) IN 0 SHARED AGAIN ALIAS Tabla_append
IF Comparar_Tablas(tabla_madre,Tabla_Append)
SELECT * FROM Tabla_Append WHERE .t. INTO CURSOR curAppend
SELECT Tabla_Madre
APPEND FROM DBF("curAppend")
ENDIF
USE IN curAppend
USE IN Tabla_append
NEXT
ENDIF
PROCEDURE Comparar_tablas
LPARAMETERS tcTable_left,tcTable_Right
***********************************
* Comparar si los campos son iguales
* Retorna (.t.) si son iguales (.f.) con cualquier diferencia
* incluso de posicionamiento de campos.
TRY
LOCAL i,;
j,;
l_Identical,;
lnCols_left,;
lnCols_Right,;
lnFields_Left,;
lnFields_Right,;
lcMessage,;
loEx AS Exception
LOCAL ARRAY laFields_Left(1),laFields_Right(1)
DO WHILE .t.
IF !USED(m.lcTable_Left) ;
OR !USED(m.lcTable_Right)
lcMessage = "Necesita tener las tablas abiertas para compararlas"
EXIT
ENDIF
l_Identical = .t.
lnFields_Left = AFIELDS(laFields_left,m.tcTable_left)
lnCols_Left = ALEN(laFields_Left,2)
lnFields_Right = AFIELDS(laFields_Right,m.tcTable_Right)
lnCols_Right = ALEN(laFields_Right,2)
IF m.lnFields_Left <> m.lnFields_Right ;
OR m.lnCols_Left <> m.lnCols_Right
l_Identical=.f.
ELSE
FOR i = 1 TO m.lnFields_Right
FOR j = 1 TO m.lnCols_Right
IF VARTYPE(laFields_Left[m.i,m.j]) <> VARTYPE(laFields_Right[m.i,m.j])
l_Identical = .f.
EXIT
ENDIF
IF laFields_left[m.i,m.j] <> laFields_Right[m.i,m.j]
l_Identical = .f.
EXIT
ENDIF
NEXT
NEXT
ENDIF
EXIT
ENDDO
CATCH TO loex
loex.UserValue = PROGRAM()
ShowError(loex,,,.t.)
l_Identical = .f.
FINALLY
IF !EMPTY(m.lcMessage)
MESSAGEBOX(m.lcMessage,0,PROPER(PROGRAM()))
ENDIF
ENDTRY
RETURN m.l_Identical
ENDPROC
PROCEDURE ShowError
*-----------------------------------------------------
LPARAMETERS toExcep,tlNotShow,tcCaption
tcCaption=EVL(tcCaption,"Mensaje del Sistema")
SET HOURS TO 24
LOCAL lcMens
lcMens="Fecha "+TRANSFORM(DATETIME());
+ Chr(13)+"Mensaje: "+toExcep.message;
+ Chr(13)+"ErrorNo: "+TRANSFORM(toExcep.Errorno);
+ Chr(13)+"Llamada: "+toExcep.Uservalue
IF _vfp.StartMode=0
lcMens=lcMens+ Chr(13)+"Linea "+TRANSFORM(toExcep.lineno)
ENDIF
STRTOFILE(lcMens+ Chr(13)+REPLICATE("=",60)+ Chr(13),"Errors.log",1)
lcMens="Se ha producido un error:"+ Chr(13)+lcMens
IF !tlNotShow
MESSAGEBOX(m.lcMens,0,m.tcCaption)
ENDIF
ENDPROC