FoxPro/Visual FoxPro - Dividir campos de una tabla entre mil

 
Vista:
Imágen de perfil de Rogelio
Val: 19
Ha aumentado 1 puesto en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Dividir campos de una tabla entre mil

Publicado por Rogelio (12 intervenciones) el 03/05/2018 19:04:56
Buenas... Necesito dividir ciertos campos de varias tablas entre 1000. Lo hago de ésta manera:

PUBLIC VDIVISOR
VDIVISOR=1000

SET EXCLUSIVE ON
USE C:\SBTK\SBT32\ICDATA\ICDIST02.DBF
REPLACE ALL AMOUNT WITH ROUND(AMOUNT/VDIVISOR,2)
REPLACE ALL FAMOUNT WITH ROUND(FAMOUNT/VDIVISOR,2)
CLOSE DATABASE
SET EXCLUSIVE OFF

Y así sucesivamente.

Conocen una manera en que pueda abrir varias tablas a la vez y reemplazar solo los campos que sean numéricos por su valor entre 1.000.

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

Dividir campos de una tabla entre mil

Publicado por Fidel José (657 intervenciones) el 04/05/2018 01:53:10
HUmm. Resulta un tanto peligroso.
Podés hacer una lista de tablas (o un array) y basarte en Afields() para saber qué hay que reemplazar.
El tema es que tenés que asegurarte de no repetir el proceso.
Básicamente sería algo así:
* En este caso se modificarán los campos numéricos que tengan más de 10 dígitos y dos decimales *
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
LOCAL lcLista,i,j,lnFields,lcField,lcTabla
 
lcLista = "Tabla1,Tabla3,tabla15"
 
FOR i = 1 TO GETWORDCOUNT(m.lcLista,CHR(44))
	lcTabla = GETWORDNUM(m.lclista,i,CHR(44))
 
	IF USED(m.lcTabla)
 
		lnFields = AFIELDS(lafields,m.lcTabla)
		FOR j = 1 TO m.lnFields
			IF lafields[j,2] = "N" ;
				AND laFields[j,3] > 10 ;
				AND laFields[j,4] = 2
				lcField = laFields[j,1]
				SELECT (m.lcTabla)
				SCAN
					replace (lcField) WITH ROUND(EVALUATE(m.lcTabla+"."+m.lcfield)/1000 , 2)
 
				ENDSCAN
			ENDIF
		NEXT
	ENDIF
NEXT
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

Dividir campos de una tabla entre mil

Publicado por Leonardo Daniel A. (497 intervenciones) el 04/05/2018 20:10:25
Busca en la ayuda de Visual Foxpro la funcion ADIR.... ahi esta tu solucion.... el ejemplo es muy practico y claro
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