diff --git a/TESTS/DATOS_READONLY/fb2p_dbc.dbc b/TESTS/DATOS_READONLY/fb2p_dbc.dbc index 48ab70e..a4601f4 100644 Binary files a/TESTS/DATOS_READONLY/fb2p_dbc.dbc and b/TESTS/DATOS_READONLY/fb2p_dbc.dbc differ diff --git a/TESTS/DATOS_READONLY/fb2p_dbc.dct b/TESTS/DATOS_READONLY/fb2p_dbc.dct index c97a1e3..fb6793d 100644 Binary files a/TESTS/DATOS_READONLY/fb2p_dbc.dct and b/TESTS/DATOS_READONLY/fb2p_dbc.dct differ diff --git a/TESTS/DATOS_READONLY/fb2p_dbc.dcx b/TESTS/DATOS_READONLY/fb2p_dbc.dcx index 7656b25..2580acb 100644 Binary files a/TESTS/DATOS_READONLY/fb2p_dbc.dcx and b/TESTS/DATOS_READONLY/fb2p_dbc.dcx differ diff --git a/TESTS/DATOS_READONLY/fb2p_dbf.fpt b/TESTS/DATOS_READONLY/fb2p_dbf.fpt new file mode 100644 index 0000000..601fa8d Binary files /dev/null and b/TESTS/DATOS_READONLY/fb2p_dbf.fpt differ diff --git a/TESTS/DATOS_READONLY/fb2p_depto.cdx b/TESTS/DATOS_READONLY/fb2p_depto.cdx new file mode 100644 index 0000000..49e7ef2 Binary files /dev/null and b/TESTS/DATOS_READONLY/fb2p_depto.cdx differ diff --git a/TESTS/DATOS_READONLY/fb2p_depto.dbf b/TESTS/DATOS_READONLY/fb2p_depto.dbf new file mode 100644 index 0000000..d946bdf Binary files /dev/null and b/TESTS/DATOS_READONLY/fb2p_depto.dbf differ diff --git a/foxbin2prg.prg b/foxbin2prg.prg index cbf644f..9ea25c8 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -981,7 +981,7 @@ DEFINE CLASS c_conversor_base AS SESSION ******************************************************************************************************************* PROCEDURE doBackup LPARAMETERS toEx, tlRelanzarError, tcBakFile_1, tcBakFile_2, tcBakFile_3 - + TRY LOCAL lcNext_Bak, lcExt_1, lcExt_2, lcExt_3 STORE '' TO tcBakFile_1, tcBakFile_2, tcBakFile_3 @@ -5064,6 +5064,14 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base + [] ; + [] ; + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -6067,7 +6075,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base LPARAMETERS toReg TRY - LOCAL lc_TAG_REPORTE + LOCAL lc_TAG_REPORTE, loEx as Exception lc_TAG_REPORTE_I = '<' + C_TAG_REPORTE + ' ' lc_TAG_REPORTE_F = '' @@ -6179,7 +6187,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base LPARAMETERS toReg TRY - LOCAL lc_TAG_REPORTE + LOCAL lc_TAG_REPORTE, loEx as Exception lc_TAG_REPORTE_I = '<' + C_TAG_REPORTE + ' ' lc_TAG_REPORTE_F = '' @@ -6291,7 +6299,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base LPARAMETERS toReg TRY - LOCAL lc_TAG_REPORTE + LOCAL lc_TAG_REPORTE, loEx as Exception lc_TAG_REPORTE_I = '<' + C_TAG_REPORTE + ' ' lc_TAG_REPORTE_F = '' @@ -6403,7 +6411,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base PROCEDURE write_DBF_HEADER LPARAMETERS tn_HexFileType, tl_FileHasCDX, tl_FileHasMemo, tl_FileIsDBC, tc_DBC_Name TRY - LOCAL laFields(1,18) + LOCAL laFields(1,18), loEx as Exception *FOR I = 1 TO AFIELDS(laFields) * IF INLIST( laFields(I,2), 'M', 'Q', 'V', 'W' ) @@ -6444,7 +6452,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ******************************************************************************************************************* PROCEDURE write_DBF_FIELDS TRY - LOCAL I, laFields(1,18) + LOCAL I, laFields(1,18), loEx as Exception TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 @@ -6497,7 +6505,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ******************************************************************************************************************* PROCEDURE write_DBF_INDEXES TRY - LOCAL I + LOCAL I, loEx as Exception IF TAGCOUNT() > 0 TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 @@ -6537,6 +6545,380 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDPROC + ******************************************************************************************************************* + PROCEDURE write_DBC_HEADER + TRY + LOCAL I, lcText, lcDBC, loEx as Exception + lcText = '' + lcDBC = JUSTSTEM(DBC()) + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + + + *----------------------------------------------------------------------------------- + *-- DATABASE INFO + *----------------------------------------------------------------------------------- + ENDTEXT + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + + ENDTEXT + + C_FB2PRG_CODE = C_FB2PRG_CODE + lcText + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + ENDTRY + + RETURN + ENDPROC + + + ******************************************************************************************************************* + PROCEDURE write_DBC_CONNECTIONS + LPARAMETERS taConnections, tnConnection_Count + + EXTERNAL ARRAY taConnections + + TRY + LOCAL I, lcText, lcDBC, loEx as Exception + lcText = '' + lcDBC = JUSTSTEM(DBC()) + + DIMENSION taConnections(1) + tnConnection_Count = ADBOBJECTS( taConnections,"CONNECTION" ) + ASORT( taConnections, 1, -1, 0, 1 ) + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + + + *----------------------------------------------------------------------------------- + *-- CONNECTIONS INFO + *----------------------------------------------------------------------------------- + ENDTEXT + + FOR I = 1 TO tnConnection_Count + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + + ENDTEXT + ENDFOR + + C_FB2PRG_CODE = C_FB2PRG_CODE + lcText + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + ENDTRY + + RETURN + ENDPROC + + + ******************************************************************************************************************* + PROCEDURE write_DBC_TABLES + LPARAMETERS taTables, tnTable_Count + + EXTERNAL ARRAY taTables + + TRY + LOCAL I, X, lcText, lcDBC, lnField_Count, laFields(1), loEx as Exception + STORE 0 TO I, X, tnTable_Count, lnField_Count + lcText = '' + lcDBC = JUSTSTEM(DBC()) + + DIMENSION taTables(1) + tnTable_Count = ADBOBJECTS( taTables,"TABLE" ) + ASORT( taTables, 1, -1, 0, 1 ) + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + + + *----------------------------------------------------------------------------------- + *-- TABLES INFO + *----------------------------------------------------------------------------------- + ENDTEXT + + FOR I = 1 TO tnTable_Count + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + ENDTEXT + + _TALLY = 0 + SELECT LOWER(TB.objectname) FROM TABLABIN TB ; + INNER JOIN TABLABIN TB2 ON STR(TB.parentid)+PADR('Table',10) = STR(TB2.objectid)+TB2.objecttype ; + WHERE STR(TB2.parentid)+TB2.objecttype+TB2.objectname = STR(1)+PADR('Table',10)+PADR(LOWER(taTables(I)),128) ; + INTO ARRAY laFields + lnField_Count = _TALLY + + IF lnField_Count > 0 + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> *-- FIELDS + <<>> + ENDTEXT + + FOR X = 1 TO lnField_Count + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <> + <<>> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + ENDTEXT + ENDFOR + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + ENDTEXT + ENDIF + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 +
<>
+ ENDTEXT + ENDFOR + + C_FB2PRG_CODE = C_FB2PRG_CODE + lcText + + CATCH TO loEx + IF BETWEEN(I, 1, tnTable_Count) + loEx.UserValue = loEx.UserValue + CR_LF + "taTables(" + TRANSFORM(I) + ") = " + RTRIM(taTables(I)) + ENDIF + IF BETWEEN(X, 1, lnField_Count) + loEx.UserValue = loEx.UserValue + CR_LF + "laFields(" + TRANSFORM(X) + ") = " + RTRIM(laFields(I)) + ENDIF + + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + FINALLY + USE IN (SELECT("TB")) + USE IN (SELECT("TB2")) + ENDTRY + + RETURN + ENDPROC + + + ******************************************************************************************************************* + PROCEDURE write_DBC_VIEWS + LPARAMETERS taViews, tnView_Count + + EXTERNAL ARRAY taViews + + TRY + LOCAL I, lcText, lcDBC, lnField_Count, laFields(1), loEx as Exception + STORE 0 TO I, X, tnView_Count, lnField_Count + lcText = '' + lcDBC = JUSTSTEM(DBC()) + + DIMENSION taViews(1) + tnView_Count = ADBOBJECTS( taViews,"VIEW" ) + ASORT( taViews, 1, -1, 0, 1 ) + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + + + *----------------------------------------------------------------------------------- + *-- VIEWS INFO + *----------------------------------------------------------------------------------- + ENDTEXT + + FOR I = 1 TO tnView_Count + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + ENDTEXT + + _TALLY = 0 + SELECT LOWER(TB.objectname) FROM TABLABIN TB ; + INNER JOIN TABLABIN TB2 ON STR(TB.parentid)+PADR('View',10) = STR(TB2.objectid)+TB2.objecttype ; + WHERE STR(TB2.parentid)+TB2.objecttype+TB2.objectname = STR(1)+PADR('View',10)+PADR(LOWER(taViews(I)),128) ; + INTO ARRAY laFields + lnField_Count = _TALLY + + IF lnField_Count > 0 + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> *-- FIELDS + <<>> + ENDTEXT + + FOR X = 1 TO lnField_Count + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + ENDTEXT + ENDFOR + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + ENDTEXT + ENDIF + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + + ENDTEXT + ENDFOR + + C_FB2PRG_CODE = C_FB2PRG_CODE + lcText + + CATCH TO loEx + IF BETWEEN(I, 1, tnTable_Count) + loEx.UserValue = loEx.UserValue + CR_LF + "taViews(" + TRANSFORM(I) + ") = " + RTRIM(taViews(I)) + ENDIF + IF BETWEEN(X, 1, lnField_Count) + loEx.UserValue = loEx.UserValue + CR_LF + "laFields(" + TRANSFORM(X) + ") = " + RTRIM(laFields(I)) + ENDIF + + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + ENDTRY + + RETURN + ENDPROC + + + ******************************************************************************************************************* + PROCEDURE write_DBC_RELATIONS + LPARAMETERS taRelations, tnRelation_Count + + EXTERNAL ARRAY taRelations + + TRY + LOCAL I, lcText, lcDBC, loEx as Exception + lcText = '' + lcDBC = JUSTSTEM(DBC()) + + DIMENSION taRelations(1,5) + tnRelation_Count = ADBOBJECTS( taRelations,"RELATION" ) + ASORT( taRelations, 2, -1, 0, 1 ) + ASORT( taRelations, 1, -1, 0, 1 ) + + FOR I = 1 TO tnRelation_Count + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + + + *----------------------------------------------------------------------------------- + *-- RELATIONS INFO (REF.INTEGRITY: "C"=cascade, "R"=restrict, "I"=ignore) + *----------------------------------------------------------------------------------- + <<>> + ENDTEXT + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2+8 + + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + + ENDTEXT + ENDFOR + + C_FB2PRG_CODE = C_FB2PRG_CODE + lcText + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + ENDTRY + + RETURN + ENDPROC + + ******************************************************************************************************************* PROCEDURE write_DefinicionObjetosOLE *-- Crea la definición del tag *< OLE: /> con la información de todos los objetos OLE @@ -7408,15 +7790,6 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg *-- Indexes THIS.write_DBF_INDEXES() - USE IN (SELECT("TABLABIN")) - - FOR I = 1 TO ADATABASES(laDatabases2) - IF ASCAN( laDatabases, laDatabases2(I) ) = 0 - SET DATABASE TO (laDatabases2(I)) - CLOSE DATABASES - EXIT - ENDIF - ENDFOR *-- Genero el DB2 IF THIS.l_Test @@ -7438,6 +7811,15 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg FINALLY USE IN (SELECT("TABLABIN")) + *-- Cierro DBC + FOR I = 1 TO ADATABASES(laDatabases2) + IF ASCAN( laDatabases, laDatabases2(I) ) = 0 + SET DATABASE TO (laDatabases2(I)) + CLOSE DATABASES + EXIT + ENDIF + ENDFOR + ENDTRY RETURN @@ -7468,29 +7850,27 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg lnDatabases_Count = ADATABASES(laDatabases) THIS.getDBFmetadata( THIS.c_InputFile, @ln_HexFileType, @ll_FileHasCDX, @ll_FileHasMemo, @ll_FileIsDBC, @lc_DBC_Name ) USE (THIS.c_InputFile) SHARED NOUPDATE ALIAS TABLABIN + OPEN DATABASE (THIS.c_InputFile) SHARED NOUPDATE THIS.write_PROGRAM_HEADER() *-- Header - THIS.write_DBF_HEADER( ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name ) + THIS.write_DBC_HEADER() - *-- Fields - THIS.write_DBF_FIELDS() + *-- Connections + THIS.write_DBC_CONNECTIONS() - *-- Indexes - THIS.write_DBF_INDEXES() + *-- Tables + THIS.write_DBC_TABLES() - USE IN (SELECT("TABLABIN")) + *-- Views + THIS.write_DBC_VIEWS() - FOR I = 1 TO ADATABASES(laDatabases2) - IF ASCAN( laDatabases, laDatabases2(I) ) = 0 - SET DATABASE TO (laDatabases2(I)) - CLOSE DATABASES - EXIT - ENDIF - ENDFOR + *-- Relations + THIS.write_DBC_RELATIONS() - *-- Genero el DB2 + + *-- Genero el DC2 IF THIS.l_Test toModulo = C_FB2PRG_CODE ELSE @@ -7509,6 +7889,7 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg FINALLY USE IN (SELECT("TABLABIN")) + CLOSE DATABASES ENDTRY @@ -8088,8 +8469,8 @@ DEFINE CLASS CL_PROJECT AS COLLECTION ENDIF &lcAsignacion. ENDPROC - - + + ************************************************************************************************ PROCEDURE parseNullTerminatedValue LPARAMETERS tcDevInfo, tnPos, tnLen