From 32dd640de23bb644ebc8a12d33bbb617113f18ae Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Wed, 19 Nov 2014 21:33:22 +0100 Subject: [PATCH 1/4] Changeset: 493 fdbozzo - 19/11/2014 19:13:33: - Arreglo "Error 1903, String is too long to fit." --- foxbin2prg.prg | 108 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 86 insertions(+), 22 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 1e10043..5000c69 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -107,6 +107,7 @@ * 19/09/2014 FDBOZZO v1.19.34 Arreglo bug: Si se ejecuta FoxBin2Prg desde ventana de comandos FoxPro para un proyecto y hay algún archivo abierto o cacheado, se produce un error al intentar capitalizar el archivo de entrada (Jim Nelson) * 26/09/2014 FDBOZZO v1.19.35 Mejora: Generar siempre el mismo Timestamp y UniqueID para los binarios minimizaría los cambios al regenerarlos (Marcio Gomez G.) * 08/10/2014 FDBOZZO v1.19.36 Arreglo bug: Al generar el mn2 el identificador queda vacío (bug introducido en v1.19.35) +* 19/11/2014 FDBOZZO v1.19.37 Arreglo bug: String is too long to fit (edyshor) * * *--------------------------------------------------------------------------------------------------- @@ -153,6 +154,7 @@ * 28/08/2014 Peter Hipp REPORTE BUG mnx v1.19.32: Si una opción tiene asociado un Procedure de 1 línea, no se mantiene como Procedure y se convierte a Command (solucionado en v1.19.33) * 19/09/2014 Jim Nelson REPORTE BUG v1.19.33: Si se ejecuta FoxBin2Prg desde ventana de comandos FoxPro para un proyecto y hay algún archivo abierto o cacheado, se produce un error (solucionado en v1.19.34) * 26/09/2014 Marcio Gomez G. MEJORA v1.19.34: Generar siempre el mismo Timestamp y UniqueID para los binarios minimizaría los cambios al regenerarlos (Agregado en v1.19.35) +* 19/11/2014 edyshor REPORTE BUG dbf v1.19.36: * * *--------------------------------------------------------------------------------------------------- @@ -530,6 +532,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -598,6 +601,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM n_ClassTimeStamp = 1130668032 && 2013/11/04 20:00:00 n_CFG_Actual = 0 n_ID = 0 + n_FileHandle = 0 o_Conversor = NULL o_Frm_Avance = NULL o_FSO = NULL @@ -11465,24 +11469,59 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg *-- Header loTable = CREATEOBJECT('CL_DBF_TABLE') - C_FB2PRG_CODE = C_FB2PRG_CODE + loTable.toText( ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, .c_InputFile, lc_FileTypeDesc, @toFoxBin2Prg ) + + IF toFoxBin2Prg.DBF_Conversion_Support = 4 + *-- Exportación de estructura y datos (para Diff solamente) + ERASE (.c_OutputFile + '.TMP' ) + toFoxBin2Prg.n_FileHandle = FCREATE( .c_OutputFile + '.TMP' ) + + IF toFoxBin2Prg.n_FileHandle = -1 THEN + ERROR 102, (.c_OutputFile) + ENDIF + + FWRITE( toFoxBin2Prg.n_FileHandle, C_FB2PRG_CODE ) + loTable.toText( ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, .c_InputFile, lc_FileTypeDesc, @toFoxBin2Prg ) + FCLOSE( toFoxBin2Prg.n_FileHandle ) + *fdb* + + *-- Genero el DB2 + IF .l_Test + toModulo = C_FB2PRG_CODE + ELSE + lnLen = 1 &&LEN( toFoxBin2Prg.get_PROGRAM_HEADER() ) + DO CASE + CASE FILE(.c_OutputFile) AND SUBSTR( FILETOSTR( .c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) + *.writeLog( 'El archivo de salida [' + .c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) + .writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) + CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; + AND toFoxBin2Prg.ChangeFileAttribute( .c_OutputFile, '-R' ) ; + AND STRTOFILE( C_FB2PRG_CODE, .c_OutputFile ) = 0 + *ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly' + ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) + ENDCASE + ENDIF - - *-- Genero el DB2 - IF .l_Test - toModulo = C_FB2PRG_CODE ELSE - lnLen = 1 &&LEN( toFoxBin2Prg.get_PROGRAM_HEADER() ) - DO CASE - CASE FILE(.c_OutputFile) AND SUBSTR( FILETOSTR( .c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) - *.writeLog( 'El archivo de salida [' + .c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) - .writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) - CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; - AND toFoxBin2Prg.ChangeFileAttribute( .c_OutputFile, '-R' ) ; - AND STRTOFILE( C_FB2PRG_CODE, .c_OutputFile ) = 0 - *ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly' - ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) - ENDCASE + C_FB2PRG_CODE = C_FB2PRG_CODE + loTable.toText( ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, .c_InputFile, lc_FileTypeDesc, @toFoxBin2Prg ) + + + *-- Genero el DB2 + IF .l_Test + toModulo = C_FB2PRG_CODE + ELSE + lnLen = 1 &&LEN( toFoxBin2Prg.get_PROGRAM_HEADER() ) + DO CASE + CASE FILE(.c_OutputFile) AND SUBSTR( FILETOSTR( .c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) + *.writeLog( 'El archivo de salida [' + .c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) + .writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) + CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; + AND toFoxBin2Prg.ChangeFileAttribute( .c_OutputFile, '-R' ) ; + AND STRTOFILE( C_FB2PRG_CODE, .c_OutputFile ) = 0 + *ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly' + ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) + ENDCASE + ENDIF + ENDIF *-- Hook para permitir ejecución externa (por ejemplo, para exportar datos) @@ -16284,8 +16323,10 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE *** DH 06/02/2014: added _Records loRecords = THIS._Records - lcText = lcText + loRecords.toText(@laFields, lnFieldCount, lc_DBF_Conversion_Condition) - + *lcText = lcText + loRecords.toText(@laFields, lnFieldCount, lc_DBF_Conversion_Condition) + FWRITE( toFoxBin2Prg.n_FileHandle, lcText ) + loRecords.toText(@laFields, lnFieldCount, lc_DBF_Conversion_Condition, @toFoxBin2Prg) + lcText = '' ENDIF TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 @@ -16293,6 +16334,11 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE <<>> ENDTEXT + IF toFoxBin2Prg.DBF_Conversion_Support = 4 && BIN2PRG (DATA EXPORT FOR DIFF) + FWRITE( toFoxBin2Prg.n_FileHandle, lcText ) + lcText = '' + ENDIF + CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -16887,21 +16933,29 @@ DEFINE CLASS CL_DBF_RECORDS AS CL_COL_BASE * taFields (@! IN ) Array de información de campos * tnField_Count (v! IN ) Cantidad de campos * tc_DBF_Conversion_Condition (v? IN ) Condición de filtro para la conversión. Solo se exporta lo que la cumpla. + * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg *--------------------------------------------------------------------------------------------------- - LPARAMETERS taFields, tnField_Count, tc_DBF_Conversion_Condition + LPARAMETERS taFields, tnField_Count, tc_DBF_Conversion_Condition, toFoxBin2Prg EXTERNAL ARRAY taFields + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF + TRY - LOCAL lcText, loEx AS EXCEPTION ; + LOCAL lcText, loEx AS EXCEPTION, I ; , loRecord AS CL_DBF_RECORD OF 'FOXBIN2PRG.PRG' - lcText = '' + lcText = '' + I = 0 TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> <<>> <> ENDTEXT + FWRITE( toFoxBin2Prg.n_FileHandle, lcText ) + lcText = '' loRecord = CREATEOBJECT('CL_DBF_RECORD') IF EMPTY(tc_DBF_Conversion_Condition) @@ -16909,14 +16963,24 @@ DEFINE CLASS CL_DBF_RECORDS AS CL_COL_BASE ENDIF SCAN FOR &tc_DBF_Conversion_Condition. - lcText = lcText + loRecord.toText(@taFields, tnField_Count) + I = I + 1 + lcText = loRecord.toText(@taFields, tnField_Count) + FWRITE( toFoxBin2Prg.n_FileHandle, lcText ) + IF MOD(I,10000) = 0 THEN + FFLUSH( toFoxBin2Prg.n_FileHandle, .T. ) + ENDIF ENDSCAN + + lcText = '' TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> <> <<>> ENDTEXT + FWRITE( toFoxBin2Prg.n_FileHandle, lcText ) + lcText = '' + CATCH TO loEx loEx.UserValue = loEx.UserValue + 'tc_DBF_Conversion_Condition = [' + TRANSFORM(tc_DBF_Conversion_Condition) + ']' + CR_LF From 34433479314c535ee97d66192f69428278270b10 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 20 Nov 2014 19:37:38 +0100 Subject: [PATCH 2/4] =?UTF-8?q?Changeset:=20494=20fdbozzo=20-=2019/11/2014?= =?UTF-8?q?=2021:33:23:=20-=20Nueva=20rutina=20FilesComparedAreEqual()=20p?= =?UTF-8?q?ara=20comparar=20archivos=20de=20cualquier=20tama=C3=B1o=20a=20?= =?UTF-8?q?bajo=20nivel=20cuando=20DBF=5FConversion=5FSupport=20=3D=204=20?= =?UTF-8?q?-=20Nueva=20rutina=20RenameTmpFile2Tx2File()=20para=20renombrar?= =?UTF-8?q?=20el=20nuevo=20archivo=20temporal=20generado=20al=20tx2=20corr?= =?UTF-8?q?espondiente=20cuando=20DBF=5FConversion=5FSupport=20=3D=204?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 114 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 109 insertions(+), 5 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 5000c69..dea3142 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -502,6 +502,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -548,6 +549,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -1424,6 +1426,84 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDPROC + FUNCTION FilesComparedAreEqual + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * tcFilename1 (v! IN ) Nombre del archivo1 a comparar + * tcFilename2 (v! IN ) Nombre del archivo2 a comparar + * tcStrFileName2 (v! IN ) ***NO IMPLEMENTADO*** Contenido del archivo2 a comparar + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcFilename1, tcFilename2, tcStrFileName2 + + LOCAL lnComparacion, lnLen1, lnLen2, lnHandle1, lnHandle2, lnTipoComp, lnChunkSize ; + , loEx as Exception + + TRY + STORE -1 TO lnComparacion, lnHandle1, lnHandle2 + lnTipoComp = 0 + lnChunkSize = 65535 + + DO CASE + CASE NOT EMPTY(tcFilename1) AND NOT EMPTY(tcFilename2) + lnTipoComp = 1 + lnHandle1 = FOPEN( tcFilename1 ) + + IF lnHandle1 = -1 + EXIT + ENDIF + + lnHandle2 = FOPEN( tcFilename2 ) + + IF lnHandle2 = -1 + EXIT + ENDIF + + lnLen1 = FSEEK( lnHandle1, 0, 2 ) + lnLen2 = FSEEK( lnHandle2, 0, 2 ) + + *-- Comparación de tamaño + IF lnLen1 <> lnLen2 THEN + lnComparacion = 0 && Son distintos + EXIT + ENDIF + + *-- Comparación de contenido + FSEEK( lnHandle1, 0, 0 ) + FSEEK( lnHandle2, 0, 0 ) + + DO WHILE NOT ( FEOF(lnHandle1) OR FEOF(lnHandle2) ) + IF NOT SYS( 2007, FREAD( lnHandle1, lnChunkSize ), -1, 1 ) == SYS( 2007, FREAD( lnHandle2, lnChunkSize ), -1, 1 ) THEN + lnComparacion = 0 && Son distintos + EXIT + ENDIF + ENDDO + + IF lnComparacion = 0 THEN + EXIT + ENDIF + + lnComparacion = 1 && Son iguales + + ENDCASE + + CATCH TO loEx + lnComparacion = -1 && Error + THROW + + FINALLY + DO CASE + CASE lnTipoComp = 1 + FCLOSE( lnHandle1 ) + FCLOSE( lnHandle2 ) + + ENDCASE + + ENDTRY + + RETURN lnComparacion + ENDFUNC + + FUNCTION FilenameFoundInFilter *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) @@ -2357,6 +2437,30 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDPROC + ******************************************************************************************************************* + PROCEDURE RenameTmpFile2Tx2File + LPARAMETERS tcFileName + + LOCAL lcTmpFile, loFSO AS Scripting.FileSystemObject, loEx as Exception + + TRY + *loFSO = THIS.o_FSO + lcTmpFile = tcFileName + '.TMP' + THIS.ChangeFileAttribute( tcFileName, '+N' ) + ERASE (tcFileName) + RENAME (lcTmpFile) TO (tcFileName) + + CATCH TO loEx + THROW + + FINALLY + *loFSO = NULL + ENDTRY + + RETURN + ENDPROC + + ******************************************************************************************************************* PROCEDURE writeErrorLog LPARAMETERS tcText @@ -11482,20 +11586,20 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg FWRITE( toFoxBin2Prg.n_FileHandle, C_FB2PRG_CODE ) loTable.toText( ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, .c_InputFile, lc_FileTypeDesc, @toFoxBin2Prg ) FCLOSE( toFoxBin2Prg.n_FileHandle ) - *fdb* + - *-- Genero el DB2 + *-- Genero el DB2, renombrando el TMP IF .l_Test toModulo = C_FB2PRG_CODE ELSE - lnLen = 1 &&LEN( toFoxBin2Prg.get_PROGRAM_HEADER() ) DO CASE - CASE FILE(.c_OutputFile) AND SUBSTR( FILETOSTR( .c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) + CASE FILE(.c_OutputFile) AND toFoxBin2Prg.FilesComparedAreEqual( .c_OutputFile + '.TMP', .c_OutputFile ) = 1 + ERASE (.c_OutputFile + '.TMP') *.writeLog( 'El archivo de salida [' + .c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) .writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; AND toFoxBin2Prg.ChangeFileAttribute( .c_OutputFile, '-R' ) ; - AND STRTOFILE( C_FB2PRG_CODE, .c_OutputFile ) = 0 + AND NOT toFoxBin2Prg.RenameTmpFile2Tx2File( .c_OutputFile ) *ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly' ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) ENDCASE From a299d356451c132c883fb4b3fc7f4dd6b70f3371 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 20 Nov 2014 19:39:46 +0100 Subject: [PATCH 3/4] =?UTF-8?q?Changeset:=20495=20fdbozzo=20-=2020/11/2014?= =?UTF-8?q?=2019:37:38:=20-=20Correcci=C3=B3n=20cr=C3=A9ditos=20y=20agrade?= =?UTF-8?q?cimientos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index dea3142..c1b9fc4 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -107,7 +107,7 @@ * 19/09/2014 FDBOZZO v1.19.34 Arreglo bug: Si se ejecuta FoxBin2Prg desde ventana de comandos FoxPro para un proyecto y hay algún archivo abierto o cacheado, se produce un error al intentar capitalizar el archivo de entrada (Jim Nelson) * 26/09/2014 FDBOZZO v1.19.35 Mejora: Generar siempre el mismo Timestamp y UniqueID para los binarios minimizaría los cambios al regenerarlos (Marcio Gomez G.) * 08/10/2014 FDBOZZO v1.19.36 Arreglo bug: Al generar el mn2 el identificador queda vacío (bug introducido en v1.19.35) -* 19/11/2014 FDBOZZO v1.19.37 Arreglo bug: String is too long to fit (edyshor) +* 19/11/2014 FDBOZZO v1.19.37 Arreglo bug: "String is too long to fit" cuando se procesa un DBF grande con DBF_Conversion_Support = 4 (edyshor) * * *--------------------------------------------------------------------------------------------------- @@ -154,7 +154,7 @@ * 28/08/2014 Peter Hipp REPORTE BUG mnx v1.19.32: Si una opción tiene asociado un Procedure de 1 línea, no se mantiene como Procedure y se convierte a Command (solucionado en v1.19.33) * 19/09/2014 Jim Nelson REPORTE BUG v1.19.33: Si se ejecuta FoxBin2Prg desde ventana de comandos FoxPro para un proyecto y hay algún archivo abierto o cacheado, se produce un error (solucionado en v1.19.34) * 26/09/2014 Marcio Gomez G. MEJORA v1.19.34: Generar siempre el mismo Timestamp y UniqueID para los binarios minimizaría los cambios al regenerarlos (Agregado en v1.19.35) -* 19/11/2014 edyshor REPORTE BUG dbf v1.19.36: +* 19/11/2014 edyshor REPORTE BUG dbf v1.19.36: "String is too long to fit" cuando se procesa un DBF grande con DBF_Conversion_Support = 4 (Agregado en v1.19.37) * * *--------------------------------------------------------------------------------------------------- From 3db9453ad152345d1c369ccee697beb879e71752 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 20 Nov 2014 21:22:13 +0100 Subject: [PATCH 4/4] =?UTF-8?q?Changeset:=20496=20fdbozzo=20-=2020/11/2014?= =?UTF-8?q?=2019:39:47:=20-=20Nuevo=20par=C3=A1metro=20ClearDBFLastUpdate?= =?UTF-8?q?=20para=20evitar=20diferencias=20por=20este=20dato=20(edyshor)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index c1b9fc4..1ac51d0 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -108,6 +108,7 @@ * 26/09/2014 FDBOZZO v1.19.35 Mejora: Generar siempre el mismo Timestamp y UniqueID para los binarios minimizaría los cambios al regenerarlos (Marcio Gomez G.) * 08/10/2014 FDBOZZO v1.19.36 Arreglo bug: Al generar el mn2 el identificador queda vacío (bug introducido en v1.19.35) * 19/11/2014 FDBOZZO v1.19.37 Arreglo bug: "String is too long to fit" cuando se procesa un DBF grande con DBF_Conversion_Support = 4 (edyshor) +* 19/11/2014 FDBOZZO v1.19.37 Mejora dbf: Nuevo parámetro ClearDBFLastUpdate para evitar diferencias por este dato (edyshor) * * *--------------------------------------------------------------------------------------------------- @@ -155,6 +156,7 @@ * 19/09/2014 Jim Nelson REPORTE BUG v1.19.33: Si se ejecuta FoxBin2Prg desde ventana de comandos FoxPro para un proyecto y hay algún archivo abierto o cacheado, se produce un error (solucionado en v1.19.34) * 26/09/2014 Marcio Gomez G. MEJORA v1.19.34: Generar siempre el mismo Timestamp y UniqueID para los binarios minimizaría los cambios al regenerarlos (Agregado en v1.19.35) * 19/11/2014 edyshor REPORTE BUG dbf v1.19.36: "String is too long to fit" cuando se procesa un DBF grande con DBF_Conversion_Support = 4 (Agregado en v1.19.37) +* 19/11/2014 edyshor MEJORA dbf v1.19.36: Nuevo parámetro ClearDBFLastUpdate para evitar diferencias por este dato (Agregado en v1.19.37) * * *--------------------------------------------------------------------------------------------------- @@ -515,6 +517,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -594,6 +597,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM l_Recompile = .T. l_NoTimestamps = .T. l_ClearUniqueID = .T. + l_ClearDBFLastUpdate = .T. l_OptimizeByFilestamp = .F. l_MethodSort_Enabled = .T. && Para Unit Testing se puede cambiar a .F. para buscar diferencias l_PropSort_Enabled = .T. && Para Unit Testing se puede cambiar a .F. para buscar diferencias @@ -744,6 +748,15 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDPROC + PROCEDURE l_ClearDBFLastUpdate_ACCESS + IF THIS.n_CFG_Actual = 0 OR ISNULL( THIS.o_Configuration( THIS.n_CFG_Actual ) ) + RETURN THIS.l_ClearDBFLastUpdate + ELSE + RETURN NVL( THIS.o_Configuration( THIS.n_CFG_Actual ).l_ClearDBFLastUpdate, THIS.l_ClearDBFLastUpdate ) + ENDIF + ENDPROC + + PROCEDURE l_OptimizeByFilestamp_ACCESS IF THIS.n_CFG_Actual = 0 OR ISNULL( THIS.o_Configuration( THIS.n_CFG_Actual ) ) RETURN THIS.l_OptimizeByFilestamp @@ -1250,6 +1263,13 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .writeLog( JUSTFNAME(lcConfigFile) + ' > ClearUniqueID: ' + TRANSFORM(lcValue) ) ENDIF + CASE LEFT( laConfig(I), 19 ) == LOWER('ClearDBFLastUpdate:') + lcValue = ALLTRIM( SUBSTR( laConfig(I), 20 ) ) + IF INLIST( lcValue, '0', '1' ) THEN + lo_CFG.l_ClearDBFLastUpdate = ( TRANSFORM(lcValue) == '1' ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > ClearDBFLastUpdate: ' + TRANSFORM(lcValue) ) + ENDIF + CASE LEFT( laConfig(I), 20 ) == LOWER('OptimizeByFilestamp:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 21 ) ) IF NOT INLIST( TRANSFORM(tcOptimizeByFilestamp), '0', '1' ) AND INLIST( lcValue, '0', '1' ) THEN @@ -7947,7 +7967,12 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin USE IN (SELECT(JUSTSTEM(.c_OutputFile))) *-- La actualización de la fecha sirve para evitar diferencias al regenerar el DBF - ldLastUpdate = EVALUATE( '{^' + toTable._LastUpdate + '}' ) + IF toFoxBin2Prg.l_ClearDBFLastUpdate THEN + ldLastUpdate = EVALUATE( '{^2013/11/04}' ) + ELSE + ldLastUpdate = EVALUATE( '{^' + toTable._LastUpdate + '}' ) + ENDIF + loDBFUtils.write_DBC_BackLink( .c_OutputFile, toTable._Database, ldLastUpdate ) ENDWITH && THIS @@ -16374,7 +16399,7 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE <> <<>> <> <<>> <> - <<>> <> + <<>> <> <<>> <> <<>> <> <<>> <> @@ -20149,6 +20174,7 @@ DEFINE CLASS CL_CFG AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -20187,6 +20213,7 @@ DEFINE CLASS CL_CFG AS CUSTOM l_Recompile = NULL l_NoTimestamps = NULL l_ClearUniqueID = NULL + l_ClearDBFLastUpdate = NULL l_OptimizeByFilestamp = NULL n_ExtraBackupLevels = NULL c_VC2 = NULL