do while vs scan

30/09/2003 - 00:54 por Noe diego Velazquez Hernandez | Informe spam
Hola foro !!

tengo una duda dentro del scan puedo utilizar un (select 1) no pierde la
secuencia del primer archivo ?

close data
select 1
use tabla1
select 2
use tabla2

scan
num=numemp
select 1
locate for num = keynumemp
if found()
ordenes
endif
endscan








PortalFox :: Nada corre como un zorro
http://www.portalfox.com

PortalFox - NNTP Forum Gateway

Preguntas similare

Leer las respuestas

#21 Ana María Bisbé York
07/10/2003 - 19:42 | Informe spam
Buenooo, a mí al menos, con dos profes de la talla de Víctor Espina y Carlos
Yohn me super - sobra !!!! Además de las aclaraciones previas de Alex...
tremendo team !!!

Gracias a todos,

¡¡Qué bonito quedó este hilo!!, verdad? Tremendo debate, me encantó y
aprendí mucho.

Saludos,

Ana

"Carlos Yohn Zubiria" escribió en el
mensaje news:#
¿No bastamos nosotros? :-))

Saludos,
A.G.P.


"Victor Espina" escribió en el mensaje
news:%239h$
> De hecho no funciona. El SCAN-ENDSCAN funciona muy bien mientras no
muevas
> manualmente el puntero de registro. Por ejemplo, lo siguiente genera
> problemas:
>
>
> SELECT tabla
> GO TOP
> SCAN
> ...
> SELECT tabla
> GO RECORD nLastPos
> ...
> SELECT tabla
> ENDSCAN
>
> Al menos en mi experiencia, cuando me ha tocado hacer algo como eso he
> tenido que usar el DO WHILE porque el SCAN se comporta de manera


errática
> luego del GO RECORD.
>
> ¿Alguien más puede confirmar esto?
>
> Saludos
>
> Victor Espina
>
> "Carlos Yohn Zubiria" wrote in message
> news:uGSNt8%
> > Cierto.
> > Pero ¿qué ocurre en funciones recursivas donde los recorridos anidados
se
> > deben efectuar no solo en la misma tabla sino en el mismo alias,


volver
al
> > registro adecuado y continuar... no estoy seguro de que funcione bien
con
> > scan. Digo: no estoy seguro. Hace tiempo encontré ciertos problemas


con
> esto
> > y cambié al do while para estos casos.
> >
> > Saludos,
> > A.G.P.
> >
> >
> > "Heberto Villavicencio" escribió en el
> mensaje
> > news:
> > > Hasta donde se (por mensajes leidos en este foro) el SCAN...ENDSCAN


se
> > > ejecuta mas rapido que el DO WHILE.. ENDDO
> > >
> > > "Victor Espina" escribió en el mensaje
> > > news:
> > > > Pues ya somos dos: yo hubiera jurado que tu respuesta era 100%
> correcta.
> > > > Hasta el día de hoy SIEMPRE hago un SELECT alias ANTES del
ENDSCAN
> > > pero
> > > > tal y como tu misma dices: menos mal que siempre hay alguien que


nos
> > > aclara
> > > > los malos entendidos.
> > > >
> > > > En cuanto a la diferencia de SCAN con DO WHILE, para mi la más
> > > significativa
> > > > es la necesidad del SKIP con el DO WHILE. Antes de que empezara a
> usar
> > el
> > > > SCAN, no puedo decirte la cantidad de veces que se me colgó un
> programa
> > > por
> > > > entrar en un ciclo infinito de DO WHILE... solo porque olvidé


poner
el
> > > SKIP
> > > > antes del ENDDO... :-)
> > > >
> > > > Saludos
> > > >
> > > > Victor Espina
> > > >
> > > >
> > > > "Ana María Bisbé York" wrote in


message
> > > > news:
> > > > > Alex:
> > > > >
> > > > > La verdad es que estaba convencida de lo contrario. Para mí la
única
> > > > > diferencia entre estos comandos estaba en el skip automático que
> > realiza
> > > > el
> > > > > scan.
> > > > > He mirado hasta en las ayudas y en VFP8 se dice explícitamente;
pero
> > en
> > > el
> > > > > VFP6 no y fue el que siempre utilicé.
> > > > >
> > > > > Menos mal que siempre uno de ustedes está atento y "ataja" los
> > > despistes.
> > > > Es
> > > > > increible lo que se aprende desde aquí. Muy agradecida como
siempre,
> > > > >
> > > > > Ana
> > > > >
> > > > > "Alex Feldstein [MVP]" escribió en el


mensaje
> > > > > news:
> > > > > > On Tue, 30 Sep 2003 02:01:16 +0200, "Ana María Bisbé York"
> > > > > > wrote:
> > > > > >
> > > > > > >Pero te digo más, como te quedas parado en la tabla1, si el
> > resultado
> > > > de
> > > > > la
> > > > > > >búsqueda es negativo pues la tabla1 va a fin de fichero y


sale
> del
> > > > ciclo
> > > > > del
> > > > > > >scan aunque la tabla2 tenga miles de registros que comprobar.
> > > > > >
> > > > > > Ana:
> > > > > >
> > > > > > Estas en lo cierto en los comentarios que haces en tu


respuesta
en
> > > > > > este hilo, excepto en este último. SCAN vuelve al area


original
> > (tabla
> > > > > > 2 en el ejemplo) y continúa.
> > > > > >
> > > > > >
> > > > > > Alex Feldstein
> > > > > > ________________________________
> > > > > > Microsoft Visual FoxPro MVP
> > > > > > Please respond in the public groups so that everybody
> > > > > > can benefit from the exchange.
> > > > > > Favor de responder en los foros públicos asi todos se
benefician.
> > > > > > (Address scrambled with ROT-13)
> > > > > > How To make good Newsgroups posts
> > > > > > http://dts-l.org/goodpost.htm
> > > > > > RFC 1855: Netiquette Guidelines
> > > > > > http://www.dtcc.edu/cs/rfc1855.html
> > > > > > How To Ask Questions The Smart Way
> > > > > > http://www.catb.org/~esr/faqs/smart-questions.html
> > > > > > Cómo hacer preguntas de manera inteligente:
> > > > > > http://www.sindominio.net/ayuda/pre...entes.html
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#22 Alex Feldstein [MVP]
07/10/2003 - 23:17 | Informe spam
Victor:

Por supuesto que no debes mover el puntero dentro de un Scan..Endscan
ya que en ese se basa.

Nota: No hace falta el Go Top en tu ejemplo.
SCAN (solo, sin For o While) siempre hace un Go Top
Usas For / While o Rest cuando quieres evitar eso y que comienze en
otro lado.



On Tue, 7 Oct 2003 08:15:48 -0400, "Victor Espina"
wrote:

De hecho no funciona. El SCAN-ENDSCAN funciona muy bien mientras no muevas
manualmente el puntero de registro. Por ejemplo, lo siguiente genera
problemas:


SELECT tabla
GO TOP
SCAN
...
SELECT tabla
GO RECORD nLastPos
...
SELECT tabla
ENDSCAN

Al menos en mi experiencia, cuando me ha tocado hacer algo como eso he
tenido que usar el DO WHILE porque el SCAN se comporta de manera errática
luego del GO RECORD.

¿Alguien más puede confirmar esto?

Saludos

Victor Espina





Alex Feldstein
________________________________
Microsoft Visual FoxPro MVP
Please respond in the public groups so that everybody
can benefit from the exchange.
Favor de responder en los foros públicos asi todos se benefician.
(Address scrambled with ROT-13)
How To make good Newsgroups posts
http://dts-l.org/goodpost.htm
RFC 1855: Netiquette Guidelines
http://www.dtcc.edu/cs/rfc1855.html
How To Ask Questions The Smart Way
http://www.catb.org/~esr/faqs/smart-questions.html
Cómo hacer preguntas de manera inteligente:
http://www.sindominio.net/ayuda/pre...entes.html
Respuesta Responder a este mensaje
#23 Carlos Yohn Zubiria
08/10/2003 - 10:32 | Informe spam
Gracias Alex,
A Victor le ocurre como a mi: la costumbre de usar 'do while' nos lleva a
primero de todo encontrar el primero:
go top
locate && parece un poquito mas rápido
locate for ...
do while !eof("mialias") and las condiciones extras que haya

Son manías personales que esta bien corregirlas.

Saludos,
A.G.P.


"Alex Feldstein [MVP]" escribió en el mensaje
news:
Victor:

Por supuesto que no debes mover el puntero dentro de un Scan..Endscan
ya que en ese se basa.

Nota: No hace falta el Go Top en tu ejemplo.
SCAN (solo, sin For o While) siempre hace un Go Top
Usas For / While o Rest cuando quieres evitar eso y que comienze en
otro lado.



On Tue, 7 Oct 2003 08:15:48 -0400, "Victor Espina"
wrote:

>De hecho no funciona. El SCAN-ENDSCAN funciona muy bien mientras no


muevas
>manualmente el puntero de registro. Por ejemplo, lo siguiente genera
>problemas:
>
>
>SELECT tabla
>GO TOP
>SCAN
> ...
> SELECT tabla
> GO RECORD nLastPos
> ...
> SELECT tabla
>ENDSCAN
>
>Al menos en mi experiencia, cuando me ha tocado hacer algo como eso he
>tenido que usar el DO WHILE porque el SCAN se comporta de manera errática
>luego del GO RECORD.
>
>¿Alguien más puede confirmar esto?
>
>Saludos
>
>Victor Espina



Alex Feldstein
________________________________
Microsoft Visual FoxPro MVP
Please respond in the public groups so that everybody
can benefit from the exchange.
Favor de responder en los foros públicos asi todos se benefician.
(Address scrambled with ROT-13)
How To make good Newsgroups posts
http://dts-l.org/goodpost.htm
RFC 1855: Netiquette Guidelines
http://www.dtcc.edu/cs/rfc1855.html
How To Ask Questions The Smart Way
http://www.catb.org/~esr/faqs/smart-questions.html
Cómo hacer preguntas de manera inteligente:
http://www.sindominio.net/ayuda/pre...entes.html
Respuesta Responder a este mensaje
#24 Victor Espina
08/10/2003 - 14:38 | Informe spam
Es cierto. Fijate que tampoco sabia lo del GO TOP. Hasta hoy pensaba que el
SCAN empezaba su recorrido a partir del registro actual en el alias.

Tocando de nuevo el tema de mover el puntero en un SCAN, ayer estaba
revisando el código fuente de DP4 para corregir un error que reportó un
usuario, y me conseguí con la sorpresa de que estaba haciendo un SKIP -1 y
luego un SKIP dentro de un ciclo SCAN-ENDSCAN.

Me dió entonces por probar todo lo que daba por sentado sobre el
SCAN-ENDSCAN, incluyendo las cosas que han salido en este hilo. Y estos
fueron los resultados:

1. El SCAN-ENDSCAN hace un GO TOP implícito sobre el área de trabajo actual
al empezar el SCAN: CIERTO

2. El SCAN-ENDSCAN hace un SELECT implícito antes de pasar al siguiente
registro: CIERTO

3. El ciclo SCAN finalizará si la última área de trabajo abierta resulta en
BOF o EOF: FALSO, debido a lo indicado en 2).

4. No es posible mover el puntero dentro del área de trabajo que se está
recorriendo dentro de un ciclo SCAN: FALSO!!!! Hice pruebas adelantando y
retrasando el puntero de registro con SKIP y GO RECORD y en TODOS los casos
el ciclo continuó a partir de la posición final del puntero al llegar al
ENDSCAN, pasando al siguiente registro por supuesto. Este comportamiento es
consistente incluso si hay un índice activo en el área de trabajo que se
recorre.


Creo que seria interesante que alguien más confirmara estos resultados para
que así todos estemos claros con respecto al alcance y limitaciones del
SCAN.

Saludos

Victor Espina




"Carlos Yohn Zubiria" wrote in message
news:
Gracias Alex,
A Victor le ocurre como a mi: la costumbre de usar 'do while' nos lleva a
primero de todo encontrar el primero:
go top
locate && parece un poquito mas rápido
locate for ...
do while !eof("mialias") and las condiciones extras que haya

Son manías personales que esta bien corregirlas.

Saludos,
A.G.P.


"Alex Feldstein [MVP]" escribió en el mensaje
news:
> Victor:
>
> Por supuesto que no debes mover el puntero dentro de un Scan..Endscan
> ya que en ese se basa.
>
> Nota: No hace falta el Go Top en tu ejemplo.
> SCAN (solo, sin For o While) siempre hace un Go Top
> Usas For / While o Rest cuando quieres evitar eso y que comienze en
> otro lado.
>
>
>
> On Tue, 7 Oct 2003 08:15:48 -0400, "Victor Espina"
> wrote:
>
> >De hecho no funciona. El SCAN-ENDSCAN funciona muy bien mientras no
muevas
> >manualmente el puntero de registro. Por ejemplo, lo siguiente genera
> >problemas:
> >
> >
> >SELECT tabla
> >GO TOP
> >SCAN
> > ...
> > SELECT tabla
> > GO RECORD nLastPos
> > ...
> > SELECT tabla
> >ENDSCAN
> >
> >Al menos en mi experiencia, cuando me ha tocado hacer algo como eso he
> >tenido que usar el DO WHILE porque el SCAN se comporta de manera


errática
> >luego del GO RECORD.
> >
> >¿Alguien más puede confirmar esto?
> >
> >Saludos
> >
> >Victor Espina
>
>
>
> Alex Feldstein
> ________________________________
> Microsoft Visual FoxPro MVP
> Please respond in the public groups so that everybody
> can benefit from the exchange.
> Favor de responder en los foros públicos asi todos se benefician.
> (Address scrambled with ROT-13)
> How To make good Newsgroups posts
> http://dts-l.org/goodpost.htm
> RFC 1855: Netiquette Guidelines
> http://www.dtcc.edu/cs/rfc1855.html
> How To Ask Questions The Smart Way
> http://www.catb.org/~esr/faqs/smart-questions.html
> Cómo hacer preguntas de manera inteligente:
> http://www.sindominio.net/ayuda/pre...entes.html


Respuesta Responder a este mensaje
#25 Ana María Bisbé York
08/10/2003 - 15:43 | Informe spam
Pues del resumen de Víctor yo tenía conceptos equivocados en casi todos
los aspectos. Creo que será muy interesante poder resumir todos estos
matices y subirlo a Portalfox, teniendo en cuenta sobre todo la poca gente
que anda revisando y pronto ya eliminarán el hilo según los recortes que
están haciendo en los NG de MS.

Gracias por los aportes,

Saludos,

Ana

"Victor Espina" escribió en el mensaje
news:#$
Es cierto. Fijate que tampoco sabia lo del GO TOP. Hasta hoy pensaba que


el
SCAN empezaba su recorrido a partir del registro actual en el alias.

Tocando de nuevo el tema de mover el puntero en un SCAN, ayer estaba
revisando el código fuente de DP4 para corregir un error que reportó un
usuario, y me conseguí con la sorpresa de que estaba haciendo un SKIP -1 y
luego un SKIP dentro de un ciclo SCAN-ENDSCAN.

Me dió entonces por probar todo lo que daba por sentado sobre el
SCAN-ENDSCAN, incluyendo las cosas que han salido en este hilo. Y estos
fueron los resultados:

1. El SCAN-ENDSCAN hace un GO TOP implícito sobre el área de trabajo


actual
al empezar el SCAN: CIERTO

2. El SCAN-ENDSCAN hace un SELECT implícito antes de pasar al siguiente
registro: CIERTO

3. El ciclo SCAN finalizará si la última área de trabajo abierta resulta


en
BOF o EOF: FALSO, debido a lo indicado en 2).

4. No es posible mover el puntero dentro del área de trabajo que se está
recorriendo dentro de un ciclo SCAN: FALSO!!!! Hice pruebas adelantando y
retrasando el puntero de registro con SKIP y GO RECORD y en TODOS los


casos
el ciclo continuó a partir de la posición final del puntero al llegar al
ENDSCAN, pasando al siguiente registro por supuesto. Este comportamiento


es
consistente incluso si hay un índice activo en el área de trabajo que se
recorre.


Creo que seria interesante que alguien más confirmara estos resultados


para
que así todos estemos claros con respecto al alcance y limitaciones del
SCAN.

Saludos

Victor Espina




"Carlos Yohn Zubiria" wrote in message
news:
> Gracias Alex,
> A Victor le ocurre como a mi: la costumbre de usar 'do while' nos lleva


a
> primero de todo encontrar el primero:
> go top
> locate && parece un poquito mas rápido
> locate for ...
> do while !eof("mialias") and las condiciones extras que haya
>
> Son manías personales que esta bien corregirlas.
>
> Saludos,
> A.G.P.
>
>
> "Alex Feldstein [MVP]" escribió en el mensaje
> news:
> > Victor:
> >
> > Por supuesto que no debes mover el puntero dentro de un Scan..Endscan
> > ya que en ese se basa.
> >
> > Nota: No hace falta el Go Top en tu ejemplo.
> > SCAN (solo, sin For o While) siempre hace un Go Top
> > Usas For / While o Rest cuando quieres evitar eso y que comienze en
> > otro lado.
> >
> >
> >
> > On Tue, 7 Oct 2003 08:15:48 -0400, "Victor Espina"
> > wrote:
> >
> > >De hecho no funciona. El SCAN-ENDSCAN funciona muy bien mientras no
> muevas
> > >manualmente el puntero de registro. Por ejemplo, lo siguiente genera
> > >problemas:
> > >
> > >
> > >SELECT tabla
> > >GO TOP
> > >SCAN
> > > ...
> > > SELECT tabla
> > > GO RECORD nLastPos
> > > ...
> > > SELECT tabla
> > >ENDSCAN
> > >
> > >Al menos en mi experiencia, cuando me ha tocado hacer algo como eso


he
> > >tenido que usar el DO WHILE porque el SCAN se comporta de manera
errática
> > >luego del GO RECORD.
> > >
> > >¿Alguien más puede confirmar esto?
> > >
> > >Saludos
> > >
> > >Victor Espina
> >
> >
> >
> > Alex Feldstein
> > ________________________________
> > Microsoft Visual FoxPro MVP
> > Please respond in the public groups so that everybody
> > can benefit from the exchange.
> > Favor de responder en los foros públicos asi todos se benefician.
> > (Address scrambled with ROT-13)
> > How To make good Newsgroups posts
> > http://dts-l.org/goodpost.htm
> > RFC 1855: Netiquette Guidelines
> > http://www.dtcc.edu/cs/rfc1855.html
> > How To Ask Questions The Smart Way
> > http://www.catb.org/~esr/faqs/smart-questions.html
> > Cómo hacer preguntas de manera inteligente:
> > http://www.sindominio.net/ayuda/pre...entes.html
>
>


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida