FoxPro/Visual FoxPro - FOR

 
Vista:

FOR

Publicado por CIANURO (53 intervenciones) el 12/09/2005 23:13:43
SI PUEDEN AYUDARME, ESTOY COMENZANDO CON VISUAL FOXPRO. COMO HAGO PARA RECORRER UNA TABLA CON EL COMANDO FOR, TENGO UNOS REGISTROS DEL 01 AL 10 Y NECESITO SABER EN QUE MOMENTO ESTOY EN UN DETERMINADO REGISTRO. HE TRATADO CON ALGUNAS SINTAXIS DE ALGUNOS LIBROS PERO NO ENTIENDO MUY BIEN.

GRACIAS DE ANTEMANO Y SALUDOS
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

RE:FOR

Publicado por Manuel (344 intervenciones) el 13/09/2005 01:06:29
La función RECNO( ) te da el número de registro.
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

RE:FOR

Publicado por cianuro (53 intervenciones) el 13/09/2005 14:32:47
de acuerdo, pero mi duda es acerca de por ejemplo, si yo quiero recorrer la tabla e ir haciendo algun calculo, o si yo quiero modificar un lote de registros con el FOR, esa es mi duda.
gracias
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

RE:FOR

Publicado por Manuel (344 intervenciones) el 13/09/2005 18:49:54
En ese caso, según la ayuda de VisualFox, los comandos que pueden usar FOR son:
AVERAGE,INDEX,BLANK,LABEL,BROWSE,LIST,CALCULATE,LOCATE,CHANGE,RECALL,COPY TO,REPLACE,COPY TO ARRAY,REPLACE FROM ARRAY,COUNT,REPORT,DELETE,SCAN,DISPLAY,SORT,EDIT,SUM,EXPORT,TOTAL
De esa forma, para hacer un cálculo o proceso en un grupo de registros, éstos deben cumplir con una condición común.
Por ejemplo:
COUN TO vDestino FOR recno()>10 &&guarda en vdestino cuántos registros tiene posición mayor que 10.
REPL Valor with 0 for codigo='xyz-01' &&pone 0 en el campo valor de los registros que tienen codigo='xyz-01'.
LOCATE FOR pais='Grecia' AND ciudad='Atenas' &&mueve el cursor al primer registro de país Grecia y ciudad Atenas.
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

RE:FOR

Publicado por cianuro (53 intervenciones) el 13/09/2005 21:39:07
Disculpa Manuel no se si me explico bien, pero lo que no capto es: para que situacion podria yo utilizar el FOR?
tengo este ejemplo: y no entiendo muy bien

este es el ejemplo:
SET TALK OFF
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'data\testdata')
USE customer && Abre la tabla Customer
STORE 2 TO gnI && Valor inicial

FOR gnCount = gnI TO gnJ
GOTO gnCount && Mueve el puntero de registro
DISPLAY company && Muestra el nombre de empresa
ENDFOR

gracias y disculpa la molestia
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

RE:FOR

Publicado por Manuel (344 intervenciones) el 13/09/2005 22:05:56
En cuanto al FOR, se usa para repetir cierta programación una cantidad definida de veces. Digamos, incrementa una variable desde un valor inicial hasa un valor final, yendo de 1 en 1, de 2 en 2, o como nosotros le definamos. Se finaliza con ENDFOR (o con NEXT).
Así, si decimos FOR I=15 TO 35 STEP 5, entonces la I vale 15, luego 20, 25, 30 y 35 (el salto es de 5 en 5)
Los usos:
-Imprimir una tabla de multiplicar (ejemplo la del 7): FOR i=1 TO 10 y dentro le pones ?7*i, luego ENDFOR
-Revisar los datos de un arreglo(array): FOR I=1 TO ALEN(TuArray), y dentro lo ves ?TuArray[i], luego ENDFOR
-Y muchos otros casos donde sabes cuántas veces exactas hará un mismo proceso.
En cuanto al uso dentro de la tabla, el ejemplo inicia con gni=2 y gnj no se ve inicializado, pero debe tener un valor. El ejemplo, recorre la tabla yando al registro 2, luego al 3, al 4, etc. según vaya cambiando gnCount. La instrucción que nos lleva al registro es GOTO gnCount. Y cada vez que llega al registro, despliega el campo company.
Si continúan tus dudas, pregunta de nuevo. Para eso estamos para ayudarnos.
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

RE:FOR

Publicado por cianuro (53 intervenciones) el 13/09/2005 22:53:16
tengo una tabla y quisiera recorrerla ejemplo:
vista.dbf y tiene los campos codigo y descripcion
entonces seria asi?

for i = 1 to (vista)
que debo escribir aqui para recorrer el campo codigo?
endfor

o estoy equivocado?

necesito tu explicacion y disculpa
gracias Manuel
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

RE:FOR

Publicado por Manuel (344 intervenciones) el 13/09/2005 23:13:20
Si vas a recorrerla en todos los registros, una forma sería esta:
SELE VISTA
regs=RECCOUNT() &&cuenta cuántos registros tiene la tabla
FOR i=1 to nregs
GOTO i &&en este momento estás en el registro i. Puedes hacer lo que quieras.
?codigo,descripcion &&por ejemplo, imprimimos el valor de los campos
ENDFOR

Otra forma sería esta:
SELE VISTA
GO TOP
DO WHILE !EOF()
?codigo,descripcion
SKIP
ENDD

Otra forma es así:
SELE VISTA
SCAN
?codigo,descripcion
ENDSCAN

La primera no respeta orden y va por los registros físicamente. La segunda se mueve según el índice que esté activo. La tercera también obedece al índice.
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

RE:FOR

Publicado por cianuro (53 intervenciones) el 13/09/2005 23:36:08
ya estoy entendieno un poco mejor Manuel, ahora en el caso de la rutina regs=RECCOUNT(), no podrìa usar otra variable en vez de RECCOUNT()? no se pregunto, por que seria como hacerlo mas mecanico, mas bien que flexible.

A proposito necesito recorrer una tabla o vistas (vapartamento.dbf,vgastos.dbf) para insertar los gastos y el numero de apartemnot a otra vista (vgastapartamento.dbf)

tengo este codigo:

select vapartamento
select vgastos
select vgastapartamento

select vapartamento
cNroapto = vapartamento.nro_apto

select vgastos
go top
cCod = vgastos.codigo
for i = 1 to cCod
select vgastapartamento
insert into vgastapartamento (nro_apto,cod_gasto) values (cNroapto,cCod )
endfor
*****
claro debo recorrer tambien vapartamento.dbf, pero no hallo el lugar donde colocarla, ya que el unico que esta dentro del do while es vgastos.dbf

ayudame por favor con alguna luz
te lo agradezco amigo
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

RE:FOR

Publicado por Lalo (75 intervenciones) el 14/09/2005 00:50:31
Hola.

Escribeme al coorreo, pero por favor has la pregunta lo mas clara posible para poder entender lo que quieres hacer y con todo gusto te ayudare en lo que pued

En todo caso de lo que te ha dicho Manuel , tienes sufiente detalle para que resuelvas tu problema

Hasta pronto.
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

RE:FOR

Publicado por Manuel (344 intervenciones) el 14/09/2005 03:06:59
RECCOUNT() es una función de Fox que devuelve el número de registros de una tabla.
Los valores inicial y final del FOR pueden ser variables numéricas que contengan los valores que deseamos como límites.
Entre los ciclos para recorrer las tablas, FOR, DO WHILE Y SCAN, el FOR es poco adecuado. Lo mejor es usar DO WHILE o SCAN para hacerlo.
Si tu idea es tener una tabla donde puedas asignarle gastos a los apartamentos, puedes seguir la siguiente lógica:
1. VAPARTAMENTO tiene código y descripcion
2. VGASTOS tiene codigo y descripcion
3. VGASTADEPARTAMENTO tiene codigoapartamento,codigogasto y valor
4. Recorres APARTAMENTO
5. Para cada registro de APARTAMENTO:
*Seleccionas VGASTADEPARTAMENTO
*Cargas todos los gastos (esto sólo llenará el campo codigogasto y dejará vacíos los demás campos)
*Reemplazas todos los registros con campo vacío poniéndoles codigoapartamento el código del apartamento donde vas.
6. Fin del bucle.

SELE APTO
SCAN
COD=CODIGOAPTO
SELE GASTAPTO
APPE FROM GASTO
REPL CODIGOAPTO WITH COD FOR EMPTY(CODIGOAPTO)
SELE APTO
ENDSCAN

Abrevié los nombres, pero sólo es una idea.
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

RE:FOR

Publicado por cianuro (53 intervenciones) el 14/09/2005 16:58:27
porque la idea es asignar todos los gastos a cada apartamento, lo probaré,

gracias de todos modos Manuel, puedo seguir preguntandote acerca de este codigo?
disculpa tanta molestia amigo, pero por alli voy

saludos
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

RE:FOR

Publicado por Manuel (344 intervenciones) el 14/09/2005 21:46:23
Claro.. pruébalo, inventa, y pregunta.
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

RE:FOR

Publicado por cianuro (53 intervenciones) el 20/09/2005 18:46:26
Que tal he estado creando el codigo pero no me funciona... si me pueden ayudar
gracias
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