diff --git a/TESTS/DATOS_READONLY/fb2p_dbc.dbc b/TESTS/DATOS_READONLY/fb2p_dbc.dbc index a4601f4..852a0fa 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 fb6793d..39e2f70 100644 Binary files a/TESTS/DATOS_READONLY/fb2p_dbc.dct and b/TESTS/DATOS_READONLY/fb2p_dbc.dct differ diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index 21b4f44..643d396 100644 Binary files a/foxbin2prg.pjt and b/foxbin2prg.pjt differ diff --git a/foxbin2prg.pjx b/foxbin2prg.pjx index 2434764..73aed1e 100644 Binary files a/foxbin2prg.pjx and b/foxbin2prg.pjx differ diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 396a56f..9b02d75 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -156,6 +156,8 @@ LPARAMETERS tc_InputFile, tcType_na, tcTextName_na, tlGenText_na, tcDontShowErro #DEFINE C_LEN_CDX_F LEN(C_CDX_F) #DEFINE C_LEN_INDEX_I LEN(C_INDEX_I) #DEFINE C_LEN_INDEX_F LEN(C_INDEX_F) +#DEFINE C_DATABASE_I '' +#DEFINE C_DATABASE_F '' #DEFINE C_TABLE_I '' #DEFINE C_TABLE_F '
' #DEFINE C_TABLES_I '' @@ -5308,7 +5310,6 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin ******************************************************************************************************************* PROCEDURE identificarBloquesDeCodigo - LPARAMETERS taCodeLines, tnCodeLines, taBloquesExclusion, tnBloquesExclusion, toTable *-------------------------------------------------------------------------------------------------------------- * taCodeLines (!@ IN ) El array con las líneas del código donde buscar * tnCodeLines (!@ IN ) Cantidad de líneas de código @@ -5316,6 +5317,7 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin * tnBloquesExclusion (?@ IN ) Sin uso * toTable (?@ OUT) Objeto con toda la información de la tabla analizada *-------------------------------------------------------------------------------------------------------------- + LPARAMETERS taCodeLines, tnCodeLines, taBloquesExclusion, tnBloquesExclusion, toTable EXTERNAL ARRAY taCodeLines, taBloquesExclusion #IF .F. @@ -5386,13 +5388,16 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin ******************************************************************************************************************* PROCEDURE Convertir - LPARAMETERS toModulo, toEx AS EXCEPTION - DODEFAULT( @toModulo, @toEx ) + LPARAMETERS toDatabase, toEx AS EXCEPTION + DODEFAULT( @toDatabase, @toEx ) + + #IF .F. + LOCAL toDatabase AS CL_DATABASE OF 'FOXBIN2PRG.PRG' + #ENDIF TRY LOCAL lnCodError, loEx AS EXCEPTION, loReg, lcLine, laCodeLines(1), lnCodeLines, lnFB2P_Version, lcSourceFile ; - , laBloquesExclusion(1,2), lnBloquesExclusion, I ; - , loReport AS CL_REPORT OF 'FOXBIN2PRG.PRG' + , laBloquesExclusion(1,2), lnBloquesExclusion, I STORE 0 TO lnCodError, lnCodeLines, lnFB2P_Version STORE '' TO lcLine, lcSourceFile STORE NULL TO loReg, toModulo @@ -5406,9 +5411,9 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin *THIS.createTable() *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte - THIS.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @loReport ) + THIS.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toDatabase ) - THIS.escribirArchivoBin( @loReport ) + THIS.escribirArchivoBin( @toDatabase ) CATCH TO loEx @@ -5428,62 +5433,102 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin ******************************************************************************************************************* PROCEDURE escribirArchivoBin - LPARAMETERS toReport + LPARAMETERS toDatabase *-- ----------------------------------------------------------------------------------------------------------- #IF .F. - LOCAL toReport AS CL_REPORT OF 'FOXBIN2PRG.PRG' + LOCAL toDatabase AS CL_DATABASE OF 'FOXBIN2PRG.PRG' #ENDIF TRY - LOCAL loReg, I, lcFieldType, lnFieldLen, lnFieldDec, lnNumCampo, laFieldTypes(1,18) ; - , luValor, lnCodError, loEx AS EXCEPTION - SELECT TABLABIN - AFIELDS( laFieldTypes ) + LOCAL loConnection AS CL_DBC_CONNECTION OF 'FOXBIN2PRG.PRG' + LOCAL loTable AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG' + LOCAL loView AS CL_DBC_VIEW OF 'FOXBIN2PRG.PRG' + LOCAL loRelation AS CL_DBC_RELATION OF 'FOXBIN2PRG.PRG' + LOCAL lcCreateTable, lcLongDec, lcFieldDef, lcIndex, ldLastUpdate + + STORE '' TO lcIndex, lcFieldDef - *-- Agrego los registros - FOR EACH loReg IN toReport FOXOBJECT + lcCreateTable = 'CREATE TABLE "' + THIS.c_OutputFile + '" FREE CodePage=' + toTable._CodePage + ' (' - *-- Ajuste de los tipos de dato - FOR I = 1 TO AMEMBERS(laProps, loReg, 0) - lnNumCampo = ASCAN( laFieldTypes, laProps(I), 1, -1, 1, 1+2+4+8 ) + *-- Conformo los campos + EXIT + + toDatabase.DBWriteObjects( THIS.c_OutputFile ) + + FOR EACH loConnection IN toDatabase._Connections FOXOBJECT + lcLongDec = '' - IF lnNumCampo = 0 - ERROR 'No se encontró el campo [' + laProps(I) + '] en la estructura del archivo ' + DBF("TABLABIN") + *-- Nombre, Tipo + lcFieldDef = lcFieldDef + ', ' + loField._Name + ' ' + loField._Type + + *-- Longitud + IF INLIST( loField._Type, 'C', 'N', 'F', 'Q', 'V' ) + lcLongDec = lcLongDec + '(' + loField._Width + ENDIF + + *-- Decimales + IF INLIST( loField._Type, 'B', 'N', 'F' ) AND loField._Decimals > '0' + IF EMPTY(lcLongDec) + lcLongDec = lcLongDec + '(' + ELSE + lcLongDec = lcLongDec + ',' ENDIF + lcLongDec = lcLongDec + loField._Decimals + ENDIF - lcFieldType = laFieldTypes(lnNumCampo,2) - lnFieldLen = laFieldTypes(lnNumCampo,3) - lnFieldDec = laFieldTypes(lnNumCampo,4) - luValor = EVALUATE('loReg.' + laProps(I)) + IF NOT EMPTY(lcLongDec) + lcLongDec = lcLongDec + ')' + ENDIF - DO CASE - CASE INLIST(lcFieldType, 'B') && Double - ADDPROPERTY( loReg, laProps(I), CAST( luValor AS &lcFieldType. (lnFieldPrec) ) ) + lcFieldDef = lcFieldDef + lcLongDec - CASE INLIST(lcFieldType, 'F', 'N', 'Y') && Float, Numeric, Currency - ADDPROPERTY( loReg, laProps(I), CAST( luValor AS &lcFieldType. (lnFieldLen, lnFieldDec) ) ) + *-- Null + lcFieldDef = lcFieldDef + IIF( loField._Null = '.T.', ' NULL', ' NOT NULL' ) - CASE INLIST(lcFieldType, 'W', 'G', 'M', 'Q', 'V', 'C') && Blob, General, Memo, Varbinary, Varchar, Character - ADDPROPERTY( loReg, laProps(I), luValor ) + *-- NoCPTran + IF loField._NoCPTran = '.T.' + lcFieldDef = lcFieldDef + ' NOCPTRAN' + ENDIF - OTHERWISE && Demás tipos - ADDPROPERTY( loReg, laProps(I), CAST( luValor AS &lcFieldType. (lnFieldLen) ) ) + *-- AutoInc + IF loField._AutoInc_NextVal <> '0' + lcFieldDef = lcFieldDef + ' AUTOINC NEXTVAL ' + loField._AutoInc_NextVal + ' STEP ' + loField._AutoInc_Step + ENDIF - ENDCASE - - ENDFOR - - INSERT INTO TABLABIN FROM NAME loReg - loReg = NULL + loField = NULL ENDFOR - USE IN (SELECT("TABLABIN")) + lcCreateTable = lcCreateTable + SUBSTR(lcFieldDef,3) + ')' + *STRTOFILE(lcCreateTable,'CreateTable.txt') + &lcCreateTable. - IF THIS.c_Type = 'FRX' - COMPILE REPORT (THIS.c_OutputFile) - ELSE - COMPILE LABEL (THIS.c_OutputFile) - ENDIF + *-- Regenero los índices + FOR EACH loIndex IN toTable._Indexes FOXOBJECT + lcIndex = 'INDEX ON ' + loIndex._Key + ' TAG ' + loIndex._TagName + + IF loIndex._TagType = 'BINARY' + lcIndex = lcIndex + ' BINARY' + ELSE + lcIndex = lcIndex + ' COLLATE "' + loIndex._Collate + '"' + + IF NOT EMPTY(loIndex._Filter) + lcIndex = lcIndex + ' FOR ' + loIndex._Filter + ENDIF + + lcIndex = lcIndex + ' ' + loIndex._Order + + IF loIndex._TagType <> 'REGULAR' + *-- Si es PRIMARY lo cambio a CANDIDATE y luego lo recodifico + lcIndex = lcIndex + ' ' + STRTRAN( loIndex._TagType, 'PRIMARY', 'CANDIDATE' ) + ENDIF + ENDIF + + *STRTOFILE( lcIndex, 'index_' + loIndex._TagName + '.txt' ) + &lcIndex. + ENDFOR + + + USE IN (SELECT(JUSTSTEM(THIS.c_OutputFile))) CATCH TO loEx @@ -5506,7 +5551,6 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin ******************************************************************************************************************* PROCEDURE identificarBloquesDeCodigo - LPARAMETERS taCodeLines, tnCodeLines, taBloquesExclusion, tnBloquesExclusion, toReport *-------------------------------------------------------------------------------------------------------------- * taCodeLines (!@ IN ) El array con las líneas del código donde buscar * tnCodeLines (!@ IN ) Cantidad de líneas de código @@ -5517,21 +5561,22 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin * NOTA: * Como identificador se usa el nombre de clase o de procedimiento, según corresponda. *-------------------------------------------------------------------------------------------------------------- + LPARAMETERS taCodeLines, tnCodeLines, taBloquesExclusion, tnBloquesExclusion, toDatabase EXTERNAL ARRAY taCodeLines, taBloquesExclusion #IF .F. - LOCAL toReport AS CL_REPORT OF 'FOXBIN2PRG.PRG' + LOCAL toDatabase AS CL_DATABASE OF 'FOXBIN2PRG.PRG' #ENDIF TRY - LOCAL I, lc_Comentario, lcLine, llFoxBin2Prg_Completed + LOCAL I, lc_Comentario, lcLine, llFoxBin2Prg_Completed, llBloqueDatabase_Completed STORE 0 TO I THIS.c_Type = UPPER(JUSTEXT(THIS.c_OutputFile)) IF tnCodeLines > 1 - toReport = NULL - toReport = CREATEOBJECT('CL_REPORT') + toDatabase = NULL + toDatabase = CREATEOBJECT('CL_DATABASE') WITH THIS FOR I = 1 TO tnCodeLines @@ -5542,10 +5587,11 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin ENDIF DO CASE - CASE NOT llFoxBin2Prg_Completed AND .analizarBloque_FoxBin2Prg( toReport, @lcLine, @taCodeLines, @I, tnCodeLines ) + CASE NOT llFoxBin2Prg_Completed AND .analizarBloque_FoxBin2Prg( toDatabase, @lcLine, @taCodeLines, @I, tnCodeLines ) llFoxBin2Prg_Completed = .T. - CASE .analizarBloque_DATABASE( toReport, @lcLine, @taCodeLines, @I, tnCodeLines ) + CASE NOT llBloqueDatabase_Completed AND toDatabase.analizarBloque( @lcLine, @taCodeLines, @I, tnCodeLines ) + llBloqueDatabase_Completed = .T. ENDCASE ENDFOR @@ -5565,369 +5611,6 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin ENDPROC - ************************************************************************************************ - PROCEDURE add_Table - LPARAMETERS tcName - tcName = RTRIM(tcName) - THIS._Tables.ADD( CREATEOBJECT("CL_TABLE"), tcName ) - RETURN THIS._Tables( tcName ) - ENDPROC - - - ******************************************************************************************************************* - PROCEDURE analizarBloque_DATABASE - *------------------------------------------------------ - *-- Analiza el bloque - *------------------------------------------------------ - LPARAMETERS toReport, tcLine, taCodeLines, I, tnCodeLines, toReg, tcPropName - - #IF .F. - LOCAL toReport AS CL_REPORT OF 'FOXBIN2PRG.PRG' - #ENDIF - - TRY - LOCAL llBloqueEncontrado, lcValue, loEx AS EXCEPTION - - IF LEFT(tcLine, 1 + LEN(tcPropName) + 1 + 9) == '<' + tcPropName + '>' + C_DATA_I - llBloqueEncontrado = .T. - - IF C_DATA_F $ tcLine - lcValue = STREXTRACT( tcLine, C_DATA_I, C_DATA_F ) - ADDPROPERTY( toReg, tcPropName, lcValue ) - EXIT - ENDIF - - *-- Tomo la primera parte del valor - lcValue = STREXTRACT( tcLine, C_DATA_I ) - - *-- Recorro las fracciones del valor - FOR I = I + 1 TO tnCodeLines - tcLine = taCodeLines(I) - - IF C_DATA_F $ tcLine && Fin del valor - lcValue = lcValue + CR_LF + STREXTRACT( tcLine, '', C_DATA_F ) - ADDPROPERTY( toReg, tcPropName, lcValue ) - EXIT - - ELSE && Otra fracción del valor - lcValue = lcValue + CR_LF + tcLine - ENDIF - ENDFOR - - ENDIF - - CATCH TO loEx - IF loEx.ERRORNO = 1470 && Incorrect property name. - loEx.USERVALUE = 'PropName=[' + TRANSFORM(tcPropName) + '], Value=[' + TRANSFORM(lcValue) + ']' - ENDIF - - IF THIS.l_Debug AND _VFP.STARTMODE = 0 - SET STEP ON - ENDIF - - THROW - - ENDTRY - - RETURN llBloqueEncontrado - ENDPROC - - - ******************************************************************************************************************* - PROCEDURE analizarBloque_TABLES - *------------------------------------------------------ - *-- Analiza el bloque - *------------------------------------------------------ - LPARAMETERS toReport, tcLine, taCodeLines, I, tnCodeLines, toReg, tcPropName - - #IF .F. - LOCAL toReport AS CL_REPORT OF 'FOXBIN2PRG.PRG' - #ENDIF - - TRY - LOCAL llBloqueEncontrado, lcValue, loEx AS EXCEPTION - - IF LEFT(tcLine, 1 + LEN(tcPropName) + 1 + 9) == '<' + tcPropName + '>' + C_DATA_I - llBloqueEncontrado = .T. - - IF C_DATA_F $ tcLine - lcValue = STREXTRACT( tcLine, C_DATA_I, C_DATA_F ) - ADDPROPERTY( toReg, tcPropName, lcValue ) - EXIT - ENDIF - - *-- Tomo la primera parte del valor - lcValue = STREXTRACT( tcLine, C_DATA_I ) - - *-- Recorro las fracciones del valor - FOR I = I + 1 TO tnCodeLines - tcLine = taCodeLines(I) - - IF C_DATA_F $ tcLine && Fin del valor - lcValue = lcValue + CR_LF + STREXTRACT( tcLine, '', C_DATA_F ) - ADDPROPERTY( toReg, tcPropName, lcValue ) - EXIT - - ELSE && Otra fracción del valor - lcValue = lcValue + CR_LF + tcLine - ENDIF - ENDFOR - - ENDIF - - CATCH TO loEx - IF loEx.ERRORNO = 1470 && Incorrect property name. - loEx.USERVALUE = 'PropName=[' + TRANSFORM(tcPropName) + '], Value=[' + TRANSFORM(lcValue) + ']' - ENDIF - - IF THIS.l_Debug AND _VFP.STARTMODE = 0 - SET STEP ON - ENDIF - - THROW - - ENDTRY - - RETURN llBloqueEncontrado - ENDPROC - - - ******************************************************************************************************************* - PROCEDURE analizarBloque_TABLE_FIELDS - *------------------------------------------------------ - *-- Analiza el bloque - *------------------------------------------------------ - LPARAMETERS toReport, tcLine, taCodeLines, I, tnCodeLines, toReg, tcPropName - - #IF .F. - LOCAL toReport AS CL_REPORT OF 'FOXBIN2PRG.PRG' - #ENDIF - - TRY - LOCAL llBloqueEncontrado, lcValue, loEx AS EXCEPTION - - IF LEFT(tcLine, 1 + LEN(tcPropName) + 1 + 9) == '<' + tcPropName + '>' + C_DATA_I - llBloqueEncontrado = .T. - - IF C_DATA_F $ tcLine - lcValue = STREXTRACT( tcLine, C_DATA_I, C_DATA_F ) - ADDPROPERTY( toReg, tcPropName, lcValue ) - EXIT - ENDIF - - *-- Tomo la primera parte del valor - lcValue = STREXTRACT( tcLine, C_DATA_I ) - - *-- Recorro las fracciones del valor - FOR I = I + 1 TO tnCodeLines - tcLine = taCodeLines(I) - - IF C_DATA_F $ tcLine && Fin del valor - lcValue = lcValue + CR_LF + STREXTRACT( tcLine, '', C_DATA_F ) - ADDPROPERTY( toReg, tcPropName, lcValue ) - EXIT - - ELSE && Otra fracción del valor - lcValue = lcValue + CR_LF + tcLine - ENDIF - ENDFOR - - ENDIF - - CATCH TO loEx - IF loEx.ERRORNO = 1470 && Incorrect property name. - loEx.USERVALUE = 'PropName=[' + TRANSFORM(tcPropName) + '], Value=[' + TRANSFORM(lcValue) + ']' - ENDIF - - IF THIS.l_Debug AND _VFP.STARTMODE = 0 - SET STEP ON - ENDIF - - THROW - - ENDTRY - - RETURN llBloqueEncontrado - ENDPROC - - - ******************************************************************************************************************* - PROCEDURE analizarBloque_VIEWS - *------------------------------------------------------ - *-- Analiza el bloque - *------------------------------------------------------ - LPARAMETERS toReport, tcLine, taCodeLines, I, tnCodeLines, toReg, tcPropName - - #IF .F. - LOCAL toReport AS CL_REPORT OF 'FOXBIN2PRG.PRG' - #ENDIF - - TRY - LOCAL llBloqueEncontrado, lcValue, loEx AS EXCEPTION - - IF LEFT(tcLine, 1 + LEN(tcPropName) + 1 + 9) == '<' + tcPropName + '>' + C_DATA_I - llBloqueEncontrado = .T. - - IF C_DATA_F $ tcLine - lcValue = STREXTRACT( tcLine, C_DATA_I, C_DATA_F ) - ADDPROPERTY( toReg, tcPropName, lcValue ) - EXIT - ENDIF - - *-- Tomo la primera parte del valor - lcValue = STREXTRACT( tcLine, C_DATA_I ) - - *-- Recorro las fracciones del valor - FOR I = I + 1 TO tnCodeLines - tcLine = taCodeLines(I) - - IF C_DATA_F $ tcLine && Fin del valor - lcValue = lcValue + CR_LF + STREXTRACT( tcLine, '', C_DATA_F ) - ADDPROPERTY( toReg, tcPropName, lcValue ) - EXIT - - ELSE && Otra fracción del valor - lcValue = lcValue + CR_LF + tcLine - ENDIF - ENDFOR - - ENDIF - - CATCH TO loEx - IF loEx.ERRORNO = 1470 && Incorrect property name. - loEx.USERVALUE = 'PropName=[' + TRANSFORM(tcPropName) + '], Value=[' + TRANSFORM(lcValue) + ']' - ENDIF - - IF THIS.l_Debug AND _VFP.STARTMODE = 0 - SET STEP ON - ENDIF - - THROW - - ENDTRY - - RETURN llBloqueEncontrado - ENDPROC - - - ******************************************************************************************************************* - PROCEDURE analizarBloque_CONNECTIONS - *------------------------------------------------------ - *-- Analiza el bloque - *------------------------------------------------------ - LPARAMETERS toReport, tcLine, taCodeLines, I, tnCodeLines, toReg, tcPropName - - #IF .F. - LOCAL toReport AS CL_REPORT OF 'FOXBIN2PRG.PRG' - #ENDIF - - TRY - LOCAL llBloqueEncontrado, lcValue, loEx AS EXCEPTION - - IF LEFT(tcLine, 1 + LEN(tcPropName) + 1 + 9) == '<' + tcPropName + '>' + C_DATA_I - llBloqueEncontrado = .T. - - IF C_DATA_F $ tcLine - lcValue = STREXTRACT( tcLine, C_DATA_I, C_DATA_F ) - ADDPROPERTY( toReg, tcPropName, lcValue ) - EXIT - ENDIF - - *-- Tomo la primera parte del valor - lcValue = STREXTRACT( tcLine, C_DATA_I ) - - *-- Recorro las fracciones del valor - FOR I = I + 1 TO tnCodeLines - tcLine = taCodeLines(I) - - IF C_DATA_F $ tcLine && Fin del valor - lcValue = lcValue + CR_LF + STREXTRACT( tcLine, '', C_DATA_F ) - ADDPROPERTY( toReg, tcPropName, lcValue ) - EXIT - - ELSE && Otra fracción del valor - lcValue = lcValue + CR_LF + tcLine - ENDIF - ENDFOR - - ENDIF - - CATCH TO loEx - IF loEx.ERRORNO = 1470 && Incorrect property name. - loEx.USERVALUE = 'PropName=[' + TRANSFORM(tcPropName) + '], Value=[' + TRANSFORM(lcValue) + ']' - ENDIF - - IF THIS.l_Debug AND _VFP.STARTMODE = 0 - SET STEP ON - ENDIF - - THROW - - ENDTRY - - RETURN llBloqueEncontrado - ENDPROC - - - ******************************************************************************************************************* - PROCEDURE analizarBloque_RELATIONS - *------------------------------------------------------ - *-- Analiza el bloque - *------------------------------------------------------ - LPARAMETERS toReport, tcLine, taCodeLines, I, tnCodeLines, toReg, tcPropName - - #IF .F. - LOCAL toReport AS CL_REPORT OF 'FOXBIN2PRG.PRG' - #ENDIF - - TRY - LOCAL llBloqueEncontrado, lcValue, loEx AS EXCEPTION - - IF LEFT(tcLine, 1 + LEN(tcPropName) + 1 + 9) == '<' + tcPropName + '>' + C_DATA_I - llBloqueEncontrado = .T. - - IF C_DATA_F $ tcLine - lcValue = STREXTRACT( tcLine, C_DATA_I, C_DATA_F ) - ADDPROPERTY( toReg, tcPropName, lcValue ) - EXIT - ENDIF - - *-- Tomo la primera parte del valor - lcValue = STREXTRACT( tcLine, C_DATA_I ) - - *-- Recorro las fracciones del valor - FOR I = I + 1 TO tnCodeLines - tcLine = taCodeLines(I) - - IF C_DATA_F $ tcLine && Fin del valor - lcValue = lcValue + CR_LF + STREXTRACT( tcLine, '', C_DATA_F ) - ADDPROPERTY( toReg, tcPropName, lcValue ) - EXIT - - ELSE && Otra fracción del valor - lcValue = lcValue + CR_LF + tcLine - ENDIF - ENDFOR - - ENDIF - - CATCH TO loEx - IF loEx.ERRORNO = 1470 && Incorrect property name. - loEx.USERVALUE = 'PropName=[' + TRANSFORM(tcPropName) + '], Value=[' + TRANSFORM(lcValue) + ']' - ENDIF - - IF THIS.l_Debug AND _VFP.STARTMODE = 0 - SET STEP ON - ENDIF - - THROW - - ENDTRY - - RETURN llBloqueEncontrado - ENDPROC - - ENDDEFINE && CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin @@ -9560,6 +9243,7 @@ DEFINE CLASS CL_DATABASE AS CL_CUS_BASE _MEMBERDATA = [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -9585,7 +9269,7 @@ DEFINE CLASS CL_DATABASE AS CL_CUS_BASE _DBCEvents = .F. _DBCEventFilename = '' - *-- Fields and Indexes + *-- Sub-objects _Connections = NULL _Tables = NULL _Views = NULL @@ -9596,8 +9280,10 @@ DEFINE CLASS CL_DATABASE AS CL_CUS_BASE PROCEDURE INIT DODEFAULT() *-- - THIS._Fields = CREATEOBJECT("CL_DBF_FIELDS") - THIS._Indexes = CREATEOBJECT("CL_DBF_INDEXES") + THIS._Connections = CREATEOBJECT("CL_DBC_CONNECTIONS") + THIS._Tables = CREATEOBJECT("CL_DBC_TABLES") + THIS._Views = CREATEOBJECT("CL_DBC_VIEWS") + THIS._Relations = CREATEOBJECT("CL_DBC_RELATIONS") ENDPROC @@ -9606,12 +9292,14 @@ DEFINE CLASS CL_DATABASE AS CL_CUS_BASE LPARAMETERS tcLine, taCodeLines, I, tnCodeLines TRY - LOCAL loFields AS CL_DBF_FIELDS OF 'FOXBIN2PRG.PRG' - LOCAL loIndexes AS CL_DBF_INDEXES OF 'FOXBIN2PRG.PRG' + LOCAL loConnections AS CL_DBC_CONNECTIONS OF 'FOXBIN2PRG.PRG' + LOCAL loTables AS CL_DBC_TABLES OF 'FOXBIN2PRG.PRG' + LOCAL loViews AS CL_DBC_VIEWS OF 'FOXBIN2PRG.PRG' + LOCAL loRelations AS CL_DBC_RELATIONS OF 'FOXBIN2PRG.PRG' LOCAL llBloqueEncontrado, lcPropName, lcValue, loEx AS EXCEPTION STORE '' TO lcPropName, lcValue - IF LEFT(tcLine, LEN(C_TABLE_I)) == C_TABLE_I + IF LEFT(tcLine, LEN(C_DATABASE_I)) == C_DATABASE_I llBloqueEncontrado = .T. FOR I = I + 1 TO tnCodeLines @@ -9621,16 +9309,24 @@ DEFINE CLASS CL_DATABASE AS CL_CUS_BASE CASE EMPTY( tcLine ) LOOP - CASE C_TABLE_F $ tcLine && Fin + CASE C_DATABASE_F $ tcLine && Fin EXIT - CASE C_FIELDS_I $ tcLine - loFields = THIS._Fields - loFields.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + CASE C_CONNECTIONS_I $ tcLine + loConnections = THIS._Connections + loConnections.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - CASE C_INDEXES_I $ tcLine - loIndexes = THIS._Indexes - loIndexes.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + CASE C_TABLES_I $ tcLine + loTables = THIS._Tables + loTables.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + + CASE C_VIEWS_I $ tcLine + loViews = THIS._Views + loViews.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + + CASE C_RELATIONS_I $ tcLine + loRelations = THIS._Relations + loRelations.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) OTHERWISE && Otro valor *-- Estructura a reconocer: @@ -9659,6 +9355,20 @@ DEFINE CLASS CL_DATABASE AS CL_CUS_BASE ENDPROC + ******************************************************************************************************************* + PROCEDURE DBSETPROP( cName, cType, cProperty, ePropertyValue ) + LPARAMETERS tcLine, taCodeLines, I, tnCodeLines + + ENDPROC + + + ******************************************************************************************************************* + PROCEDURE DBWriteObjects + LPARAMETERS tc_OutputFile + + ENDPROC + + ENDDEFINE @@ -9863,7 +9573,7 @@ DEFINE CLASS CL_DBC_TABLES AS CL_COL_BASE CASE C_TABLE_I $ tcLine loTable = CREATEOBJECT("CL_DBC_TABLE") loTable.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - THIS.ADD( loConnection, loConnection._Name ) + THIS.ADD( loTable, loTable._Name ) OTHERWISE && Otro valor *-- No hay otros valores @@ -9922,6 +9632,17 @@ DEFINE CLASS CL_DBC_TABLE AS CL_CUS_BASE _RuleExpression = '' _RuleText = '' + *-- Sub-objects + _Fields = NULL + + + ************************************************************************************************ + PROCEDURE INIT + DODEFAULT() + *-- + THIS._Fields = CREATEOBJECT("CL_DBC_FIELDS_DB") + ENDPROC + ******************************************************************************************************************* PROCEDURE analizarBloque @@ -9946,7 +9667,7 @@ DEFINE CLASS CL_DBC_TABLE AS CL_CUS_BASE EXIT CASE C_FIELDS_I $ tcLine - loFields = THIS._Fields + loFields = THIS._Fields loFields.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) OTHERWISE && Propiedad de TABLE @@ -10149,7 +9870,7 @@ DEFINE CLASS CL_DBC_VIEWS AS CL_COL_BASE LOCAL llBloqueEncontrado, lcPropName, lcValue, loEx AS EXCEPTION STORE '' TO lcPropName, lcValue - IF LEFT(tcLine, LEN(C_VIEW_I)) == C_VIEW_I + IF LEFT(tcLine, LEN(C_VIEWS_I)) == C_VIEWS_I llBloqueEncontrado = .T. FOR I = I + 1 TO tnCodeLines @@ -10159,13 +9880,13 @@ DEFINE CLASS CL_DBC_VIEWS AS CL_COL_BASE CASE EMPTY( tcLine ) LOOP - CASE C_VIEW_F $ tcLine && Fin + CASE C_VIEWS_F $ tcLine && Fin EXIT CASE C_VIEW_I $ tcLine loView = CREATEOBJECT("CL_DBC_VIEW") loView.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - THIS.ADD( loConnection, loConnection._Name ) + THIS.ADD( loView, loView._Name ) OTHERWISE && Otro valor *-- No hay otros valores @@ -10252,6 +9973,17 @@ DEFINE CLASS CL_DBC_VIEW AS CL_CUS_BASE _UseMemoSize = '' _WhereType = '' + *-- Sub-objects + _Fields = NULL + + + ************************************************************************************************ + PROCEDURE INIT + DODEFAULT() + *-- + THIS._Fields = CREATEOBJECT("CL_DBC_FIELDS_VW") + ENDPROC + ******************************************************************************************************************* PROCEDURE analizarBloque @@ -10504,7 +10236,7 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_COL_BASE CASE C_RELATION_I $ tcLine loRelation = CREATEOBJECT("CL_DBC_RELATION") loRelation.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - THIS.ADD( loField, loField._Name ) + THIS.ADD( loRelation, loRelation._ChildTable + loRelation._ParentTable ) OTHERWISE && Otro valor *-- No hay otros valores @@ -10539,39 +10271,21 @@ DEFINE CLASS CL_DBC_RELATION AS CL_CUS_BASE #ENDIF _MEMBERDATA = [] ; - + [] ; - + [] ; - + [] ; - + [] ; - + [] ; - + [] ; - + [] ; - + [] ; - + [] ; - + [] ; - + [] ; - + [] ; - + [] ; - + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + [] ; + [] *-- Info - _Name = '' - _Caption = '' - _Comment = '' - _DataType = '' - _DefaultValue = '' - _DisplayClass = '' - _DisplayClassLibrary = '' - _Format = '' - _InputMask = '' - _KeyField = '' - _RuleExpression = '' - _RuleText = '' - _Updatable = '' - _UpdateName = '' + _ChildTable = '' + _ParentTable = '' + _ChildIndex = '' + _ParentIndex = '' + _RefIntegrity = '' *******************************************************************************************************************