FoxPro/Visual FoxPro - Modificar tabla desde cuadro de comandos

 
Vista:
sin imagen de perfil

Modificar tabla desde cuadro de comandos

Publicado por Lotele (8 intervenciones) el 10/03/2017 21:42:14
Saludos desde Xalapa Veracruz
anteriormente tuve un problema con la exportación de Xls o Xlsx a DBF
el problema ya lo tengo solucionado, pero me lleva a otro dilema

al exportar la tabla, por mas que he intentado soluciones, no me respeta el tipo de datos en algunas columnas a la hora de exportar a DBF

haber si me logro explicar

esto es en la hoja de Excel
campo tipo ancho
dato1 texto 4 (aquí manejo números con que empiezan con un cero)
dato2 fecha 8
dato3 numero 15
dato4 caracter 15
dato5 texto 10 (aquí manejo números con que empiezan con un cero)

y como resultado después de exportar a DBF me queda así

campo tipo ancho
dato1 NUMERO 4 [como numero no me sirve](quiero conservar el numero que empiece con cero)
dato2 fecha 8
dato3 numero 15
dato4 caracter 15
dato5 NUMERO 10 [como numero no me sirve](quiero conservar el numero que empiece con cero)

alguien me puede asesorar, para saber si se puede MODIFICAR LA ESTRUCTURA DE LA TABLA POR MEDIO DE COMANDOS (estarán en un programa), para que POSTERIORMENTE esa información sea agregada a otra tabla

gracias
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
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Modificar tabla desde cuadro de comandos

Publicado por Fidel José (657 intervenciones) el 11/03/2017 01:06:17
El trabajo se divide en partes:

1) Crear un cursor con la estructura de datos que necesitas
2) Crear las reglas de validación de campos
3) Importar el archivo desde Microsoft Excel
4) Recorrer el archivo importado (que es una tabla dbf) y aplicar las reglas de validación.
5) Insertas en el cursor de la estructura correcta los datos validados
6) Agregas los datos del cursor a la tabla (o haces el trabajo que necesitas).

Incluso cuando los datos sean importados por automatización, es necesario aplicar reglas de validación de campo.
Las reglas de validación las puedes escribir en formato tipo xml para que resulte efectivo su reconcimiento.

Un ejemplito:
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
TRY
	LOCAL i,lnFields,;
		lcEnd_tag,;
		lcfield_Tag,;
		lcRooler,;
		lcValidation_Rool,;
		lxValue,lcVartype,lcType,lnLenght,lcPadl,lxDefault_Value,;
		loex as Exception
 
 
	*<simulando cursor importado>
	CREATE CURSOR curImport ;
	("A" N(8,0),;
	"B" C(8),;
	"C" N(10,4))
 
	INSERT INTO CURIMPORT (A,B,C) ;
		VALUES (7485, "20170128", 2436.1548)
 
	INSERT INTO CURIMPORT (A,B,C) ;
		VALUES (748, "20170131", 7684.368)
 
	INSERT INTO CURIMPORT (A,B,C) ;
		VALUES (9768, "20170215", 5440.28)
 
	*<crear cursor con campos correctos>
	CREATE CURSOR curCorrect ;
	("ID_" c(6),;
	"Fecha" d, ;
	"Importe" n(12,2))
 
	*<Regla de Validación>
	lcValidation_rool = "<field:1><type>C</type><lenght>6</lenght><padl>0</padl></field>" ;
			+"<field:2><type>D</type></field>"  ;
			+"<field:3><type>N</type><lenght>12</length><decimal>2</decimal></field>"
 
	*<Recorrer archivo importado>
 
	lcEnd_Tag = "</field>"
	SELECT curImport
	lnFields = AFIELDS(curImport)
	DIMENSION laValues(m.lnFields)
	SCAN
		laValues = null
 
		FOR i = 1 TO m.lnFields
 
			lxValue = EVALUATE(FIELD(i))
			lcVartype = VARTYPE(m.lxValue)
			lcfield_Tag = "<field:"+TRANSFORM(i)+">"
			lcRooler = STREXTRACT(m.lcValidation_rool,m.lcField_Tag,m.lcEnd_tag)
			IF !EMPTY(m.lcRooler)
				lcType = STREXTRACT(m.lcRooler,"<type>","</type>")
				lnLenght = VAL(STREXTRACT(m.lcRooler,"<lenght>","</lenght>"))
				lnDecimal = VAL(STREXTRACT(m.lcRooler,"<decimal>","</decimal>"))
				lcPadl = STREXTRACT(m.lcRooler,"<padl>","</padl>")
 
				lxDefaul_Value = ICASE(m.lcType="C","",;
									lcType$'IN',0,;
									lcType = "D",{},;
									lcType = "T",{//::},;
									lctype = "L",.F.)
 
 
 
				DO CASE
					CASE m.lcVartype = "N" AND m.lctype = "C"
						lxValue = ;
							IIF(EMPTY(m.lcPadl),;
								TRANSFORM(m.lxValue),;
								PADL(TRANSFORM(m.lxValue),m.lnLenght,m.lcPadl))
					CASE m.lcVartype = "C" AND m.lcType = "N"
						lxValue = VAL(m.lxValue)
					CASE m.lcVartype = "N" AND m.lctype = "N"
						lxValue = ROUND(lxValue,m.lnDecimal)
 
					CASE m.lcVartype = "C" AND m.lcType = "C"
						lxValue = ALLTRIM(m.lxValue)
 
					CASE m.lcVartype = "C" AND m.lcType = "D"
						lxValue = DATE(VAL(LEFT(m.lxValue,4)),;
									VAL(SUBSTR(m.lxValue,5,2)),;
									VAL(RIGHT(m.lxvalue,2)))
					OTHERWISE
						lxValue = m.lxDefaul_Value
				ENDCASE
			ENDIF
			laValues[i] = m.lxValue
		NEXT
 
		INSERT INTO curCorrect FROM ARRAY laValues
	ENDSCAN
 
	SELECT curImport
	BROWSE
 
	SELECT curCorrect
	BROWSE
CATCH TO loex
	loex.UserValue = PROGRAM()
	*ShowERror(loex)
FINALLY
	IF USED("curIMport")
		USE IN curimport
	ENDIF
	IF USED("curCorrect")
		USE IN curCorrect
	ENDIF
 
ENDTRY
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
sin imagen de perfil

Modificar tabla desde cuadro de comandos

Publicado por Lotele (8 intervenciones) el 13/03/2017 16:49:24
muchas gracias Fidel ...
probare tu sugerencia
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

Modificar tabla desde cuadro de comandos

Publicado por Gavino (1 intervención) el 04/04/2020 15:52:24
Gracias por tus aportes
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
Imágen de perfil de Leonardo Daniel A.
Val: 1.115
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Modificar tabla desde cuadro de comandos

Publicado por Leonardo Daniel A. (497 intervenciones) el 11/03/2017 04:22:09
Hola, pues con un simple ALTER TABLE


ALTER TABLE tuTabla ADD COLUMN DatoTemp Char(10)


// Si necesitas "x" cantidad de ceros
repla all DatoTemp with padl( alltrim( str( dato5 ) ), 3, '0' )

si solo necesitas agregar un cero
repla all DatoTemp with "0" + alltrim( str( dato5 ) )
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
sin imagen de perfil

Modificar tabla desde cuadro de comandos

Publicado por Lotele (8 intervenciones) el 13/03/2017 16:49:57
muchas gracias Tocayo...
probare tu sugerencia
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

Modificar tabla desde cuadro de comandos

Publicado por Alberto D'm (1 intervención) el 14/01/2018 04:37:44
Leonardo Daniel Eres un Maestro sensei , el mas grande solo 2 lineas y listo
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
sin imagen de perfil

Modificar tabla desde cuadro de comandos

Publicado por Lotele (8 intervenciones) el 13/03/2017 21:27:24
MUCHAS GRACIAS !!! por el apoyo brindado
me ha servido bastante en algunas tareas cotidianas para resolver mi trabajo y tenerlo al dia

les comparto lo que mas me facilito a resolver mi problema ...

como requisito, GUARDAR COMO [CSV(delimitado por comas)] el archivo XLS o XLSX a CSV

(tener en cuenta que los nombres de los campos o columnas no sobrepasen los 10 caracteres)
(también que el archivo XLSX tenga solo una hoja)

CLOSE ALL
CLEAR

CREATE TABLE Importa (Campo1 C(4), Campo2 C(13), Campo3 C(50), Campo4 C(15), etc....))

APPEND FROM "ruta donde esta ubicado el archivo\Archivo.CSV " DELIMITED

así convertirá todo dato en XLSX en carácter

espero también les sirva
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

Modificar tabla desde cuadro de comandos

Publicado por belen (1 intervención) el 26/10/2019 21:07:15
¿De qué manera se pueden Editar los datos de una Tabla?
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