From a6d1a143c75399514e2afb640498f1d8af86421f Mon Sep 17 00:00:00 2001 From: fernando Date: Fri, 13 Dec 2013 17:36:23 +0100 Subject: [PATCH] Changeset: 83 Desarrollo Ofi (DBC) --- TESTS/DATOS_READONLY/fb2p_dbc.dbc | Bin 6657 -> 6657 bytes TESTS/DATOS_READONLY/fb2p_dbc.dct | Bin 51392 -> 27968 bytes foxbin2prg.pjt | Bin 176451 -> 176451 bytes foxbin2prg.prg | 558 +++++++++++++++++++----------- 4 files changed, 362 insertions(+), 196 deletions(-) diff --git a/TESTS/DATOS_READONLY/fb2p_dbc.dbc b/TESTS/DATOS_READONLY/fb2p_dbc.dbc index 852a0fa8832d7b6f02a8889b95645cffb1096f08..c72c78c6dc236ac7bfec11282bef7b53c88a5fbf 100644 GIT binary patch delta 106 zcmV-w0G0oNG=Ve(Fbxb1u>`jQ0=fXRy#h=D0^k6X3k0JA7yz@d1Z)NYqLUp9qyeUr z!V9DU2(xDl_5lM)LsFAq4w?b0llu;&0kV^z52OLKlSL4u0k)Is5TpUPvyTxL2LZm5 MrWm9Fypu~Awg`YF3;+NC delta 108 zcmV-y0F(cLG=Ve(Fbxb0u>`jQ0>S~ay#h=D0>lB63k0JAnF6!01Z)NYyOSLYqyeXs z!V9F6U;`7gc?{$M10WzElVA>-0j!hz4x|CIlb{cz0kxAw5TpUOlj;zp0lBk}5f%pl O;FG2pqygfSOBuFxFD7LG diff --git a/TESTS/DATOS_READONLY/fb2p_dbc.dct b/TESTS/DATOS_READONLY/fb2p_dbc.dct index 39e2f700166d8bb116bf7abb05059d9a9413080f..078324e3061dcad1353b30351bd34711b24d2ee1 100644 GIT binary patch delta 98 zcmX>wk@>(aMh*rB#;ptt3=SIwKQT^J;1pv7a)g9{1S5k*A{_XeKT93l_>yi6(6Pm delta 1227 zcmb7EOH30{6umP8(=T8H8Wx}?@O$I+v z7sjM{F~r2gg*y`?WDF}~NL;ya;T97Oalu+PsO95*Qw)W;kk_1-bKkw^^!Cl2E-o>P z1IRW7GyknIq2$lm31~waR4AkRpEjZeBk^R6qoO7G2TLMe-v#6ML798~rOM_Jy zw;;w343)r6^*{}rMQw7q!TYJJM~#*DyPiRNkGd(Aj{;t zvyN@DlV8pjHtirnbIZ{YIwF|vfNN~$HcmhXQd1EcWE9B1* z0p#HZ03G=CHqwh2Ltg9xh$9CVf==|_m3iyEJ^H0q*IcGbma&mXt?zvT z7BNsQ%h{xyOy`trUcMUd%*Y8PlUG|^P|DXB`6*+j%JM{Xi7)wfGkMTuhgdXF;%Pw9B@#ce2^&!X&DbN;)6ICn+Qp zA*JR7Wf~9EoZs)qik(IEr}nAGKL-4zQ7YBwwUry#{-=R514HlMX<%P^Gmua2?t)+^ Z_uTi%L-!0q)A=6nNitK(>pXw6=?~QwCp!QD diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index 643d3960c81a0a1f8bdd4fe129b760559b3d10db..dd274b80e7320bd7e69b2a4e74a921487f863cba 100644 GIT binary patch delta 63 zcmX^7i0kkpt_|8ud~W^`PM&^70YUD10bUUk1!XpeGEHK~6mAyeY8T{U+%Cw)WV9Rr DkZBTU delta 63 zcmX^7i0kkpt_|8ud};X=Ntt;@1x4w41z8mn1!XpeGEHK~6mAyeY8T{U+%Cw)WV9Rr D`Y9D> diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 7ed3d4f..8558b58 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -675,7 +675,6 @@ DEFINE CLASS c_conversor_base AS SESSION + [] ; + [] ; + [] ; - + [] ; + [] ; + [] ; + [] ; @@ -1093,48 +1092,6 @@ DEFINE CLASS c_conversor_base AS SESSION ENDPROC - ******************************************************************************************************************* - PROCEDURE fileTypeDescription - *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) - * tn_HexFileType (@? IN ) Tipo de archivo en hexadecimal (Está detallado en la ayuda de Fox) - *--------------------------------------------------------------------------------------------------- - LPARAMETERS tn_HexFileType - LOCAL lcFileType - - DO CASE - CASE tn_HexFileType = 0x02 - lcFileType = 'FoxBASE / dBase II' - CASE tn_HexFileType = 0x03 - lcFileType = 'FoxBASE+ / FoxPro /dBase III PLUS / dBase IV, no memo' - CASE tn_HexFileType = 0x30 - lcFileType = 'Visual FoxPro' - CASE tn_HexFileType = 0x31 - lcFileType = 'Visual FoxPro, autoincrement enabled' - CASE tn_HexFileType = 0x32 - lcFileType = 'Visual FoxPro, Varchar, Varbinary, or Blob-enabled' - CASE tn_HexFileType = 0x43 - lcFileType = 'dBASE IV SQL table files, no memo' - CASE tn_HexFileType = 0x63 - lcFileType = 'dBASE IV SQL system files, no memo' - CASE tn_HexFileType = 0x83 - lcFileType = 'FoxBASE+/dBASE III PLUS, with memo' - CASE tn_HexFileType = 0x8B - lcFileType = 'dBASE IV with memo' - CASE tn_HexFileType = 0xCB - lcFileType = 'dBASE IV SQL table files, with memo' - CASE tn_HexFileType = 0xF5 - lcFileType = 'FoxPro 2.x (or earlier) with memo' - CASE tn_HexFileType = 0xFB - lcFileType = 'FoxBASE (?)' - OTHERWISE - lcFileType = 'Unknown' - ENDCASE - - RETURN lcFileType - ENDPROC - - ******************************************************************************************************************* PROCEDURE fileTypeCode LPARAMETERS tcExtension @@ -5166,9 +5123,6 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin THIS.doBackup( .F., .T. ) - *-- Creo la tabla - *THIS.createTable() - *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte THIS.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toTable ) @@ -5392,7 +5346,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin DODEFAULT( @toDatabase, @toEx ) #IF .F. - LOCAL toDatabase AS CL_DATABASE OF 'FOXBIN2PRG.PRG' + LOCAL toDatabase AS CL_DBC OF 'FOXBIN2PRG.PRG' #ENDIF TRY @@ -5436,7 +5390,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin LPARAMETERS toDatabase *-- ----------------------------------------------------------------------------------------------------------- #IF .F. - LOCAL toDatabase AS CL_DATABASE OF 'FOXBIN2PRG.PRG' + LOCAL toDatabase AS CL_DBC OF 'FOXBIN2PRG.PRG' #ENDIF TRY @@ -5448,87 +5402,12 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin STORE '' TO lcIndex, lcFieldDef - lcCreateTable = 'CREATE TABLE "' + THIS.c_OutputFile + '" FREE CodePage=' + toTable._CodePage + ' (' - *-- Conformo los campos EXIT - toDatabase.DBWriteObjects( THIS.c_OutputFile ) + toDatabase.updateDBC( THIS.c_OutputFile ) - FOR EACH loConnection IN toDatabase._Connections FOXOBJECT - lcLongDec = '' - - *-- 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 - - IF NOT EMPTY(lcLongDec) - lcLongDec = lcLongDec + ')' - ENDIF - - lcFieldDef = lcFieldDef + lcLongDec - - *-- Null - lcFieldDef = lcFieldDef + IIF( loField._Null = '.T.', ' NULL', ' NOT NULL' ) - - *-- NoCPTran - IF loField._NoCPTran = '.T.' - lcFieldDef = lcFieldDef + ' NOCPTRAN' - ENDIF - - *-- AutoInc - IF loField._AutoInc_NextVal <> '0' - lcFieldDef = lcFieldDef + ' AUTOINC NEXTVAL ' + loField._AutoInc_NextVal + ' STEP ' + loField._AutoInc_Step - ENDIF - - loField = NULL - ENDFOR - - lcCreateTable = lcCreateTable + SUBSTR(lcFieldDef,3) + ')' - *STRTOFILE(lcCreateTable,'CreateTable.txt') - &lcCreateTable. - - *-- 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))) + *USE IN (SELECT(JUSTSTEM(THIS.c_OutputFile))) CATCH TO loEx @@ -5556,7 +5435,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin * tnCodeLines (!@ IN ) Cantidad de líneas de código * taBloquesExclusion (?@ IN ) Sin uso * tnBloquesExclusion (?@ IN ) Sin uso - * toReport (?@ OUT) Objeto con toda la información del reporte analizado + * toDatabase (?@ OUT) Objeto con toda la información de la base de datos analizada * * NOTA: * Como identificador se usa el nombre de clase o de procedimiento, según corresponda. @@ -5565,7 +5444,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin EXTERNAL ARRAY taCodeLines, taBloquesExclusion #IF .F. - LOCAL toDatabase AS CL_DATABASE OF 'FOXBIN2PRG.PRG' + LOCAL toDatabase AS CL_DBC OF 'FOXBIN2PRG.PRG' #ENDIF TRY @@ -5576,7 +5455,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin IF tnCodeLines > 1 toDatabase = NULL - toDatabase = CREATEOBJECT('CL_DATABASE') + toDatabase = CREATEOBJECT('CL_DBC') WITH THIS FOR I = 1 TO tnCodeLines @@ -7826,13 +7705,14 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg #IF .F. LOCAL THIS AS c_conversor_dbf_a_prg OF 'FOXBIN2PRG.PRG' #ENDIF - *_MEMBERDATA = [] ; - + [] ; - + [] - ******************************************************************************************************************* PROCEDURE Convertir + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * toModulo (@! OUT) Contenido del texto generado + * toEx (@! OUT) Objeto con información del error + *--------------------------------------------------------------------------------------------------- LPARAMETERS toModulo, toEx AS EXCEPTION DODEFAULT( @toModulo, @toEx ) @@ -7850,7 +7730,7 @@ 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_FB2PRG_CODE = C_FB2PRG_CODE + loTable.toText( ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, THIS.c_InputFile ) *-- Genero el DB2 @@ -7894,20 +7774,24 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg #IF .F. LOCAL THIS AS c_conversor_dbc_a_prg OF 'FOXBIN2PRG.PRG' #ENDIF - *_MEMBERDATA = [] ; - + [] ; - + [] - ******************************************************************************************************************* PROCEDURE Convertir - LPARAMETERS toModulo, toEx AS EXCEPTION - DODEFAULT( @toModulo, @toEx ) + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * toDatabase (@! OUT) Objeto generado de clase CL_DBC con la información leida del texto + * toEx (@! OUT) Objeto con información del error + *--------------------------------------------------------------------------------------------------- + LPARAMETERS toDatabase, toEx AS EXCEPTION + DODEFAULT( @toDatabase, @toEx ) + + #IF .F. + LOCAL toDatabase AS CL_DBC OF 'FOXBIN2PRG.PRG' + #ENDIF TRY LOCAL lnCodError, laDatabases(1), lnDatabases_Count, laDatabases2(1) ; , ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name - LOCAL loDatabase AS CL_DATABASE OF 'FOXBIN2PRG.PRG' STORE 0 TO lnCodError lnDatabases_Count = ADATABASES(laDatabases) @@ -7918,8 +7802,8 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg THIS.write_PROGRAM_HEADER() *-- Header - loDatabase = CREATEOBJECT('CL_DATABASE') - C_FB2PRG_CODE = C_FB2PRG_CODE + loDatabase.toText() + toDatabase = CREATEOBJECT('CL_DBC') + C_FB2PRG_CODE = C_FB2PRG_CODE + toDatabase.toText() *-- Genero el DC2 @@ -7952,19 +7836,20 @@ ENDDEFINE ******************************************************************************************************************* DEFINE CLASS CL_CUS_BASE AS CUSTOM - *-- Propiedades. - HIDDEN BASECLASS, CLASS, TOP, WIDTH, CLASSLIB, CONTROLS, CLASSLIBRARY, COMMENT ; - , CONTROLCOUNT, HEIGHT, HELPCONTEXTID, LEFT, NAME, OBJECTS, PARENT ; + *-- Propiedades (Se preservan: CONTROLCOUNT, CONTROLS, OBJECTS, PARENT) + HIDDEN BASECLASS, CLASS, TOP, WIDTH, CLASSLIB, CLASSLIBRARY, COMMENT ; + , HEIGHT, HELPCONTEXTID, LEFT, NAME ; , PARENTCLASS, PICTURE, TAG, WHATSTHISHELPID *-- Métodos (Se preservan: INIT, DESTROY, ERROR, ADDPROPERTY) - HIDDEN ADDOBJECT, NEWOBJECT, READEXPRESSION, READMETHOD, REMOVEOBJECT ; + *HIDDEN ADDOBJECT, NEWOBJECT, READEXPRESSION, READMETHOD, REMOVEOBJECT ; , RESETTODEFAULT, SAVEASCLASS, SHOWWHATSTHIS, WRITEEXPRESSION, WRITEMETHOD _MEMBERDATA = [] ; + [] ; + [] ; + [] ; + + [] ; + [] ; + [] @@ -7984,6 +7869,53 @@ DEFINE CLASS CL_CUS_BASE AS CUSTOM ENDPROC + ******************************************************************************************************************* + PROCEDURE analizarBloque + ENDPROC + + + ******************************************************************************************************************* + PROCEDURE fileTypeDescription + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * tn_HexFileType (@? IN ) Tipo de archivo en hexadecimal (Está detallado en la ayuda de Fox) + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tn_HexFileType + LOCAL lcFileType + + DO CASE + CASE tn_HexFileType = 0x02 + lcFileType = 'FoxBASE / dBase II' + CASE tn_HexFileType = 0x03 + lcFileType = 'FoxBASE+ / FoxPro /dBase III PLUS / dBase IV, no memo' + CASE tn_HexFileType = 0x30 + lcFileType = 'Visual FoxPro' + CASE tn_HexFileType = 0x31 + lcFileType = 'Visual FoxPro, autoincrement enabled' + CASE tn_HexFileType = 0x32 + lcFileType = 'Visual FoxPro, Varchar, Varbinary, or Blob-enabled' + CASE tn_HexFileType = 0x43 + lcFileType = 'dBASE IV SQL table files, no memo' + CASE tn_HexFileType = 0x63 + lcFileType = 'dBASE IV SQL system files, no memo' + CASE tn_HexFileType = 0x83 + lcFileType = 'FoxBASE+/dBASE III PLUS, with memo' + CASE tn_HexFileType = 0x8B + lcFileType = 'dBASE IV with memo' + CASE tn_HexFileType = 0xCB + lcFileType = 'dBASE IV SQL table files, with memo' + CASE tn_HexFileType = 0xF5 + lcFileType = 'FoxPro 2.x (or earlier) with memo' + CASE tn_HexFileType = 0xFB + lcFileType = 'FoxBASE (?)' + OTHERWISE + lcFileType = 'Unknown' + ENDCASE + + RETURN lcFileType + ENDPROC + + ******************************************************************************************************************* PROCEDURE set_Line *--------------------------------------------------------------------------------------------------- @@ -7997,11 +7929,6 @@ DEFINE CLASS CL_CUS_BASE AS CUSTOM ENDPROC - ******************************************************************************************************************* - PROCEDURE analizarBloque - ENDPROC - - ******************************************************************************************************************* PROCEDURE toText ENDPROC @@ -8710,15 +8637,206 @@ DEFINE CLASS CL_PROJECT AS CL_COL_BASE ENDDEFINE + ******************************************************************************************************************* -DEFINE CLASS CL_DATABASE AS CL_CUS_BASE +DEFINE CLASS CL_DBC_COL_BASE AS CL_COL_BASE #IF .F. - LOCAL THIS AS CL_DATABASE OF 'FOXBIN2PRG.PRG' + LOCAL THIS AS CL_DBC_COL_BASE OF 'FOXBIN2PRG.PRG' #ENDIF _MEMBERDATA = [] ; - + [] ; + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] + + *PROTECTED __ObjectID, __ObjectType + __ObjectID = 0 + _Name = '' + + + PROCEDURE updateDBC + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * tc_OutputFile (v! IN ) Nombre del archivo de salida + * tnLastID (@! IN ) Último número de ID usado + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tc_OutputFile, tnLastID + + FOR EACH loTable AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG' IN loTables FOXOBJECT + loTable.updateDBC + ENDFOR + + RETURN + ENDPROC + + +ENDDEFINE + + +******************************************************************************************************************* +DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE + #IF .F. + LOCAL THIS AS CL_DBC_BASE OF 'FOXBIN2PRG.PRG' + #ENDIF + + _MEMBERDATA = [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] + + *PROTECTED __ObjectID, __ObjectType + __ObjectID = 0 + _Name = '' + + + PROCEDURE getBinPropertyDataRecord + LPARAMETERS tcData, tnDataType + LOCAL lcBinRecord, lnLen + lnLen = 4 + 2 + 1 + LEN(tcData) + 1 + lcBinRecord = BINTOC( lnLen, "4RS" ) + BINTOC( 1, "2RS" ) + CHR(tnDataType) + tcData + CHR(0) + RETURN lcBinRecord + ENDPROC + + + PROCEDURE getID + RETURN THIS.__ObjectID + ENDPROC + + + PROCEDURE getCodeMemo + RETURN '' + ENDPROC + + + PROCEDURE getUserMemo + RETURN '' + ENDPROC + + + PROCEDURE getMemoWithProperties + RETURN '' + ENDPROC + + + PROCEDURE getReferentialIntegrityInfo + RETURN '' + ENDPROC + + + PROCEDURE getObjectType + LOCAL lcType + + DO CASE + CASE THIS.Class = 'Cl_dbc' + lcType = 'Database' + + CASE THIS.Class = 'Cl_dbc_connection' + lcType = 'Connection' + + CASE THIS.Class = 'Cl_dbc_table' + lcType = 'Table' + + CASE THIS.Class = 'Cl_dbc_view' + lcType = 'View' + + CASE THIS.Class = 'Cl_dbc_index' + lcType = 'Index' + + CASE THIS.Class = 'Cl_dbc_relation' + lcType = 'Relation' + + CASE THIS.Class = 'Cl_dbc_field' + lcType = 'Field' + + OTHERWISE + lcType = 'Unknown' + + ENDCASE + + RETURN lcType + ENDPROC + + + PROCEDURE setNextID + LPARAMETERS tnLastID + tnLastID = tnLastID + 1 + THIS.__ObjectID = tcID + ENDPROC + + + PROCEDURE updateDBC + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * tc_OutputFile (v! IN ) Nombre del archivo de salida + * tnLastID (@! IN ) Último número de ID usado + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tc_OutputFile, tnLastID + + TRY + WITH THIS AS CL_DBC_BASE OF 'FOXBIN2PRG.PRG' + .setNextID( @tnLastID ) + + INSERT INTO TABLABIN ; + ( ObjectID ; + , ParentID ; + , ObjectType ; + , ObjectName ; + , Property ; + , Code ; + , RIInfo ; + , User ) ; + VALUES ; + ( .getID() ; + , .Parent.getID() ; + , .getObjectType() ; + , ._Name ; + , .getMemoWithProperties() ; + , .getCodeMemo ; + , .getReferentialIntegrityInfo() ; + , .getUserMemo() ) + ENDWITH && THIS + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + ENDTRY + + RETURN + ENDPROC + + +ENDDEFINE + + +******************************************************************************************************************* +DEFINE CLASS CL_DBC AS CL_DBC_BASE + #IF .F. + LOCAL THIS AS CL_DBC OF 'FOXBIN2PRG.PRG' + #ENDIF + + _MEMBERDATA = [] ; + [] ; + [] ; + [] ; @@ -8744,24 +8862,22 @@ DEFINE CLASS CL_DATABASE AS CL_CUS_BASE _DBCEventFilename = '' *-- Sub-objects - _Connections = NULL - _Tables = NULL - _Views = NULL - _Relations = NULL + *_Connections = NULL + *_Tables = NULL + *_Views = NULL + *_Relations = NULL - ************************************************************************************************ PROCEDURE INIT DODEFAULT() *-- - THIS._Connections = CREATEOBJECT("CL_DBC_CONNECTIONS") - THIS._Tables = CREATEOBJECT("CL_DBC_TABLES") - THIS._Views = CREATEOBJECT("CL_DBC_VIEWS") - THIS._Relations = CREATEOBJECT("CL_DBC_RELATIONS") + THIS.ADDOBJECT("_Connections", "CL_DBC_CONNECTIONS") + THIS.ADDOBJECT("_Tables", "CL_DBC_TABLES") + THIS.ADDOBJECT("_Views", "CL_DBC_VIEWS") + THIS.ADDOBJECT("_Relations", "CL_DBC_RELATIONS") ENDPROC - ******************************************************************************************************************* PROCEDURE analizarBloque *--------------------------------------------------------------------------------------------------- * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) @@ -8836,23 +8952,63 @@ DEFINE CLASS CL_DATABASE AS CL_CUS_BASE ENDPROC - ******************************************************************************************************************* - PROCEDURE DBSETPROP( cName, cType, cProperty, ePropertyValue ) - LPARAMETERS tcLine, taCodeLines, I, tnCodeLines + PROCEDURE DBSETPROP + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * cName (v! IN ) Nombre del objeto + * cType (v! IN ) Tipo de objeto (Table, Index, Field, View, Relation) + * cProperty (v! IN ) Nombre de la propiedad + * ePropertyValue (v! IN ) Valor de la propiedad + *--------------------------------------------------------------------------------------------------- + LPARAMETERS cName, cType, cProperty, ePropertyValue ENDPROC - ******************************************************************************************************************* - PROCEDURE DBWriteObjects - LPARAMETERS tc_OutputFile - - LOCAL loTable AS CL_DBC_TABLE ; - , loConnection AS CL_DBC_CONNECTION ; - , loView AS CL_DBC_VIEW ; - , loRelation AS CL_DBC_RELATION - - + PROCEDURE updateDBC + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * tc_OutputFile (v! IN ) Nombre del archivo de salida + * tnLastID (@! IN ) Último número de ID usado + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tc_OutputFile, tnLastID + + TRY + LOCAL loTables AS CL_DBC_TABLES ; + , loConnections AS CL_DBC_CONNECTIONS ; + , loViews AS CL_DBC_VIEWS ; + , loRelations AS CL_DBC_RELATIONS + + loTables = THIS._Tables + loConnections = THIS._Connections + loViews = THIS._Views + loRelations = THIS._Relations + + CREATE DATABASE (tc_OutputFile) + CLOSE DATABASES + OPEN DATABASE (tc_OutputFile) SHARED + USE (tc_OutputFile) SHARED AGAIN ALIAS ARCHIVOBIN + tnLastID = 5 + THIS.setNextID(0) + + *FOR EACH loTable AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG' IN loTables FOXOBJECT + * loTable.updateDBC + *ENDFOR + + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + FINALLY + CLOSE DATABASES + + ENDTRY + + RETURN ENDPROC @@ -9033,7 +9189,7 @@ ENDDEFINE ******************************************************************************************************************* -DEFINE CLASS CL_DBC_CONNECTION AS CL_CUS_BASE +DEFINE CLASS CL_DBC_CONNECTION AS CL_DBC_BASE #IF .F. LOCAL THIS AS CL_DBC_CONNECTION OF 'FOXBIN2PRG.PRG' #ENDIF @@ -9312,7 +9468,7 @@ ENDDEFINE ******************************************************************************************************************* -DEFINE CLASS CL_DBC_TABLE AS CL_CUS_BASE +DEFINE CLASS CL_DBC_TABLE AS CL_DBC_BASE #IF .F. LOCAL THIS AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG' #ENDIF @@ -9327,6 +9483,8 @@ DEFINE CLASS CL_DBC_TABLE AS CL_CUS_BASE + [] ; + [] ; + [] ; + + [] ; + + [] ; + [] @@ -9342,14 +9500,16 @@ DEFINE CLASS CL_DBC_TABLE AS CL_CUS_BASE _RuleText = '' *-- Sub-objects - _Fields = NULL + *_Fields = NULL + *_Indexes = NULL ************************************************************************************************ PROCEDURE INIT DODEFAULT() *-- - THIS._Fields = CREATEOBJECT("CL_DBC_FIELDS_DB") + THIS.ADDOBJECT("_Fields", "CL_DBC_FIELDS_DB") + THIS.ADDOBJECT("_Indexes", "CL_DBC_INDEXES_DB") ENDPROC @@ -9597,7 +9757,7 @@ ENDDEFINE ******************************************************************************************************************* -DEFINE CLASS CL_DBC_FIELD_DB AS CL_CUS_BASE +DEFINE CLASS CL_DBC_FIELD_DB AS CL_DBC_BASE #IF .F. LOCAL THIS AS CL_DBC_FIELD_DB OF 'FOXBIN2PRG.PRG' #ENDIF @@ -9812,7 +9972,7 @@ ENDDEFINE ******************************************************************************************************************* -DEFINE CLASS CL_DBC_INDEX_DB AS CL_CUS_BASE +DEFINE CLASS CL_DBC_INDEX_DB AS CL_DBC_BASE #IF .F. LOCAL THIS AS CL_DBC_INDEX_DB OF 'FOXBIN2PRG.PRG' #ENDIF @@ -10006,7 +10166,7 @@ ENDDEFINE ******************************************************************************************************************* -DEFINE CLASS CL_DBC_VIEW AS CL_CUS_BASE +DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE #IF .F. LOCAL THIS AS CL_DBC_VIEW OF 'FOXBIN2PRG.PRG' #ENDIF @@ -10066,16 +10226,16 @@ DEFINE CLASS CL_DBC_VIEW AS CL_CUS_BASE _WhereType = '' *-- Sub-objects - _Fields = NULL - _Indexes = NULL + *_Fields = NULL + *_Indexes = NULL ************************************************************************************************ PROCEDURE INIT DODEFAULT() *-- - THIS._Fields = CREATEOBJECT("CL_DBC_FIELDS_VW") - THIS._Indexes = CREATEOBJECT("CL_DBC_INDEXES_VW") + THIS.ADDOBJECT("_Fields", "CL_DBC_FIELDS_VW") + THIS.ADDOBJECT("_Indexes", "CL_DBC_INDEXES_VW") ENDPROC @@ -10341,7 +10501,7 @@ ENDDEFINE ******************************************************************************************************************* -DEFINE CLASS CL_DBC_FIELD_VW AS CL_CUS_BASE +DEFINE CLASS CL_DBC_FIELD_VW AS CL_DBC_BASE #IF .F. LOCAL THIS AS CL_DBC_FIELD_VW OF 'FOXBIN2PRG.PRG' #ENDIF @@ -10603,7 +10763,7 @@ ENDDEFINE ******************************************************************************************************************* -DEFINE CLASS CL_DBC_RELATION AS CL_CUS_BASE +DEFINE CLASS CL_DBC_RELATION AS CL_DBC_BASE #IF .F. LOCAL THIS AS CL_DBC_RELATION OF 'FOXBIN2PRG.PRG' #ENDIF @@ -10694,6 +10854,7 @@ DEFINE CLASS CL_DBC_RELATION AS CL_CUS_BASE TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> + <<>> <<'Relation ' + TRANSFORM(I)>> <<>> <> <<>> <> <<>> <> @@ -10737,6 +10898,8 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE + [] ; + [] ; + [] ; + + [] ; + + [] ; + [] @@ -10754,15 +10917,15 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE _LastUpdate = {} *-- Fields and Indexes - _Fields = NULL - _Indexes = NULL + *_Fields = NULL + *_Indexes = NULL PROCEDURE INIT DODEFAULT() *-- - THIS._Fields = CREATEOBJECT("CL_DBF_FIELDS") - THIS._Indexes = CREATEOBJECT("CL_DBF_INDEXES") + THIS.ADDOBJECT("_Fields", "CL_DBF_FIELDS") + THIS.ADDOBJECT("_Indexes", "CL_DBF_INDEXES") ENDPROC @@ -10838,8 +11001,9 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE * tl_FileHasMemo (v! IN ) Indica si el archivo tiene MEMO (FPT) asociado * tl_FileIsDBC (v! IN ) Indica si el archivo es un DBC * tc_DBC_Name (v! IN ) Nombre del DBC (si tiene) + * tc_InputFile (v! IN ) Nombre del archivo de salida *--------------------------------------------------------------------------------------------------- - LPARAMETERS tn_HexFileType, tl_FileHasCDX, tl_FileHasMemo, tl_FileIsDBC, tc_DBC_Name + LPARAMETERS tn_HexFileType, tl_FileHasCDX, tl_FileHasMemo, tl_FileIsDBC, tc_DBC_Name, tc_InputFile EXTERNAL ARRAY taFields @@ -10859,7 +11023,7 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> <> - <<>> <> + <<>> <> <<>> <> <<>> <> <<>> <> @@ -10976,6 +11140,7 @@ DEFINE CLASS CL_DBF_FIELDS AS CL_COL_BASE LOCAL I, lcText, loEx AS EXCEPTION LOCAL loField AS CL_DBF_FIELD OF 'FOXBIN2PRG.PRG' lcText = '' + DIMENSION taFields(1,18) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> @@ -11246,6 +11411,7 @@ DEFINE CLASS CL_DBF_INDEXES AS CL_COL_BASE LOCAL I, lcText, loEx AS EXCEPTION LOCAL loIndex AS CL_DBF_INDEX OF 'FOXBIN2PRG.PRG' lcText = '' + DIMENSION taTagInfo(1,6) IF TAGCOUNT() > 0 TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2