FoxPro/Visual FoxPro - agregar columna a una sentencia sql

   
Vista:

agregar columna a una sentencia sql

Publicado por sebastian (244 intervenciones) el 13/11/2012 17:19:38
Buenas porfa tengo una sentencia simple que muestra un listados de varios clientes, pero en esta sentencia necesito agregar un campo numerico y a este campo dividirlo en el total de registros de la consulta.

tengo un text que muestra en monto a evaluar por ejmplo 2,500

selec (thisform.text1.value) as monto, codi_clien, fecha, sede from tabla1 into cursor xx

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

agregar columna a una sentencia sql

Publicado por Fidel (321 intervenciones) el 14/11/2012 00:11:32
Puedes obtener un cursor modificable si tienes VFP 9
... INTO CURSOR xx READWRITE
Para versiones anteriores tendrás que usar INTO DBF Ruta\NombreTabla

Luego, si no utilizas nombres largos de campo, puedes hacer
ALTER TABLE xx ADD COLUMN promedia n(12,2)
Lo que hay que tener en cuenta es que para efectuar ALTER TABLE sobre un cursor, Visual Fox hace una copia del cursor como una tabla free, por lo que las características especiales de un tabla que pertenece a una DBC se pierden.
En el caso de tener nombres largos de campos, puedes crear tu cursor con nombres cortos (hasta 10 caracteres) si en la lista utilizas AS.

Alternativamente puedes incorporar una función a cualquier *.prg que tengas en SET PROCEDURE
FUNCTION AddNumField(xnInt,xnDec)
*****************************
* xnInt Cantidad de enteros && uno por default
* xnDec. Cantidad de decimales (nada por default)

RETURN IIF(EMPTY(xnInt),"9",REPLICATE("9",xnInt));
+IIF(!EMPTY(xnDec),"."+REPLICATE("9",xnDec),"")
ENDFUNC

Y haces algo como este ejemplo:
IF USED("PEPEX")
SELECT PEPEX
USE
ENDIF
dia1=CTOD("01/01/2010")
dia2=dia1+60
cExpre="Suma N(12,2)"
SELECT fecha,factura,total,AddNumField(9,2);
FROM movim ;
WHERE BETWEEN(fecha,dia1,dia2) ;
INTO CURSOR pepex READWRITE
SELECT PEPEX

cCampo=Fields(FCOUNT()) && cCampo toma el nombre del último campo agregado.
replace ALL &cCampo WITH 0 && coloca todos los valores del último campo en cero
GO top
BROWSE
***********************************************************************************************
En el caso planteado
***********************
* Nota: al indicar SELECT (mValor) AS MONTO incorporamos un campo que tendrá el mismo valor en cada registro (el valor de mValor). Hay que evaluar la necesidad de esta columna ya que es una constante.

1) Con Alter TAble
---------------
if used("xx")
select xx
use
endif
mValor=thisform.Text1.Value
select (mValor) as monto, codi_clien, fecha, sede ;
from tabla1 into cursor xx READWRITE
ALTER TABLE XX ADD COLUMN Pmedia N(12,2)
SCAN
REPLACE pmedia with (Cálculo_de_pMedia)
ENDSCAN
go top
browse


1) Con User Function
------------------
if used("xx")
select xx
use
endif
mValor=thisform.Text1.Value
select (mValor) as monto, codi_clien, fecha, sede, AddNumField(9,2) ;
from tabla1 into cursor xx READWRITE

SCAN
REPLACE pmedia with (Cálculo_de_pMedia)
ENDSCAN
go top
browse
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