FoxPro/Visual FoxPro - Desglosar una tabla

   
Vista:

Desglosar una tabla

Publicado por Daniel Mecchia (6 intervenciones) el 31/10/2014 21:00:48
Tengo un cursor asi:
cod_venc - id_lisveh - fecha_venc
1 - 35 - 01/05/2015
2 - 35 - 20/06/2015
3 - 35 - 25/06/2015
1 - 40 - 01/12/2014
2 - 40 - 20/12/2014
3 - 40 - 23/12/2014

necesito que se cambie su estructura para que quede así:

id_lisveh - fech_cod1 - fecha_cod2 - fecha_cod3
35 - 01/05/2015 - 20/06/2015 - 25/06/2015
40 - 01/12/2014 - 20/12/2014 - 23/12/2014

¿qué sentencia select puedo usar? o ¿qué código de VFP 9 me conviene?

Desde ya muchas gracias. Saludos cordiales.-
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Desglosar una tabla

Publicado por Fidel José (558 intervenciones) el 01/11/2014 00:33:24
Con este código puedes solucionar el problema.
La primer parte hasta el ENDTRY, seguramente no la necesitas porque ya tienes una tabla creada. Yo hice esto para poder generar el ensayo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
LOCAL LcText,lcFile,lnHand
lnHand=-1
lcFile="entrada.txt"
 
* 1 - Con los datos que envías, genero un cursor
TEXT TO lcText NOSHOW PRETEXT 7
1 - 35 - 01/05/2015
2 - 35 - 20/06/2015
3 - 35 - 25/06/2015
1 - 40 - 01/12/2014
2 - 40 - 20/12/2014
3 - 40 - 23/12/2014
ENDTEXT
 
STRTOFILE(lcText,lcFile)
lnHand=FOPEN(lcFile,0)
IF lnHand = -1
	MESSAGEBOX("No se pudo abrir "+lcFile,0,"Mensaje")
	RETURN
ENDIF
CREATE CURSOR OldDatos ("cod_venc" I, "id_lisveh" I ,"fecha_venc" D)
TRY
	LOCAL loex as Exception
	DO WHILE !FEOF(lnHand)
		lcGet=FGETS(lnHand,2048)
		IF !EMPTY(lcGet)
			lnLines=ALINES(gaLines,lcGet,1,"-")
			IF lnLInes=3
				lnCod=VAL(galines[1])
				lnId=VAL(galines[2])
				ldFe=CTOD(gaLines[3])
				INSERT INTO OldDatos (cod_venc,id_LisVeh,fecha_venc) ;
					values(lnCod,lnId,ldFe)
			ENDIF
		ENDIF
	ENDDO
CATCH TO loEx
	loex.UserValue=PROGRAM()
	MESSAGEBOX("Se ha producido un error:"+CHR(13);
		+loex.UserValue+CHR(13);
		+loex.Message+CHR(13) ;
		+"Error "+TRANSFORM(loEx.ErrorNo) + CHR(13) ;
		+"linea "+TRANSFORM(loex.LineNo) ,0,"Error")
 
FINALLY
	=FCLOSE(lnHand)
	SELECT OldDatos
	GO top
	BROWSE
ENDTRY
 
 
* 2 - Creo una tabla según se necesita
*     Genero un índice por id_LisVeh
 
CREATE TABLE NewDatos ("id_LisVeh" I , "fecha_cod1" D,"fecha_cod2" D,"fecha_cod3" D)
SELECT newDatos
INDEX ON ID_LisVeh TAG xIdLis
 
* 3 - Recorrido de datos desde OldDatos
*     Actualiza tabla NewDatos
 
SELECT OldDatos
SCAN
	lnId=id_LisVeh
	lcCampo="fecha_cod"+TRANSFORM(cod_venc)
	SELECT newDatos
	IF !INDEXSEEK(lnId,.f.,"NEWDATOS","XIDLIS")
		INSERT INTO newDatos (id_LisVeh) VALUES (lnId)
	ENDIF
	INDEXSEEK(lnId,.t.,"newDatos","xIdLis")
	replace (lcCampo) WITH oldDatos.fecha_venc
ENDSCAN
SELECT newDatos
GO top
BROWSE
 
SELECT oldDatos
USE
SELECT newDatos
USE
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Desglosar una tabla

Publicado por Daniel Mecchia (6 intervenciones) el 01/11/2014 15:04:22
Gracias Fidel José; espectacular lo tuyo, lo tiré en el Load del formulario, cambié los nombres de los campos y . . . perfecto lo que yo necesitaba.
Mil gracias.
Daniel Mecchia
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar