BugFix: Converting DBFs on simulated run
If .l_ProcessFiles was true, conversion of DBF's failed Additional some minor improvements on german translation
This commit is contained in:
336
foxbin2prg.prg
336
foxbin2prg.prg
@@ -225,6 +225,9 @@
|
|||||||
* 01/04/2020 DH v1.19.51 Bug Fix: Manejo de AutoIncrement incompatible con Project Explorer (Dan Lauer)
|
* 01/04/2020 DH v1.19.51 Bug Fix: Manejo de AutoIncrement incompatible con Project Explorer (Dan Lauer)
|
||||||
* 01/04/2020 FDBOZZO v1.19.51 Bug Fix: La conversión de tablas falla si algún campo contiene una palabra reservada como UNIQUE (DAJU78)
|
* 01/04/2020 FDBOZZO v1.19.51 Bug Fix: La conversión de tablas falla si algún campo contiene una palabra reservada como UNIQUE (DAJU78)
|
||||||
* 01/04/2020 FDBOZZO v1.19.51 Bug Fix: No se respetan las propiedades de VCX/SCX con nombre "note" (Tracy Pearson)
|
* 01/04/2020 FDBOZZO v1.19.51 Bug Fix: No se respetan las propiedades de VCX/SCX con nombre "note" (Tracy Pearson)
|
||||||
|
|
||||||
|
* 14/02/21 Lutz Scheffler conversion dbf -> prg, error if only test mode (toFoxBin2Prg.l_ProcessFiles is false)
|
||||||
|
* minor translations
|
||||||
* </HISTORIAL DE CAMBIOS Y NOTAS IMPORTANTES>
|
* </HISTORIAL DE CAMBIOS Y NOTAS IMPORTANTES>
|
||||||
*
|
*
|
||||||
*---------------------------------------------------------------------------------------------------
|
*---------------------------------------------------------------------------------------------------
|
||||||
@@ -852,7 +855,7 @@ DEFINE CLASS c_foxbin2prg AS Session
|
|||||||
l_RemoveNullCharsFromCode = .T.
|
l_RemoveNullCharsFromCode = .T.
|
||||||
l_RemoveZOrderSetFromProps = .F.
|
l_RemoveZOrderSetFromProps = .F.
|
||||||
l_Recompile = .T.
|
l_Recompile = .T.
|
||||||
n_UseClassPerFile = 0
|
n_UseClassPerFile = 0
|
||||||
n_PRG_Compat_Level = 0 && 0=COMPATIBLE WITH FoxBin2Prg v1.19.49 and earlier, 1=Include HELPSTRING
|
n_PRG_Compat_Level = 0 && 0=COMPATIBLE WITH FoxBin2Prg v1.19.49 and earlier, 1=Include HELPSTRING
|
||||||
n_ExcludeDBFAutoincNextval = 0
|
n_ExcludeDBFAutoincNextval = 0
|
||||||
l_ClassPerFileCheck = .F.
|
l_ClassPerFileCheck = .F.
|
||||||
@@ -2137,6 +2140,7 @@ DEFINE CLASS c_foxbin2prg AS Session
|
|||||||
ELSE
|
ELSE
|
||||||
.writeLog( '> ' + UPPER(loLang.C_CACHING_CONFIG_FOR_DIRECTORY_LOC) + ': ' + lc_CFG_Path )
|
.writeLog( '> ' + UPPER(loLang.C_CACHING_CONFIG_FOR_DIRECTORY_LOC) + ': ' + lc_CFG_Path )
|
||||||
lo_CFG = CREATEOBJECT('CL_CFG')
|
lo_CFG = CREATEOBJECT('CL_CFG')
|
||||||
|
|
||||||
lo_Configuration.Add( lo_CFG, lc_CFG_Path )
|
lo_Configuration.Add( lo_CFG, lc_CFG_Path )
|
||||||
.n_CFG_Actual = lo_Configuration.Count
|
.n_CFG_Actual = lo_Configuration.Count
|
||||||
|
|
||||||
@@ -13022,7 +13026,6 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin
|
|||||||
ENDDEFINE && CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin
|
ENDDEFINE && CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin
|
DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin
|
||||||
#IF .F.
|
#IF .F.
|
||||||
LOCAL THIS AS c_conversor_prg_a_dbc OF 'FOXBIN2PRG.PRG'
|
LOCAL THIS AS c_conversor_prg_a_dbc OF 'FOXBIN2PRG.PRG'
|
||||||
@@ -17482,183 +17485,212 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg
|
|||||||
#ENDIF
|
#ENDIF
|
||||||
DODEFAULT( @toModulo, @toEx, @toFoxBin2Prg )
|
DODEFAULT( @toModulo, @toEx, @toFoxBin2Prg )
|
||||||
|
|
||||||
TRY
|
*!* Changed by: Lutz Scheffler 11.2.2021
|
||||||
WITH THIS AS c_conversor_dbf_a_prg OF 'FOXBIN2PRG.PRG'
|
*!* change date="{^2021-02-11,08:50:00}"
|
||||||
IF NOT toFoxBin2Prg.l_ProcessFiles THEN
|
* If toFoxBin2Prg.l_ProcessFiles is not true
|
||||||
.write_OutputFile( '', .c_OutputFile, @toFoxBin2Prg )
|
* and the try block was exited
|
||||||
EXIT && Si se indicó no procesar, se sale aquí. (Modo de simulación)
|
* the stuff below was never instatiated
|
||||||
ENDIF
|
|
||||||
|
|
||||||
LOCAL lnCodError, laDatabases(1), lnDatabases_Count, laDatabases2(1) ;
|
*so the whole try / catch block should not run
|
||||||
, lnLen, lc_FileTypeDesc, laLines(1), lcOutputFile ;
|
|
||||||
, ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC ;
|
|
||||||
, lc_DBC_Name, lnDataSessionID, lnSelect, laDirInfo(1,5) ;
|
|
||||||
, llDBCEventsEnabled ;
|
|
||||||
, loTable AS CL_DBF_TABLE OF 'FOXBIN2PRG.PRG' ;
|
|
||||||
, loDBFUtils AS CL_DBF_UTILS OF 'FOXBIN2PRG.PRG' ;
|
|
||||||
, loLang as CL_LANG OF 'FOXBIN2PRG.PRG' ;
|
|
||||||
, loFSO AS Scripting.FileSystemObject ;
|
|
||||||
, loTextStream AS Scripting.TextStream ;
|
|
||||||
, loDBC AS CL_DBC OF 'FOXBIN2PRG.PRG'
|
|
||||||
|
|
||||||
loLang = _SCREEN.o_FoxBin2Prg_Lang
|
IF NOT toFoxBin2Prg.l_ProcessFiles THEN
|
||||||
loFSO = toFoxBin2Prg.o_FSO
|
THIS.write_OutputFile( '', THIS.c_OutputFile, @toFoxBin2Prg )
|
||||||
STORE NULL TO loTable, loDBFUtils
|
ELSE &&NOT toFoxBin2Prg.l_ProcessFiles
|
||||||
STORE 0 TO lnCodError
|
*!* /Changed by: Lutz Scheffler 11.2.2021
|
||||||
loDBFUtils = CREATEOBJECT('CL_DBF_UTILS')
|
|
||||||
loDBC = CREATEOBJECT('CL_DBC')
|
|
||||||
|
|
||||||
*-- EVALUAR OPCIONES ESPECÍFICAS DE DBF
|
TRY
|
||||||
.updateProgressbar( 'Scanning DBF Structure...', 1, 3, 1 )
|
WITH THIS AS c_conversor_dbf_a_prg OF 'FOXBIN2PRG.PRG'
|
||||||
|
*!* Changed by: Lutz Scheffler 11.2.2021
|
||||||
|
*!* change date="{^2021-02-11,08:50:00}"
|
||||||
|
*moved up:
|
||||||
|
* IF NOT toFoxBin2Prg.l_ProcessFiles THEN
|
||||||
|
* .write_OutputFile( '', .c_OutputFile, @toFoxBin2Prg )
|
||||||
|
* EXIT && Si se indicó no procesar, se sale aquí. (Modo de simulación)
|
||||||
|
* ENDIF
|
||||||
|
*!* /Changed by: Lutz Scheffler 11.2.2021
|
||||||
|
|
||||||
*-- Include
|
LOCAL lnCodError, laDatabases(1), lnDatabases_Count, laDatabases2(1) ;
|
||||||
IF NOT EMPTY(toFoxBin2Prg.DBF_Conversion_Included) AND NOT toFoxBin2Prg.DBF_Conversion_Included == '*' ;
|
, lnLen, lc_FileTypeDesc, laLines(1), lcOutputFile ;
|
||||||
AND NOT toFoxBin2Prg.filenameFoundInFilter( JUSTFNAME(.c_InputFile), toFoxBin2Prg.DBF_Conversion_Included )
|
, ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC ;
|
||||||
toFoxBin2Prg.writeLog(' ' + JUSTFNAME(.c_InputFile) + ' no está en el filtro DBF_Conversion_Included (' + toFoxBin2Prg.DBF_Conversion_Included + ')' )
|
, lc_DBC_Name, lnDataSessionID, lnSelect, laDirInfo(1,5) ;
|
||||||
EXIT
|
, llDBCEventsEnabled ;
|
||||||
ENDIF
|
, loTable AS CL_DBF_TABLE OF 'FOXBIN2PRG.PRG' ;
|
||||||
|
, loDBFUtils AS CL_DBF_UTILS OF 'FOXBIN2PRG.PRG' ;
|
||||||
|
, loLang as CL_LANG OF 'FOXBIN2PRG.PRG' ;
|
||||||
|
, loFSO AS Scripting.FileSystemObject ;
|
||||||
|
, loTextStream AS Scripting.TextStream ;
|
||||||
|
, loDBC AS CL_DBC OF 'FOXBIN2PRG.PRG'
|
||||||
|
|
||||||
*-- Exclude
|
loLang = _SCREEN.o_FoxBin2Prg_Lang
|
||||||
IF NOT EMPTY(toFoxBin2Prg.DBF_Conversion_Excluded) ;
|
loFSO = toFoxBin2Prg.o_FSO
|
||||||
AND toFoxBin2Prg.filenameFoundInFilter( JUSTFNAME(.c_InputFile), toFoxBin2Prg.DBF_Conversion_Excluded )
|
STORE NULL TO loTable, loDBFUtils
|
||||||
toFoxBin2Prg.writeLog(' ' + JUSTFNAME(.c_InputFile) + ' está en el filtro DBF_Conversion_Excluded (' + toFoxBin2Prg.DBF_Conversion_Excluded + ')' )
|
STORE 0 TO lnCodError
|
||||||
EXIT
|
loDBFUtils = CREATEOBJECT('CL_DBF_UTILS')
|
||||||
ENDIF
|
loDBC = CREATEOBJECT('CL_DBC')
|
||||||
|
|
||||||
loDBFUtils.getDBFmetadata( .c_InputFile, @ln_HexFileType, @ll_FileHasCDX, @ll_FileHasMemo, @ll_FileIsDBC, @lc_DBC_Name )
|
*-- EVALUAR OPCIONES ESPECÍFICAS DE DBF
|
||||||
lc_FileTypeDesc = loDBFUtils.fileTypeDescription(ln_HexFileType)
|
.updateProgressbar( 'Scanning DBF Structure...', 1, 3, 1 )
|
||||||
lnDatabases_Count = ADATABASES(laDatabases)
|
|
||||||
|
|
||||||
* Si la tabla pertenece a un DBC, desactivar temporalmente los eventos
|
*-- Include
|
||||||
IF NOT EMPTY(lc_DBC_Name) AND ADIR(laDirInfo, FULLPATH(lc_DBC_Name, .c_InputFile)) = 1
|
IF NOT EMPTY(toFoxBin2Prg.DBF_Conversion_Included) AND NOT toFoxBin2Prg.DBF_Conversion_Included == '*' ;
|
||||||
loDBC._DBC = FULLPATH(lc_DBC_Name, .c_InputFile)
|
AND NOT toFoxBin2Prg.filenameFoundInFilter( JUSTFNAME(.c_InputFile), toFoxBin2Prg.DBF_Conversion_Included )
|
||||||
llDBCEventsEnabled = loDBC.DBGETPROP(lc_DBC_Name,"DATABASE","DBCEvents")
|
toFoxBin2Prg.writeLog(' ' + JUSTFNAME(.c_InputFile) + ' no está en el filtro DBF_Conversion_Included (' + toFoxBin2Prg.DBF_Conversion_Included + ')' )
|
||||||
|
EXIT
|
||||||
* llDBCEventsEnabled no siempre devuelve .T./.F., a veces devuelve ""
|
|
||||||
IF EMPTY(llDBCEventsEnabled)
|
|
||||||
llDBCEventsEnabled = .F.
|
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
IF llDBCEventsEnabled
|
*-- Exclude
|
||||||
IF NOT loDBC.DBSETPROP(lc_DBC_Name,"DATABASE","DBCEvents",.F.)
|
IF NOT EMPTY(toFoxBin2Prg.DBF_Conversion_Excluded) ;
|
||||||
|
AND toFoxBin2Prg.filenameFoundInFilter( JUSTFNAME(.c_InputFile), toFoxBin2Prg.DBF_Conversion_Excluded )
|
||||||
|
toFoxBin2Prg.writeLog(' ' + JUSTFNAME(.c_InputFile) + ' está en el filtro DBF_Conversion_Excluded (' + toFoxBin2Prg.DBF_Conversion_Excluded + ')' )
|
||||||
|
EXIT
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
loDBFUtils.getDBFmetadata( .c_InputFile, @ln_HexFileType, @ll_FileHasCDX, @ll_FileHasMemo, @ll_FileIsDBC, @lc_DBC_Name )
|
||||||
|
lc_FileTypeDesc = loDBFUtils.fileTypeDescription(ln_HexFileType)
|
||||||
|
lnDatabases_Count = ADATABASES(laDatabases)
|
||||||
|
|
||||||
|
* Si la tabla pertenece a un DBC, desactivar temporalmente los eventos
|
||||||
|
IF NOT EMPTY(lc_DBC_Name) AND ADIR(laDirInfo, FULLPATH(lc_DBC_Name, .c_InputFile)) = 1
|
||||||
|
loDBC._DBC = FULLPATH(lc_DBC_Name, .c_InputFile)
|
||||||
|
llDBCEventsEnabled = loDBC.DBGETPROP(lc_DBC_Name,"DATABASE","DBCEvents")
|
||||||
|
|
||||||
|
* llDBCEventsEnabled no siempre devuelve .T./.F., a veces devuelve ""
|
||||||
|
IF EMPTY(llDBCEventsEnabled)
|
||||||
llDBCEventsEnabled = .F.
|
llDBCEventsEnabled = .F.
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
|
IF llDBCEventsEnabled
|
||||||
|
IF NOT loDBC.DBSETPROP(lc_DBC_Name,"DATABASE","DBCEvents",.F.)
|
||||||
|
llDBCEventsEnabled = .F.
|
||||||
|
ENDIF
|
||||||
|
ENDIF
|
||||||
ENDIF
|
ENDIF
|
||||||
ENDIF
|
|
||||||
|
|
||||||
USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS TABLABIN
|
USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS TABLABIN
|
||||||
lnDataSessionID = toFoxBin2Prg.DATASESSIONID
|
lnDataSessionID = toFoxBin2Prg.DATASESSIONID
|
||||||
.RestoreDBCEvents(loDBC, @llDBCEventsEnabled)
|
.RestoreDBCEvents(loDBC, @llDBCEventsEnabled)
|
||||||
|
|
||||||
C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER()
|
C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER()
|
||||||
|
|
||||||
*-- Header
|
*-- Header
|
||||||
loTable = CREATEOBJECT('CL_DBF_TABLE')
|
loTable = CREATEOBJECT('CL_DBF_TABLE')
|
||||||
|
|
||||||
*-- Exportación de estructura y datos (para Diff solamente)
|
*-- Exportación de estructura y datos (para Diff solamente)
|
||||||
ERASE (.c_OutputFile + '.TMP' )
|
ERASE (.c_OutputFile + '.TMP' )
|
||||||
loTextStream = loFSO.CreateTextFile(.c_OutputFile + '.TMP' ) && Replace VFP low-level file funcs.because the 8-16KB limit.
|
loTextStream = loFSO.CreateTextFile(.c_OutputFile + '.TMP' ) && Replace VFP low-level file funcs.because the 8-16KB limit.
|
||||||
toFoxBin2Prg.o_TextStream = loTextStream
|
toFoxBin2Prg.o_TextStream = loTextStream
|
||||||
|
|
||||||
IF toFoxBin2Prg.n_FileHandle = -1 THEN
|
IF toFoxBin2Prg.n_FileHandle = -1 THEN
|
||||||
ERROR 102, (.c_OutputFile)
|
ERROR 102, (.c_OutputFile)
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
loTextStream.WriteLine( C_FB2PRG_CODE ) && Replace VFP low-level file funcs.because the 8-16KB limit.
|
loTextStream.WriteLine( C_FB2PRG_CODE ) && Replace VFP low-level file funcs.because the 8-16KB limit.
|
||||||
loTable.toText( ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, .c_InputFile, lc_FileTypeDesc, @toFoxBin2Prg )
|
loTable.toText( ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, .c_InputFile, lc_FileTypeDesc, @toFoxBin2Prg )
|
||||||
loTextStream.Close()
|
loTextStream.Close()
|
||||||
|
|
||||||
|
DO CASE
|
||||||
|
CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I1'
|
||||||
|
ERROR 'InputFile Error Simulation'
|
||||||
|
CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I0'
|
||||||
|
.writeErrorLog( '*** SIMULATED ERROR' )
|
||||||
|
ENDCASE
|
||||||
|
|
||||||
|
IF .l_Error
|
||||||
|
.writeLog( '*** ERRORS found - Generation Cancelled' )
|
||||||
|
EXIT
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
toFoxBin2Prg.updateProcessedFile()
|
||||||
|
|
||||||
|
|
||||||
|
*-- Genero el DB2, renombrando el TMP
|
||||||
|
.updateProgressbar( 'Writing ' + toFoxBin2Prg.c_DB2 + '...', 3, 3, 1 )
|
||||||
|
IF .l_Test
|
||||||
|
toModulo = C_FB2PRG_CODE
|
||||||
|
ELSE
|
||||||
|
DO CASE
|
||||||
|
CASE ADIR(laDirInfo, .c_OutputFile) > 0 AND toFoxBin2Prg.comparedFilesAreEqual( .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.' )
|
||||||
|
lcOutputFile = .c_OutputFile
|
||||||
|
.writeLog( C_TAB + C_TAB + '* ' + TEXTMERGE(loLang.C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) )
|
||||||
|
CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ;
|
||||||
|
AND toFoxBin2Prg.changeFileAttribute( .c_OutputFile + '.TMP', '-R' ) > 0 ;
|
||||||
|
AND NOT toFoxBin2Prg.renameTmpFile2Tx2File( .c_OutputFile )
|
||||||
|
*ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly'
|
||||||
|
ERROR (TEXTMERGE(loLang.C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC))
|
||||||
|
ENDCASE
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
|
||||||
|
*-- Hook para permitir ejecución externa (por ejemplo, para exportar datos)
|
||||||
|
IF NOT EMPTY(toFoxBin2Prg.run_AfterCreate_DB2)
|
||||||
|
lnSelect = SELECT()
|
||||||
|
DO (toFoxBin2Prg.run_AfterCreate_DB2) WITH (lnDataSessionID), (.c_OutputFile), (loTable)
|
||||||
|
SET DATASESSION TO (lnDataSessionID) && Por las dudas externamente se cambie
|
||||||
|
SELECT (lnSelect)
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
ENDWITH && THIS
|
||||||
|
|
||||||
|
|
||||||
|
CATCH TO toEx
|
||||||
|
THIS.set_UserValue(@toEx)
|
||||||
|
|
||||||
DO CASE
|
DO CASE
|
||||||
CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I1'
|
CASE toEx.ERRORNO = 13 && Alias not found
|
||||||
ERROR 'InputFile Error Simulation'
|
toEx.USERVALUE = toEx.USERVALUE + TEXTMERGE(loLang.C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC)
|
||||||
CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I0'
|
|
||||||
.writeErrorLog( '*** SIMULATED ERROR' )
|
*!* CASE toEx.ErrorNo = 1976 && Cannot resolve backlink
|
||||||
|
*!* toEx.UserValue = 'WARNING!!' + CR_LF ;
|
||||||
|
*!* + "MAY BE DATABASE FIELDS DOESN'T" ;
|
||||||
|
*!* + UPPER(JUSTSTEM(THIS.c_InputFile)) + '.field tag keyname)' + CR_LF + CR_LF ;
|
||||||
|
*!* + '¡¡ATENCIÓN!!' + CR_LF ;
|
||||||
|
*!* + 'ASEGÚRESE DE QUE NO ESTÁ USANDO UN ALIAS DE TABLA EN LAS EXPRESIONES DE LOS ÍNDICES!! (ej: index on ' ;
|
||||||
|
*!* + UPPER(JUSTSTEM(THIS.c_InputFile)) + '.campo tag nombreclave)'
|
||||||
|
|
||||||
ENDCASE
|
ENDCASE
|
||||||
|
IF THIS.n_Debug > 0 AND _VFP.STARTMODE = 0
|
||||||
IF .l_Error
|
SET STEP ON
|
||||||
.writeLog( '*** ERRORS found - Generation Cancelled' )
|
|
||||||
EXIT
|
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
toFoxBin2Prg.updateProcessedFile()
|
THROW
|
||||||
|
|
||||||
|
FINALLY
|
||||||
|
USE IN (SELECT("TABLABIN"))
|
||||||
|
THIS.RestoreDBCEvents(loDBC, @llDBCEventsEnabled)
|
||||||
|
|
||||||
*-- Genero el DB2, renombrando el TMP
|
IF VARTYPE(loTextStream) = "O" THEN
|
||||||
.updateProgressbar( 'Writing ' + toFoxBin2Prg.c_DB2 + '...', 3, 3, 1 )
|
loTextStream.Close()
|
||||||
IF .l_Test
|
|
||||||
toModulo = C_FB2PRG_CODE
|
|
||||||
ELSE
|
|
||||||
DO CASE
|
|
||||||
CASE ADIR(laDirInfo, .c_OutputFile) > 0 AND toFoxBin2Prg.comparedFilesAreEqual( .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.' )
|
|
||||||
lcOutputFile = .c_OutputFile
|
|
||||||
.writeLog( C_TAB + C_TAB + '* ' + TEXTMERGE(loLang.C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) )
|
|
||||||
CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ;
|
|
||||||
AND toFoxBin2Prg.changeFileAttribute( .c_OutputFile + '.TMP', '-R' ) > 0 ;
|
|
||||||
AND NOT toFoxBin2Prg.renameTmpFile2Tx2File( .c_OutputFile )
|
|
||||||
*ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly'
|
|
||||||
ERROR (TEXTMERGE(loLang.C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC))
|
|
||||||
ENDCASE
|
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
|
*-- Cierro DBC
|
||||||
|
FOR I = 1 TO ADATABASES(laDatabases2)
|
||||||
|
IF ASCAN( laDatabases, laDatabases2(m.I), 1, 0, 0, 1+2+4 ) = 0
|
||||||
|
SET DATABASE TO (laDatabases2(m.I))
|
||||||
|
CLOSE DATABASES
|
||||||
|
EXIT
|
||||||
|
ENDIF
|
||||||
|
ENDFOR
|
||||||
|
|
||||||
*-- Hook para permitir ejecución externa (por ejemplo, para exportar datos)
|
STORE NULL TO loTable, loDBFUtils, loTextStream, toFoxBin2Prg.o_TextStream
|
||||||
IF NOT EMPTY(toFoxBin2Prg.run_AfterCreate_DB2)
|
*!* Changed by: Lutz Scheffler 11.2.2021
|
||||||
lnSelect = SELECT()
|
*!* change date="{^2021-02-11,08:50:00}"
|
||||||
DO (toFoxBin2Prg.run_AfterCreate_DB2) WITH (lnDataSessionID), (.c_OutputFile), (loTable)
|
* Release different, parts moved outsidef IF .. ENDIF
|
||||||
SET DATASESSION TO (lnDataSessionID) && Por las dudas externamente se cambie
|
RELEASE loTextStream ;
|
||||||
SELECT (lnSelect)
|
, lnCodError, laDatabases, lnDatabases_Count, laDatabases2, lnLen, lc_FileTypeDesc ;
|
||||||
ENDIF
|
, ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, lnDataSessionID, lnSelect ;
|
||||||
|
, loTable, loDBFUtils
|
||||||
|
ENDTRY
|
||||||
|
*!* Changed by: Lutz Scheffler 11.2.2021
|
||||||
|
*!* change date="{^2021-02-11,08:50:00}"
|
||||||
|
* so the whole try / catch block should not run if in simulation
|
||||||
|
|
||||||
ENDWITH && THIS
|
ENDIF &&NOT toFoxBin2Prg.l_ProcessFiles
|
||||||
|
|
||||||
|
* Release from above
|
||||||
CATCH TO toEx
|
RELEASE toModulo, toEx, toFoxBin2Prg, loTextStream ;
|
||||||
THIS.set_UserValue(@toEx)
|
*!* /Changed by: Lutz Scheffler 11.2.2021
|
||||||
|
|
||||||
DO CASE
|
|
||||||
CASE toEx.ERRORNO = 13 && Alias not found
|
|
||||||
toEx.USERVALUE = toEx.USERVALUE + TEXTMERGE(loLang.C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC)
|
|
||||||
|
|
||||||
*!* CASE toEx.ErrorNo = 1976 && Cannot resolve backlink
|
|
||||||
*!* toEx.UserValue = 'WARNING!!' + CR_LF ;
|
|
||||||
*!* + "MAY BE DATABASE FIELDS DOESN'T" ;
|
|
||||||
*!* + UPPER(JUSTSTEM(THIS.c_InputFile)) + '.field tag keyname)' + CR_LF + CR_LF ;
|
|
||||||
*!* + '¡¡ATENCIÓN!!' + CR_LF ;
|
|
||||||
*!* + 'ASEGÚRESE DE QUE NO ESTÁ USANDO UN ALIAS DE TABLA EN LAS EXPRESIONES DE LOS ÍNDICES!! (ej: index on ' ;
|
|
||||||
*!* + UPPER(JUSTSTEM(THIS.c_InputFile)) + '.campo tag nombreclave)'
|
|
||||||
|
|
||||||
ENDCASE
|
|
||||||
IF THIS.n_Debug > 0 AND _VFP.STARTMODE = 0
|
|
||||||
SET STEP ON
|
|
||||||
ENDIF
|
|
||||||
|
|
||||||
THROW
|
|
||||||
|
|
||||||
FINALLY
|
|
||||||
USE IN (SELECT("TABLABIN"))
|
|
||||||
THIS.RestoreDBCEvents(loDBC, @llDBCEventsEnabled)
|
|
||||||
|
|
||||||
IF VARTYPE(loTextStream) = "O" THEN
|
|
||||||
loTextStream.Close()
|
|
||||||
ENDIF
|
|
||||||
|
|
||||||
*-- Cierro DBC
|
|
||||||
FOR I = 1 TO ADATABASES(laDatabases2)
|
|
||||||
IF ASCAN( laDatabases, laDatabases2(m.I), 1, 0, 0, 1+2+4 ) = 0
|
|
||||||
SET DATABASE TO (laDatabases2(m.I))
|
|
||||||
CLOSE DATABASES
|
|
||||||
EXIT
|
|
||||||
ENDIF
|
|
||||||
ENDFOR
|
|
||||||
|
|
||||||
STORE NULL TO loTable, loDBFUtils, loTextStream, toFoxBin2Prg.o_TextStream
|
|
||||||
RELEASE toModulo, toEx, toFoxBin2Prg, loTextStream ;
|
|
||||||
, lnCodError, laDatabases, lnDatabases_Count, laDatabases2, lnLen, lc_FileTypeDesc ;
|
|
||||||
, ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, lnDataSessionID, lnSelect ;
|
|
||||||
, loTable, loDBFUtils
|
|
||||||
ENDTRY
|
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
ENDPROC
|
ENDPROC
|
||||||
@@ -17828,9 +17860,9 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg
|
|||||||
*ENDFOR
|
*ENDFOR
|
||||||
*toDatabase = lcCodigo
|
*toDatabase = lcCodigo
|
||||||
ELSE
|
ELSE
|
||||||
|
|
||||||
IF toFoxBin2Prg.n_UseClassPerFile > 0 THEN
|
IF toFoxBin2Prg.n_UseClassPerFile > 0 THEN
|
||||||
.write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg )
|
.write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg )
|
||||||
|
|
||||||
FOR I = 1 TO lnClassCount
|
FOR I = 1 TO lnClassCount
|
||||||
* lcOutputFile = '<path>DBCName' + '.' + 'MemberType' + '.' + 'MemberName' + '.' + 'dc2'
|
* lcOutputFile = '<path>DBCName' + '.' + 'MemberType' + '.' + 'MemberName' + '.' + 'dc2'
|
||||||
lcOutputFile = ADDBS( JUSTPATH( .c_OutputFile ) ) + JUSTSTEM( .c_OutputFile ) + '.' + laClasses(m.I,3) + '.' + laClasses(m.I,1) + '.' + JUSTEXT( .c_OutputFile )
|
lcOutputFile = ADDBS( JUSTPATH( .c_OutputFile ) ) + JUSTSTEM( .c_OutputFile ) + '.' + laClasses(m.I,3) + '.' + laClasses(m.I,1) + '.' + JUSTEXT( .c_OutputFile )
|
||||||
@@ -29067,7 +29099,7 @@ DEFINE CLASS CL_LANG AS Custom
|
|||||||
.C_CACHING_CONFIG_FOR_DIRECTORY_LOC = "Caching Config für Verzeichnis"
|
.C_CACHING_CONFIG_FOR_DIRECTORY_LOC = "Caching Config für Verzeichnis"
|
||||||
.C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC = "Kann Datei [<<THIS.c_OutputFile>>] nicht generieren, da sie schreibgeschützt ist"
|
.C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC = "Kann Datei [<<THIS.c_OutputFile>>] nicht generieren, da sie schreibgeschützt ist"
|
||||||
.C_CLASSPERFILE_OPTIMIZATION_BASE_ALREADY_PROCESSED_LOC = "Optimierung: Grund Datei [<<JUSTFNAME(.c_InputFile)>>] Schon verarbeitet, das Überspringen Verarbeitung der Datei [<<tc_InputFile>>]"
|
.C_CLASSPERFILE_OPTIMIZATION_BASE_ALREADY_PROCESSED_LOC = "Optimierung: Grund Datei [<<JUSTFNAME(.c_InputFile)>>] Schon verarbeitet, das Überspringen Verarbeitung der Datei [<<tc_InputFile>>]"
|
||||||
.C_CONFIGFILE_LOC = "Benutze Konfigurationsdatei:"
|
.C_CONFIGFILE_LOC = "Benutzte Konfigurationsdatei:"
|
||||||
.C_CONVERSION_CANCELLED_BY_USER_LOC = "Konvertierung durch den Benutzer abgebrochen"
|
.C_CONVERSION_CANCELLED_BY_USER_LOC = "Konvertierung durch den Benutzer abgebrochen"
|
||||||
.C_CONVERT_ALL_FILES_IN_A_PROJECT_LOC = "alle Dateien in einem Projekt zu konvertieren"
|
.C_CONVERT_ALL_FILES_IN_A_PROJECT_LOC = "alle Dateien in einem Projekt zu konvertieren"
|
||||||
.C_CONVERT_FOLDER_LOC = "Konvertieren Verzeichnis"
|
.C_CONVERT_FOLDER_LOC = "Konvertieren Verzeichnis"
|
||||||
@@ -29205,7 +29237,7 @@ DEFINE CLASS CL_LANG AS Custom
|
|||||||
.C_PROCESSING_LOC = "Bearbeite Datei"
|
.C_PROCESSING_LOC = "Bearbeite Datei"
|
||||||
.C_PROCESS_PROGRESS_LOC = "Bearbeitungsfortschritt:"
|
.C_PROCESS_PROGRESS_LOC = "Bearbeitungsfortschritt:"
|
||||||
.C_PROPERTY_NAME_NOT_RECOGNIZED_LOC = "Eigenschaft [<<TRANSFORM(tnPropertyID)>>] nicht erkannt."
|
.C_PROPERTY_NAME_NOT_RECOGNIZED_LOC = "Eigenschaft [<<TRANSFORM(tnPropertyID)>>] nicht erkannt."
|
||||||
.C_READING_CFG_VALUES_FROM_DISK_LOC = "LESEWERTE CFG-DATEI AUF DER FESTPLATTE"
|
.C_READING_CFG_VALUES_FROM_DISK_LOC = "Gelesene Werte der CFG-DATEI von der Festplatte"
|
||||||
.C_REPORT_NOT_IN_VFP9_FORMAT_LOC = "Report [<<THIS.c_InputFile>>] ist NICHT in VFP 9 Format! - Bitte zuerst nach VFP 9 konvertieren mit MODIFY REPORT '<<THIS.c_InputFile>>'"
|
.C_REPORT_NOT_IN_VFP9_FORMAT_LOC = "Report [<<THIS.c_InputFile>>] ist NICHT in VFP 9 Format! - Bitte zuerst nach VFP 9 konvertieren mit MODIFY REPORT '<<THIS.c_InputFile>>'"
|
||||||
.C_REQUESTING_CAPITALIZATION_OF_FILE_LOC = "- Forder Großschreibung für Datei [<<tcFileName>>] an"
|
.C_REQUESTING_CAPITALIZATION_OF_FILE_LOC = "- Forder Großschreibung für Datei [<<tcFileName>>] an"
|
||||||
.C_SCANNING_FILE_AND_DIR_INFO_LOC = "Scanne Datei- und Verzeichnisinformationen für"
|
.C_SCANNING_FILE_AND_DIR_INFO_LOC = "Scanne Datei- und Verzeichnisinformationen für"
|
||||||
|
|||||||
Reference in New Issue
Block a user