OPEN DATABASE G:\VFP\GESTION\DATOS\XXXX.EMP\Empresa CLOSE TABLES ALL SET MEMOWIDTH TO 90 * Acá hago las consultas para obtener el subconjunto de datos para la prueba SELECT Co.CoFecha, Co.CoTotal, Co.PeTipo, Co.PeCodigo ; FROM Comprob Co WHERE CoFecha >= {6/12/2013} AND PeCodigo==" 5" ; INTO CURSOR c_Comprob SELECT DISTINCT Pe.PeTipo, Pe.PeCodigo, Pe.PeNombre FROM Persona Pe ; JOIN c_Comprob Co ON Pe.PeTipo+Pe.PeCodigo==Co.PeTipo+Co.PeCodigo ; INTO CURSOR c_Persona TEXT TO sSQL ****** Query a probar ******* SELECT * FROM c_Comprob Co JOIN c_Persona Pe ON Pe.PeTipo+Pe.PeCodigo==Co.PeTipo+Co.PeCodigo ENDTEXT * Genero el bloque de texto con la generacion de los cursores y los datos de los mismos, * mas la instruccion SQL a ejecutar sobre dichos cursores sCode = ToAsciiTables() + sSQL * Cierro todao tablas para garantizar que se regeneren los cursores con toda la informacion que necesito CLOSE TABLES ALL CLEAR ? sCode * _CLIPTEXT = sCode sTempFile = SYS(2023) + "\Repro.prg" STRTOFILE(sCode, sTempFile) MODIFY COMMAND (sTempFile) * EXECSCRIPT(sCode) * Acá grabo esto si lo voy a usar con posterioridad, o lo pego en el clipboard con _CLIPTEXT = sCode RETURN #define CRLF CHR(13)+CHR(10) #define F_NAME 1 #define F_TYPE 2 #define F_LEN 3 #define F_DEC 4 #define F_COL_WIDTH 5 * Vuelca todos los cursores abiertos en un prg FUNCTION ToAsciiTables(sAliasLst) LOCAL nSel, sCode, asUsed[1], sAlias sCode = "" FOR nSel = 1 TO AUSED(asUsed) sAlias = asUsed[nSel, 1] IF ! ISREADONLY(sAlias) && Paso solo los cursores LOOP ENDIF IF ! EMPTY(sAliasLst) AND ! LOWER(sAlias) $ LOWER(sAliasLst) * ENDIF sCode = sCode + ToAsciiTable(sAlias) + CRLF NEXT RETURN sCode * Vuelca un alias en un prg FUNCTION ToAsciiTable(sAlias) LOCAL axFld[1], nFld, nFlds, sCode, nSel, nLen nSel = SELECT() SELECT (EVL(sAlias, SELECT())) sCode = [CREATE CURSOR ] + ALIAS() + [ (] nFlds = AFIELDS(axFld) FOR nFld = 1 TO nFlds nLen = axFld[nFld, F_LEN] sCode = sCode + IIF(nFld > 1, "," , "") + ; axFld[nFld, F_NAME] + " " + ; axFld[nFld, F_TYPE] + " (" + ; TRANSFORM(nLen) + "," + ; TRANSFORM(axFld[nFld, F_DEC]) + ")" nLen = MAX(nLen, LEN(TRANSFORM(EVALUATE(axFld[F_NAME])))) axFld[nFld, F_COL_WIDTH] = MAX(nLen, LEN(axFld[nFld, F_NAME])) NEXT sCode = sCode + [)] + REPLICATE(CRLF, 2) sCode = sCode + REPLICATE("*", 50) + CRLF sCode = sCode + "*" FOR nFld = 1 TO nFlds sCode = sCode + PADR(axFld[nFld, F_NAME], axFld[nFld, F_COL_WIDTH]) + "|" NEXT sCode = sCode + CRLF sCode = sCode + [TEXT TO sStr NOSHOW] + CRLF SCAN FOR nFld = 1 TO nFlds sCode = sCode + PADR(TRANSFORM(EVALUATE(axFld[nFld, F_NAME])), axFld[nFld, F_COL_WIDTH]) + "|" NEXT sCode = sCode + CRLF ENDSCAN sCode = sCode + [ENDTEXT] + REPLICATE(CRLF, 2) sCode = sCode + [sFile = SYS(2023) + "/_append.txt"] + CRLF sCode = sCode + [STRTOFILE(sStr, sFile)] + CRLF sCode = sCode + [APPEND FROM (sFile) DELIMITED WITH CHARACTER "|"] + CRLF SELECT(nSel) RETURN sCode *** |
CREATE CURSOR C_PERSONA (PETIPO C (1,0),PECODIGO C (6,0),PENOMBRE C (30,0)) ************************************************** *PETIPO|PECODIGO|PENOMBRE | TEXT TO sStr NOSHOW B | 5 |BANCO GALICIA | P | 5 |LAVADERO MONUMENTAL | ENDTEXT sFile = SYS(2023) + "/_append.txt" STRTOFILE(sStr, sFile) APPEND FROM (sFile) DELIMITED WITH CHARACTER "|" CREATE CURSOR C_COMPROB (COFECHA D (8,0),COTOTAL N (14,2),PETIPO C (1,0),PECODIGO C (6,0)) ************************************************** *COFECHA |COTOTAL |PETIPO |PECODIGO | TEXT TO sStr NOSHOW 06/12/2013|700 |B | 5 | 12/12/2013|660 |B | 5 | 12/12/2013|1000 |B | 5 | 13/12/2013|820 |B | 5 | 17/12/2013|700 |B | 5 | 19/12/2013|700 |B | 5 | 19/12/2013|400 |B | 5 | 21/12/2013|4000 |B | 5 | 23/12/2013|1100 |B | 5 | 23/12/2013|700 |B | 5 | 03/01/2014|1320 |B | 5 | 31/12/2013|4932 |P | 5 | 07/01/2014|820 |B | 5 | 09/01/2014|820 |B | 5 | 09/01/2014|820 |B | 5 | 11/01/2014|1320 |B | 5 | 11/01/2014|5940 |B | 5 | 12/01/2014|820 |B | 5 | 14/01/2014|600 |B | 5 | 15/01/2014|660 |B | 5 | 17/01/2014|2376 |B | 5 | 20/01/2014|1500 |B | 5 | ENDTEXT sFile = SYS(2023) + "/_append.txt" STRTOFILE(sStr, sFile) APPEND FROM (sFile) DELIMITED WITH CHARACTER "|" ****** Query a probar ******* SELECT * FROM c_Comprob Co JOIN c_Persona Pe ON Pe.PeTipo+Pe.PeCodigo==Co.PeTipo+Co.PeCodigo |
...
<span style="color:#CF6