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

#26 Carlos Yohn Zubiria
09/10/2003 - 10:25 | Informe spam
1.- Salvo que incluyas el alcance 'Rest'
4.- No te entiendo bien: ¿Donde continúa? ¿En el registro que debiera o en
el nuevo en el que está situado ahora el puntero? ¿Recupera el puntero a su
situacíón?

De todas las maneras yo no cantaría victoria a no ser que alguien nos
confirme que en versiones posteriores a la 5 se ha corregido algo referencte
al Scan.
Tuve bien comprobado (por los problmeas que me dió) que no me servía scan
para ciertos escenarios. Y no lo volveré a usar salvo en aquellas
situaciones en las que esté muy seguro de su funcionamiento. Con do while
estoy 100% seguro.

Saludos,
A.G.P.


"Victor Espina" escribió en el mensaje
news:%23$
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
#27 Alex Feldstein [MVP]
09/10/2003 - 12:02 | Informe spam
On Wed, 8 Oct 2003 08:38:18 -0400, "Victor Espina"
wrote:

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.




No se quien ha dicho que no es posible,. Si es posible mover el
puntero pero no es generalmente recomendable y debe hacerse con
cuidado. Quizas hayas entendido mal.


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
#28 Victor Espina
09/10/2003 - 14:13 | Informe spam
No alex, lo que pasa es que tuve una experiencia parecida a la de Carlos
Yhon con respecto al SCAN y el puntero de registro. Creo, igual que él, que
el problema se remontaba a VFP 5; lo cierto es que por alguna razón tenia en
mi cabeza como un HECHO que no se debia mover el puntero de la tabla que se
recorria con el SCAN. Para mi sorpresa, no pude reproducir el
comportamiento en VFP6 y no tengo el VFP5 a la mano para probar.

Saludos

Victor


"Alex Feldstein [MVP]" wrote in message
news:
On Wed, 8 Oct 2003 08:38:18 -0400, "Victor Espina"
wrote:

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


No se quien ha dicho que no es posible,. Si es posible mover el
puntero pero no es generalmente recomendable y debe hacerse con
cuidado. Quizas hayas entendido mal.


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
#29 Victor Espina
09/10/2003 - 14:16 | Informe spam
1. Ok.
4. Continua en el registro siguiente a donde quedó después del SKIP/GO
RECORD. Supongamos que tienes una tabla con 10 registros, y haces esto:

SELECT tabla
SCAN
?RECNO()
IF RECNO()=5
GO RECORD 9
ENDIF
ENDSCAN

el resultado de eso es:
1
2
3
4
5
10

Lástima que no tenga a mano el VFP5 para poder probar cual erá el problema
real con el SCAN.

Saludos

Victor Espina

"Carlos Yohn Zubiria" wrote in message
news:%
1.- Salvo que incluyas el alcance 'Rest'
4.- No te entiendo bien: ¿Donde continúa? ¿En el registro que debiera o en
el nuevo en el que está situado ahora el puntero? ¿Recupera el puntero a


su
situacíón?

De todas las maneras yo no cantaría victoria a no ser que alguien nos
confirme que en versiones posteriores a la 5 se ha corregido algo


referencte
al Scan.
Tuve bien comprobado (por los problmeas que me dió) que no me servía scan
para ciertos escenarios. Y no lo volveré a usar salvo en aquellas
situaciones en las que esté muy seguro de su funcionamiento. Con do while
estoy 100% seguro.

Saludos,
A.G.P.


"Victor Espina" escribió en el mensaje
news:%23$
> 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
> >
> >
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida