diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 843b559..2ae9b6e 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -21,6 +21,9 @@ Demo video using FoxBin2Prg with PlasticSCM: http://youtu.be/sE4wQ50Itqg Change History ------------------------------------------------------------- +2018-05-12 v1.19.51.1 +- Bug Fix: If capitalization is used on a DBC view info, then related information is not exported correctly or entirely, so could be lost (SkySurfer1) + 2018-03-24 v1.19.51 - Add LOG info about config.fpw used and CodePage - Enhanced HELP dialog info when running FoxBin2Prg with double-click diff --git a/ThorUpdater/FoxBin2Prg.zip b/ThorUpdater/FoxBin2Prg.zip index cc938ba..1666dd7 100644 Binary files a/ThorUpdater/FoxBin2Prg.zip and b/ThorUpdater/FoxBin2Prg.zip differ diff --git a/ThorUpdater/FoxBin2PrgVersion.txt b/ThorUpdater/FoxBin2PrgVersion.txt index 191de3e..6bff85a 100644 --- a/ThorUpdater/FoxBin2PrgVersion.txt +++ b/ThorUpdater/FoxBin2PrgVersion.txt @@ -2,10 +2,10 @@ lparameters toUpdateObject local ldDate, ; lnJulian, ; lcJulian -ldDate = date(2018,3,26) +ldDate = date(2018,5,12) lnJulian = val(sys(11, ldDate)) - val(sys(11, {^2000-01-01})) lcJulian = padl(transform(lnJulian), 4, '0') -toUpdateObject.AvailableVersion = 'FoxBin2Prg-1.19.51' + lcJulian + ; +toUpdateObject.AvailableVersion = 'FoxBin2Prg-1.19.51.1' + lcJulian + ; '-update-' + dtoc(ldDate, 1) return toUpdateObject diff --git a/ThorUpdater/Project.txt b/ThorUpdater/Project.txt index 4ef305c..568e3ef 100644 --- a/ThorUpdater/Project.txt +++ b/ThorUpdater/Project.txt @@ -1,5 +1,5 @@ appName = FoxBin2Prg appID = FoxBin2Prg -majorVersion = 1.19.51 +majorVersion = 1.19.51.1 excludeFiles = *.bak,*.bat,*.fxp,*.tbk,*.tmp,*.dat,*.log,*.cvp,README.md,.gitignore,*.zip*,*.7z*,*- copia.*,*.private.*,test_*.*,xx*.*,*.lnk,vfp_init.*,tmp*.*,*.err, *.conflict.*, *.private.* excludeFolders = *.plastic*,*ThorUpdater*,*Documentacion*,*foxunit*,*foxunit_*,*pruebas varias*,*versiones*,*datos_test* diff --git a/foxbin2prg.exe b/foxbin2prg.exe index 2148b47..c3867e7 100644 Binary files a/foxbin2prg.exe and b/foxbin2prg.exe differ diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index 73ca1f2..d6fc57b 100644 Binary files a/foxbin2prg.pjt and b/foxbin2prg.pjt differ diff --git a/foxbin2prg.pjx b/foxbin2prg.pjx index 682c034..e39207f 100644 Binary files a/foxbin2prg.pjx and b/foxbin2prg.pjx differ diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 002c5c6..9b9a018 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -215,6 +215,7 @@ * 15/03/2018 FDBOZZO v1.19.50.3 Bug Fix: Cuando se agregan archivos de texto no-VFP, como html,css,etc, en la sección de Text del proyecto, FoxBin2Prg no mantiene esta selección al regenerar el PJX, dejándolos en la sección Files (Darko Kezic) * 16/03/2018 FDBOZZO v1.19.51 Mejora: Agregado soporte para archivos de macros (.FKY) * 25/03/2018 FDBOZZO v1.19.51 Mejora: Agregado soporte para archivos de memoria (.MEM) +* 05/05/2018 SSF1&FDB v1.19.51.1 Bug Fix: Si se usa capitalización en la información de las vistas, entonces la información relacionada no se exporta correctamente o completamente y puede perderse (SkySurfer1) * * *--------------------------------------------------------------------------------------------------- @@ -338,6 +339,7 @@ * 30/01/2018 Kirides Reporte Bug v1.19.49: Cuando se convierte a texto una libreria corrupta con registros duplicados, se genera el error "The specified key already exists" (Arreglado en v1.19.49.9) * 12/03/2018 Darko Kezic Reporte Bug v1.19.50: Cuando se usa la equivalencia "extension: pj2=pjm" se debe manejar el pjm como un pj2 y no como un pjm de SourceSafe (Arreglado en v1.19.50.1) * 15/03/2018 Darko Kezic Reporte Bug v1.19.50: Cuando se agregan archivos de texto no-VFP, como html,css,etc, en la sección de Text del proyecto, FoxBin2Prg no mantiene esta selección al regenerar el PJX, dejándolos en la sección Files (Arreglado en v1.19.50.3) +* 05/05/2018 SkySurfer1 Reporte Bug v1.19.51: Si se usa capitalización en la información de las vistas, entonces la información relacionada no se exporta correctamente o completamente y puede perderse (Arreglado en v1.19.51.1) * * *--------------------------------------------------------------------------------------------------- @@ -20367,7 +20369,7 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE ( lcID ; , tnParentID ; , lcObjectType ; - , LOWER(._Name) ; + , IIF(lcObjectType == 'View', ._Name, LOWER(._Name)) ; , lcMemoWithProperties ; , lcCodeMemo ; , lcRI_Info ; @@ -20928,7 +20930,7 @@ DEFINE CLASS CL_DBC_CONNECTIONS AS CL_DBC_COL_BASE loConnection = CREATEOBJECT('CL_DBC_CONNECTION') loConnection.read_BinDataToProperties( laConnections(m.I) ) *-- El siguiente PADR() es porque si no "estoXXX" está antes que "esto" cuando keysort=2 (raro...) - .ADD( loConnection, PADR(loConnection._Name,128) ) + .ADD( loConnection, PADR(LOWER(loConnection._Name),128) ) ENDFOR ENDIF ENDWITH @@ -21216,7 +21218,7 @@ DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE loTable = CREATEOBJECT("CL_DBC_TABLE") loTable.analyzeCodeBlock( @tcLine, @taCodeLines, @m.I, tnCodeLines ) *-- El siguiente PADR() es porque si no "estoXXX" está antes que "esto" cuando keysort=2 (raro...) - .ADD( loTable, PADR(loTable._Name,128) ) + .ADD( loTable, PADR(LOWER(loTable._Name),128) ) OTHERWISE && Otro valor *-- No hay otros valores @@ -21338,7 +21340,7 @@ DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE loTable = CREATEOBJECT("CL_DBC_TABLE") loTable.read_BinDataToProperties( laTables(m.I) ) *-- El siguiente PADR() es porque si no "estoXXX" está antes que "esto" cuando keysort=2 (raro...) - .ADD( loTable, PADR(loTable._Name,128) ) + .ADD( loTable, PADR(LOWER(loTable._Name),128) ) ENDFOR ENDIF @@ -21684,7 +21686,7 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE IF .n_Campos = 0 THEN *-- MODO LEGACY: Cuando no existe tag de ordenamiento de campos, se agregan en el orden que se leen *-- El siguiente PADR() es porque si no "estoXXX" está antes que "esto" cuando keysort=2 (raro...) - .ADD( loField, PADR(loField._Name,128) ) + .ADD( loField, PADR(LOWER(loField._Name),128) ) ELSE lnPos = ASCAN( .a_Campos, loField._Name, 1, 0, 1, 1+2+4+8 ) .a_Campos( lnPos, 2) = loField @@ -21698,7 +21700,7 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE *-- Restablezco el orden de los campos (Solo si n_Campos > 0, que significa que tiene el nuevo tag especial de orden) FOR lnPos = 1 TO .n_Campos *-- El siguiente PADR() es porque si no "estoXXX" está antes que "esto" cuando keysort=2 (raro...) - .ADD( .a_Campos( lnPos, 2), PADR(.a_Campos( lnPos, 1),128) ) + .ADD( .a_Campos( lnPos, 2), PADR(LOWER(.a_Campos( lnPos, 1)),128) ) ENDFOR ENDWITH && THIS ENDIF @@ -21885,9 +21887,10 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE STORE NULL TO loField STORE 0 TO I, lnField_Count _TALLY = 0 + SELECT LOWER(TB.ObjectName) FROM TABLABIN TB ; INNER JOIN TABLABIN TB2 ON STR(TB.ParentId)+TB.ObjectType = STR(TB2.ObjectID)+PADR('Field',10) ; - AND TB2.ObjectName = PADR(LOWER(tcTable),128) ; + AND LOWER(TB2.ObjectName) = PADR(LOWER(tcTable),128) ; INTO ARRAY laFields lnField_Count = _TALLY @@ -21896,7 +21899,7 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE loField = CREATEOBJECT("CL_DBC_FIELD_DB") loField.read_BinDataToProperties( tcTable, laFields(m.I) ) *-- El siguiente PADR() es porque si no "estoXXX" está antes que "esto" cuando keysort=2 (raro...) - .ADD( loField, PADR(loField._Name,128) ) + .ADD( loField, PADR(LOWER(loField._Name),128) ) ENDFOR ENDIF @@ -22157,7 +22160,7 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE loIndex = CREATEOBJECT("CL_DBC_INDEX_DB") loIndex.analyzeCodeBlock( @tcLine, @taCodeLines, @m.I, tnCodeLines ) *-- El siguiente PADR() es porque si no "estoXXX" está antes que "esto" cuando keysort=2 (raro...) - .ADD( loIndex, PADR(loIndex._Name,128) ) + .ADD( loIndex, PADR(LOWER(loIndex._Name),128) ) OTHERWISE && Otro valor *-- No hay otros valores @@ -22274,7 +22277,7 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE _TALLY = 0 SELECT LOWER(TB.ObjectName) FROM TABLABIN TB ; INNER JOIN TABLABIN TB2 ON STR(TB.ParentId)+TB.ObjectType = STR(TB2.ObjectID)+PADR('Index',10) ; - AND TB2.ObjectName = PADR(LOWER(tcTable),128) ; + AND LOWER(TB2.ObjectName) = PADR(LOWER(tcTable),128) ; INTO ARRAY laIndexes lnIndex_Count = _TALLY @@ -22283,7 +22286,7 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE loIndex = CREATEOBJECT("CL_DBC_INDEX_DB") loIndex.read_BinDataToProperties( tcTable + '.' + laIndexes(m.I) ) *-- El siguiente PADR() es porque si no "estoXXX" está antes que "esto" cuando keysort=2 (raro...) - .ADD( loIndex, PADR(loIndex._Name,128) ) + .ADD( loIndex, PADR(LOWER(loIndex._Name),128) ) ENDFOR ENDIF @@ -22512,7 +22515,7 @@ DEFINE CLASS CL_DBC_VIEWS AS CL_DBC_COL_BASE loView = CREATEOBJECT("CL_DBC_VIEW") loView.analyzeCodeBlock( @tcLine, @taCodeLines, @m.I, tnCodeLines ) *-- El siguiente PADR() es porque si no "estoXXX" está antes que "esto" cuando keysort=2 (raro...) - .ADD( loView, PADR(loView._Name,128) ) + .ADD( loView, PADR(LOWER(loView._Name),128) ) OTHERWISE && Otro valor *-- No hay otros valores @@ -22626,14 +22629,20 @@ DEFINE CLASS CL_DBC_VIEWS AS CL_DBC_COL_BASE EXIT ENDIF - lnView_Count = ADBOBJECTS( laViews, "VIEW" ) - + *LG lnView_Count = ADBOBJECTS( laViews, "VIEW" ) + SELECT CAST(ALLTRIM(ObjectName) as varchar(128)) ; + FROM TablaBin ; + WHERE UPPER(ObjectType) = 'VIEW' ; + ORDER BY 1 ; + INTO ARRAY laViews + lnView_Count = _TALLY + IF lnView_Count > 0 FOR I = 1 TO lnView_Count loView = CREATEOBJECT("CL_DBC_VIEW") loView.read_BinDataToProperties( laViews(m.I) ) *-- El siguiente PADR() es porque si no "estoXXX" está antes que "esto" cuando keysort=2 (raro...) - .ADD( loView, PADR(loView._Name,128) ) + .ADD( loView, PADR(LOWER(loView._Name),128) ) ENDFOR ENDIF @@ -22834,7 +22843,6 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg *--------------------------------------------------------------------------------------------------- LPARAMETERS tcView, toFoxBin2Prg - #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF @@ -23089,7 +23097,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE IF .n_Campos = 0 THEN *-- MODO LEGACY: Cuando no existe tag de ordenamiento de campos, se agregan en el orden que se leen *-- El siguiente PADR() es porque si no "estoXXX" está antes que "esto" cuando keysort=2 (raro...) - .ADD( loField, PADR(loField._Name,128) ) + .ADD( loField, PADR(LOWER(loField._Name),128) ) ELSE lnPos = ASCAN( .a_Campos, loField._Name, 1, 0, 1, 1+2+4+8 ) .a_Campos( lnPos, 2) = loField @@ -23103,7 +23111,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE *-- Restablezco el orden de los campos (Solo si n_Campos > 0, que significa que tiene el nuevo tag especial de orden) FOR lnPos = 1 TO .n_Campos *-- El siguiente PADR() es porque si no "estoXXX" está antes que "esto" cuando keysort=2 (raro...) - .ADD( .a_Campos( lnPos, 2), PADR(.a_Campos( lnPos, 1),128) ) + .ADD( .a_Campos( lnPos, 2), PADR(LOWER(.a_Campos( lnPos, 1)),128) ) ENDFOR ENDWITH && THIS ENDIF @@ -23292,7 +23300,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE _TALLY = 0 SELECT LOWER(TB.ObjectName) FROM TABLABIN TB ; INNER JOIN TABLABIN TB2 ON STR(TB.ParentId)+TB.ObjectType = STR(TB2.ObjectID)+PADR('Field',10) ; - AND TB2.ObjectName = PADR(LOWER(tcView),128) ; + AND LOWER(TB2.ObjectName) = PADR(LOWER(tcView),128) ; INTO ARRAY laFields lnField_Count = _TALLY @@ -23301,7 +23309,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE loField = CREATEOBJECT("CL_DBC_FIELD_VW") loField.read_BinDataToProperties( tcView, laFields(m.I) ) *-- El siguiente PADR() es porque si no "estoXXX" está antes que "esto" cuando keysort=2 (raro...) - .ADD( loField, PADR(loField._Name,128) ) + .ADD( loField, PADR(LOWER(loField._Name),128) ) ENDFOR ENDIF @@ -23578,7 +23586,7 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE TRY *-- El siguiente PADR() es porque si no "estoXXX" está antes que "esto" cuando keysort=2 (raro...) - .ADD( loRelation, PADR(loRelation._Name,128) ) + .ADD( loRelation, PADR(LOWER(loRelation._Name),128) ) CATCH TO loEx WHEN loEx.ERRORNO = 2062 && The specified Key already exists. *-- Saltear este error, porque implica que la relación está duplicada ENDTRY @@ -23700,7 +23708,7 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE loRelation = CREATEOBJECT('CL_DBC_RELATION') loRelation.read_BinDataToProperties( @laRelations, m.I ) TRY - .ADD( loRelation, loRelation._Name ) + .ADD( loRelation, PADR(LOWER(loRelation._Name),128) ) CATCH TO loEx WHEN loEx.ERRORNO = 2062 && The specified Key already exists. *-- Saltear este error, porque implica que la relación está duplicada ENDTRY