From dfafc7ff3867b82ba8a10079e0da5eba94b42109 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 22 Mar 2015 02:08:51 +0100 Subject: [PATCH] =?UTF-8?q?-=20Arreglo=20de=20la=20informaci=C3=B3n=20de?= =?UTF-8?q?=20los=20=C3=ADndices=20que=20se=20hab=C3=ADa=20desacomodado=20?= =?UTF-8?q?por=20ordenarlos=20alfab=C3=A9ticamente=20-=20Arreglo=20del=20t?= =?UTF-8?q?est=20de=20=C3=ADndices=20para=20que=20no=20tenga=20en=20cuenta?= =?UTF-8?q?=20el=20orden=20de=20los=20mismos,=20sino=20su=20estructura=20-?= =?UTF-8?q?=20Nueva=20vista=20local=20offline=20para=20testear=20la=20BDD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TESTS/DATOS_READONLY/FB2P_DBC.DC2 | 131 ++++++++++++++++-- TESTS/DATOS_READONLY/fb2p_dbc.dbc | Bin 10123 -> 9463 bytes TESTS/DATOS_READONLY/fb2p_dbc.dct | Bin 155584 -> 29413 bytes TESTS/DATOS_READONLY/fb2p_dbc.dcx | Bin 5632 -> 5632 bytes TESTS/DATOS_READONLY/foxbin2prg.cfg | 1 + TESTS/DATOS_READONLY/vw_local_encuestas.dbf | Bin 0 -> 579 bytes TESTS/DATOS_READONLY/vw_local_encuestas.tbf | Bin 0 -> 456 bytes .../ft__foxbin2prg__c_conversor_prg_a_dbf.prg | 16 ++- foxbin2prg.prg | 16 ++- 9 files changed, 149 insertions(+), 15 deletions(-) create mode 100644 TESTS/DATOS_READONLY/foxbin2prg.cfg create mode 100644 TESTS/DATOS_READONLY/vw_local_encuestas.dbf create mode 100644 TESTS/DATOS_READONLY/vw_local_encuestas.tbf diff --git a/TESTS/DATOS_READONLY/FB2P_DBC.DC2 b/TESTS/DATOS_READONLY/FB2P_DBC.DC2 index 7ddff4f..6cc2582 100644 --- a/TESTS/DATOS_READONLY/FB2P_DBC.DC2 +++ b/TESTS/DATOS_READONLY/FB2P_DBC.DC2 @@ -190,17 +190,12 @@ - id - - .T. - - - edad_nd + depto .F. - notdeleted + edad_nd .F. @@ -210,17 +205,22 @@ .T. - depto + i_nombre .F. + + id + + .T. + nombre .F. - i_nombre + notdeleted .F. @@ -533,6 +533,119 @@ + + VW_LOCAL_ENCUESTAS + + + SELECT ENCUESTAS.Promotor,ENCUESTAS.Idenc,ENCUESTAS.Calific,ENCUESTAS.Fecha, ENCUESTAS.Resultado FROM C:\DESA\FOXBIN2PRG\TESTS\DATOS_READONLY\ENCUESTAS.DBF ENCUESTAS + .F. + 1 + .T. + + .F. + .T. + 100 + -1 + .T. + + .F. + + + .F. + .T. + 1 + 1 + 255 + 3 + + + + promotor + + + C(20) + + + + + + .F. + + + .F. + promotor + + + idenc + + + C(20) + + + + + + .F. + + + .F. + idenc + + + calific + + + C(2) + + + + + + .F. + + + .F. + calific + + + fecha + + + D + + + + + + .F. + + + .F. + fecha + + + resultado + + + C(10) + + + + + + .F. + + + .F. + resultado + + + + + + + + VW_ORA_CONVENIOS diff --git a/TESTS/DATOS_READONLY/fb2p_dbc.dbc b/TESTS/DATOS_READONLY/fb2p_dbc.dbc index 4cc431df52c764a5cabd4ee1bb8f81d6d4627046..b3887164b5dd879586a284347360ad542f49a35c 100644 GIT binary patch literal 9463 zcmd^_TaOe)6vrD-L2w08QNc@l2N4An6TywU%nUHV>`Z1y4bi02mzv#{neMSK1NtI~ zAHfG7Of)9?=2!5+Z@{~WKKTXw1pZG|FFn;~qHk3up3PL(sp`)8^{F~_>Dto=_Z)f0 zah&73e?qFu-aU@fzj(FN8g<*K>Fz>uAO03)us-Z;RQ2~SsaMaBZVWn3>p|4-UwjyO zRll*`L;a)B?=1?`tGY`>lSvQ$5oAW=Z|9+ugX-mv^+j#pQwO=AFw2 zo1I~m@BM&`{&tSDvUB7A{OVHU)35Cpe&FZAb?cmKMGoy&ZK8}*-lY;9a+LW=?uSL3 zCfCy~^PCD1Xi_93qN)M8S)`eW23Z=4sLVvZnU+}y51SIg`V78P_9P_5f$qsBWIy;+ zgoP4<@Qj$HCc|7l~Psnn2<< z&c92D8suK61bQhJlSn>ckx$xRIZuchGxHQQTWEb7; zwk)^p$x|GXX5l8JT~DrZ$OC}X11CwRK_(`Cwv|Tcr@`1zGw+z`ama@NNuYJ$D9D{h z%wL1|fCEvMWsVjxI;4nv73Svoq(#CaS%7>Psty@jMN~6R1M(n)4C1Xq+%`B5Hd>4T zNftbL2&(Q$+e45f)FB_KApbk#myC|8khsq=$T1>2kL(4` zM;y{!0=ezyh0os5RKa%~@_7as#hC~xZah0*2>#@dFEGe5Fa0dG6*jJW?jn#N3w`oM zsJrm1XPkMA#`Y#@=ub?wux95DhkOZu1X|BH2pg;4f<9>j2eRPFm!ayAwwG!@a>!R0 zr0wm)UmWsP25I}_z-o2uw9wqg8Kmuf_g5V91RxvHeM^P5htK4tK%^V_QeFr6T@Lvg zAPKaN?pc;jQyi1jkD1MNE&~UmtjgR;q&j3wCkrFi4!#m6O7^w&-2C0wjoXjm*7?ltp)%`CgbNbCJZU;n;TF7Kc0y zNCK^+JC5!Fnr-LG+LvAOp61CjP<2Q(ciRK~l|!CoklR?QrCA)>T2b!1N`BNl`4-fr zeKIO7ttT&Y$hQGWpmm>&%IWlTE4@(}UAqPxh|*;498&URD@_udy<=;W3CxOu`eapr hPeUe8#a6EqmA4Rcidlrk^XH^+zua8hNnlpwQBs1mT`Um_}sAPb?=7p zd(4}muE*C-ufq6lXn)ukAC3mY-e`Odx>rAfqB(zeu+pn;S^cDCeAMr+of(u@bU%f! zJFAPgzTRE$jjHaW~Tj1j3--^uTL}p5ex+YlUn`%k)Avj41DF3 zTTinZQXn@%o{3;-%YI%&A@H$^Vn8Cd4XHxOy5J?D4T;;-hUDIpEs*yS$Vs%Bt4j_Y zqh8l#*#e0{jIGH~>e=i~C9op(t+gdjC!2mL#0 zas(j-#<@Z)YbW$&u1i!KO20dTsj(&=h61hoy+~cuIEyIDr9VvqId#of&i4=5lj0Eo zL{QVZc@5`Fph3|ZDr>k+ZAk6_<16F>F(7f9+K}7<#+4G$f_$7nat9b+Q^+R>B)6aZ zoamXDTmTKgF-$!h#sqy$_lQTKmcQ`+h8E4v#Dv>+%~Cf*6obLDPm*F{a>r zY0mE@q6PUhg8A~3vz)Nkk3NX zhCB}`ZIVU-mwkUxBASq$=b+0zW{Hy=-a4q9D-imL#*@zzNX!=fm@icOnL@rmAh|Vp zfLiy91d==NK1d;t6G-lq_7H_UK_I!0Sq>A(&Pf6pF~1QzLLkLUw;beA0@-;PAe(3A zyst=3(YFt;v_SHnPrgYZU#%d`Gjm?ZeFRdRs`ljaq@4ZC{4EOkTFY|t?#as(^7R%- V-sS#)LgIh8HQ(d#Liz-9&owY%Lg4@a diff --git a/TESTS/DATOS_READONLY/fb2p_dbc.dct b/TESTS/DATOS_READONLY/fb2p_dbc.dct index dfa83a048705f4f55c76cf7dd3d28c9e1500c91a..45879097533517f995a05b8e1ba57eb3213f1687 100644 GIT binary patch delta 1731 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 Pog?B@TqWMnH`vHuaQ+O= diff --git a/TESTS/DATOS_READONLY/foxbin2prg.cfg b/TESTS/DATOS_READONLY/foxbin2prg.cfg new file mode 100644 index 0000000..8300bd9 --- /dev/null +++ b/TESTS/DATOS_READONLY/foxbin2prg.cfg @@ -0,0 +1 @@ +DBF_Conversion_Support:4 \ No newline at end of file diff --git a/TESTS/DATOS_READONLY/vw_local_encuestas.dbf b/TESTS/DATOS_READONLY/vw_local_encuestas.dbf new file mode 100644 index 0000000000000000000000000000000000000000..9e4efd3e9142503e1f01d1534c6255b6a62fa4fb GIT binary patch literal 579 zcmXruXBJ~(U|=}GXbU9K05bzaK#;$$e~5n&P{x@NNQj^*@pN(ZbB2gHi(-*?cJ%Rd z^8~AK)&$Cf>_P@^uFf8g5CIo$AkBd+31kPk28a5DIJ)=)?KcMUxzOZ!(~^t|;!~26 y^?(>nZX|IP0$c-J70^ItiXobaf03f#w AdjJ3c literal 0 HcmV?d00001 diff --git a/TESTS/ft__foxbin2prg__c_conversor_prg_a_dbf.prg b/TESTS/ft__foxbin2prg__c_conversor_prg_a_dbf.prg index c7a48a5..f0bef09 100644 --- a/TESTS/ft__foxbin2prg__c_conversor_prg_a_dbf.prg +++ b/TESTS/ft__foxbin2prg__c_conversor_prg_a_dbf.prg @@ -360,8 +360,22 @@ DEFINE CLASS ft__foxbin2prg__c_conversor_prg_a_dbf AS FxuTestCase OF FxuTestCase this.assertequals( lnIndices_OUT, lnIndices_IN, '[Cantidad de campos IN y OUT]' ) FOR I = 1 TO lnIndices_IN + *- Busco el índice a evaluar + FOR Z = 1 TO lnIndices_OUT + IF LOWER(laIndices_OUT(Z,1)) == LOWER(laIndices_IN(I,1)) + EXIT + ENDIF + ENDFOR + + *-- Si no se encontró, registro error + THIS.asserttrue( Z <= lnIndices_OUT, 'El índice "' + laIndices_IN(I,1) + '" no se encontró' ) + IF Z > lnIndices_OUT THEN + LOOP + ENDIF + + *-- Si se encontró, comparo su especificación FOR X = 1 TO 6 - THIS.assertequals( laIndices_IN(I,X), laIndices_OUT(I,X), '[Comparando estructura del indice ' + laIndices_IN(I,1) + ']' ) + THIS.assertequals( laIndices_IN(I,X), laIndices_OUT(Z,X), '[Comparando estructura del indice ' + laIndices_IN(I,1) + ']' ) ENDFOR ENDFOR diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 261d76a..fc8a853 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -20919,24 +20919,30 @@ DEFINE CLASS CL_DBF_INDEX AS CL_CUS_BASE PROCEDURE toText *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) - * taTagInfo (@? IN ) Array de información de indices - * I (@? IN ) Indice en evaluación + * taTagInfo (@! IN ) Array de información de indices + * I (@! IN ) Indice en evaluación *--------------------------------------------------------------------------------------------------- LPARAMETERS taTagInfo, I EXTERNAL ARRAY taTagInfo TRY - LOCAL I, lcText, loEx AS EXCEPTION + LOCAL X, lcText, loEx AS EXCEPTION lcText = '' + + FOR X = 1 TO ALEN(taTagInfo,1) + IF TAG('', X) == taTagInfo(I,1) THEN + EXIT + ENDIF + ENDFOR TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> <<>> <> - <<>> <> + <<>> <> <<>> <> <<>> <> - <<>> <> + <<>> <> <<>> <> <<>> ENDTEXT