Discussion:
Algo muy raro con el replace
(demasiado antiguo para responder)
MPOLO S.L. - Departamento Calidad
2004-08-04 06:59:47 UTC
Permalink
Estimado grupo:

Tengo una tabla creada con create cursor llamada xmedicion. En el siguiente
código:

create cursor xmedicion (padre c(15),hijo c(15),partida c(7), descrip
c(100), cantidad y, longitud y, anchura y, altitud y, parcial y)
&& Cargo varios registros en xmedicion mediante un append from

Entonces corro la siguiente rutina de actualizacion:

select xmedicion
go top
do while !eof()
wait window " Asignando mediciones al componente "+xmedicion.hijo
timeout .5
select capipart from xcapi inner join xcapipar on
xcapi.codea=substr(xcapipar.capipart,1,3) and
xcapipar.codecomp=xmedicion.hijo
where codecapi=xmedicion.padre into cursor xcapito
replace partida with
iif(reccount("xcapito")=1,alltrim(xcapito.capipart),"") in xmedicion
skip
enddo

Este bloque sería exactamente igual a este otro ( en efectos claro):

select xmedicion
scan for !eof()
wait window " Asignando mediciones al componente "+xmedicion.hijo
timeout .5
select capipart from xcapi inner join xcapipar on
xcapi.codea=substr(xcapipar.capipart,1,3) and
xcapipar.codecomp=xmedicion.hijo
where codecapi=xmedicion.padre into cursor xcapito
replace partida with
iif(reccount("xcapito")=1,alltrim(xcapito.capipart),"") in xmedicion
endscan

Lo curioso del tema es que ninguno de los dos anda correctamente. Si
inhabilito la linea del replace, el scan funciona de principio a fin, por el
contrario si lo dejo habilitado, el scan se corta en el primer ingreso, es
decir, modifica el primer registro y se corta

Es más, si hago:

select xmedicion
scan for !eof()
wait window " Asignando mediciones al componente "+xmedicion.hijo
timeout .5
replace partida with "" in xmedicion
endscan

Tampoco funciona.

Lo raro es que antes si que funcionaba, El cursor es en memoria, no tiene
índices, no me explico que puede estar pasando

Gracias por su ayuda

Saludos

Ing. Martin R Sanchez Arnoletto
Menorca
Caracol
2004-08-04 07:35:32 UTC
Permalink
Prova asi

select xmedicion
go top
do while !eof()
wait window " Asignando mediciones al componente "+xmedicion.hijo
timeout .5
select capipart from xcapi inner join xcapipar on
xcapi.codea=substr(xcapipar.capipart,1,3) and
xcapipar.codecomp=xmedicion.hijo
where codecapi=xmedicion.padre into cursor xcapito

select xmedicion
replace partida with
iif(reccount("xcapito")=1,alltrim(xcapito.capipart),"")
skip
enddo


tambien podes usar scan

Saludos!
--
Dott. Facundo Nunes
***@ibisoft.it
IBISOFT srl
Parma - Italia
Post by MPOLO S.L. - Departamento Calidad
Tengo una tabla creada con create cursor llamada xmedicion. En el siguiente
create cursor xmedicion (padre c(15),hijo c(15),partida c(7), descrip
c(100), cantidad y, longitud y, anchura y, altitud y, parcial y)
&& Cargo varios registros en xmedicion mediante un append from
select xmedicion
go top
do while !eof()
wait window " Asignando mediciones al componente "+xmedicion.hijo
timeout .5
select capipart from xcapi inner join xcapipar on
xcapi.codea=substr(xcapipar.capipart,1,3) and
xcapipar.codecomp=xmedicion.hijo
where codecapi=xmedicion.padre into cursor xcapito
replace partida with
iif(reccount("xcapito")=1,alltrim(xcapito.capipart),"") in xmedicion
skip
enddo
select xmedicion
scan for !eof()
wait window " Asignando mediciones al componente "+xmedicion.hijo
timeout .5
select capipart from xcapi inner join xcapipar on
xcapi.codea=substr(xcapipar.capipart,1,3) and
xcapipar.codecomp=xmedicion.hijo
where codecapi=xmedicion.padre into cursor xcapito
replace partida with
iif(reccount("xcapito")=1,alltrim(xcapito.capipart),"") in xmedicion
endscan
Lo curioso del tema es que ninguno de los dos anda correctamente. Si
inhabilito la linea del replace, el scan funciona de principio a fin, por el
contrario si lo dejo habilitado, el scan se corta en el primer ingreso, es
decir, modifica el primer registro y se corta
select xmedicion
scan for !eof()
wait window " Asignando mediciones al componente "+xmedicion.hijo
timeout .5
replace partida with "" in xmedicion
endscan
Tampoco funciona.
Lo raro es que antes si que funcionaba, El cursor es en memoria, no tiene
índices, no me explico que puede estar pasando
Gracias por su ayuda
Saludos
Ing. Martin R Sanchez Arnoletto
Menorca
MPOLO S.L. - Departamento Calidad
2004-08-04 08:12:58 UTC
Permalink
jejje Ya lo he probado, sin resultados

Es extremadamente raro
es algo que he hecho infinidad de veces

Saludos y gracias

Ing. Martin R Sanchez Arnoletto
Menorca
Post by Caracol
Prova asi
select xmedicion
go top
do while !eof()
wait window " Asignando mediciones al componente "+xmedicion.hijo
timeout .5
select capipart from xcapi inner join xcapipar on
xcapi.codea=substr(xcapipar.capipart,1,3) and
xcapipar.codecomp=xmedicion.hijo
where codecapi=xmedicion.padre into cursor xcapito
select xmedicion
replace partida with
iif(reccount("xcapito")=1,alltrim(xcapito.capipart),"")
skip
enddo
tambien podes usar scan
Saludos!
--
Dott. Facundo Nunes
IBISOFT srl
Parma - Italia
Post by MPOLO S.L. - Departamento Calidad
Tengo una tabla creada con create cursor llamada xmedicion. En el
siguiente
Post by MPOLO S.L. - Departamento Calidad
create cursor xmedicion (padre c(15),hijo c(15),partida c(7), descrip
c(100), cantidad y, longitud y, anchura y, altitud y, parcial y)
&& Cargo varios registros en xmedicion mediante un append from
select xmedicion
go top
do while !eof()
wait window " Asignando mediciones al componente "+xmedicion.hijo
timeout .5
select capipart from xcapi inner join xcapipar on
xcapi.codea=substr(xcapipar.capipart,1,3) and
xcapipar.codecomp=xmedicion.hijo
where codecapi=xmedicion.padre into cursor xcapito
replace partida with
iif(reccount("xcapito")=1,alltrim(xcapito.capipart),"") in xmedicion
skip
enddo
select xmedicion
scan for !eof()
wait window " Asignando mediciones al componente "+xmedicion.hijo
timeout .5
select capipart from xcapi inner join xcapipar on
xcapi.codea=substr(xcapipar.capipart,1,3) and
xcapipar.codecomp=xmedicion.hijo
where codecapi=xmedicion.padre into cursor xcapito
replace partida with
iif(reccount("xcapito")=1,alltrim(xcapito.capipart),"") in xmedicion
endscan
Lo curioso del tema es que ninguno de los dos anda correctamente. Si
inhabilito la linea del replace, el scan funciona de principio a fin,
por
Post by Caracol
el
Post by MPOLO S.L. - Departamento Calidad
contrario si lo dejo habilitado, el scan se corta en el primer ingreso, es
decir, modifica el primer registro y se corta
select xmedicion
scan for !eof()
wait window " Asignando mediciones al componente "+xmedicion.hijo
timeout .5
replace partida with "" in xmedicion
endscan
Tampoco funciona.
Lo raro es que antes si que funcionaba, El cursor es en memoria, no tiene
índices, no me explico que puede estar pasando
Gracias por su ayuda
Saludos
Ing. Martin R Sanchez Arnoletto
Menorca
Caracol
2004-08-04 09:04:04 UTC
Permalink
Prova

****************
select xmedicion
Scan
wait window " Asignando mediciones al componente "+xmedicion.hijo
timeout .5

select capipart ;
from xcapi inner join xcapipar ;
on xcapi.codea=substr(xcapipar.capipart,1,3) ;
and xcapipar.codecomp=xmedicion.hijo ;
where codecapi=xmedicion.padre ;
into cursor xcapito

select xmedicion
replace partida with iif(_Tally=1,alltrim(xcapito.capipart),"")

endScan
***********

Buena fortuna!
--
Dott. Facundo Nunes
***@ibisoft.it
IBISOFT srl
Parma - Italia
Post by MPOLO S.L. - Departamento Calidad
jejje Ya lo he probado, sin resultados
Es extremadamente raro
es algo que he hecho infinidad de veces
Saludos y gracias
Ing. Martin R Sanchez Arnoletto
Menorca
Post by Caracol
Prova asi
select xmedicion
go top
do while !eof()
wait window " Asignando mediciones al componente "+xmedicion.hijo
timeout .5
select capipart from xcapi inner join xcapipar on
xcapi.codea=substr(xcapipar.capipart,1,3) and
xcapipar.codecomp=xmedicion.hijo
where codecapi=xmedicion.padre into cursor xcapito
select xmedicion
replace partida with
iif(reccount("xcapito")=1,alltrim(xcapito.capipart),"")
skip
enddo
tambien podes usar scan
Saludos!
--
Dott. Facundo Nunes
IBISOFT srl
Parma - Italia
Post by MPOLO S.L. - Departamento Calidad
Tengo una tabla creada con create cursor llamada xmedicion. En el
siguiente
Post by MPOLO S.L. - Departamento Calidad
create cursor xmedicion (padre c(15),hijo c(15),partida c(7), descrip
c(100), cantidad y, longitud y, anchura y, altitud y, parcial y)
&& Cargo varios registros en xmedicion mediante un append from
select xmedicion
go top
do while !eof()
wait window " Asignando mediciones al componente "+xmedicion.hijo
timeout .5
select capipart from xcapi inner join xcapipar on
xcapi.codea=substr(xcapipar.capipart,1,3) and
xcapipar.codecomp=xmedicion.hijo
where codecapi=xmedicion.padre into cursor xcapito
replace partida with
iif(reccount("xcapito")=1,alltrim(xcapito.capipart),"") in xmedicion
skip
enddo
select xmedicion
scan for !eof()
wait window " Asignando mediciones al componente "+xmedicion.hijo
timeout .5
select capipart from xcapi inner join xcapipar on
xcapi.codea=substr(xcapipar.capipart,1,3) and
xcapipar.codecomp=xmedicion.hijo
where codecapi=xmedicion.padre into cursor xcapito
replace partida with
iif(reccount("xcapito")=1,alltrim(xcapito.capipart),"") in xmedicion
endscan
Lo curioso del tema es que ninguno de los dos anda correctamente. Si
inhabilito la linea del replace, el scan funciona de principio a fin,
por
Post by Caracol
el
Post by MPOLO S.L. - Departamento Calidad
contrario si lo dejo habilitado, el scan se corta en el primer
ingreso,
Post by MPOLO S.L. - Departamento Calidad
es
Post by Caracol
Post by MPOLO S.L. - Departamento Calidad
decir, modifica el primer registro y se corta
select xmedicion
scan for !eof()
wait window " Asignando mediciones al componente "+xmedicion.hijo
timeout .5
replace partida with "" in xmedicion
endscan
Tampoco funciona.
Lo raro es que antes si que funcionaba, El cursor es en memoria, no
tiene
Post by Caracol
Post by MPOLO S.L. - Departamento Calidad
índices, no me explico que puede estar pasando
Gracias por su ayuda
Saludos
Ing. Martin R Sanchez Arnoletto
Menorca
Pablo Roca
2004-08-04 12:23:02 UTC
Permalink
Hola Martin.

No dices que viene en xcapi ni en xcapipar, pero bueno .... si fueras un
programador mio te pegaria dos tiros (amistosos claro) .. jejeje

¿Un SELECT dentro de un SCAN? .. Vamos ... a mi, quien me haga algo asi lo
fusilo! ... :) Me lo tendrian que justificar mucho. :)))
Post by MPOLO S.L. - Departamento Calidad
select xmedicion
scan for !eof()
wait window " Asignando mediciones al componente "+xmedicion.hijo
timeout .5
replace partida with "" in xmedicion
endscan
Tampoco funciona.
mmmm..

Y asi? porque no lo veo sentido que le pongas un SCAN for como lo haces, ni
que hagas el replace in

select xmedicion
scan
wait window " Asignando mediciones al componente "+xmedicion.hijo
timeout .5
replace partida with ""
endscan
--
Saludos,

Pablo Roca - Microsoft Visual Foxpro MVP
Sysop de PortalFox (http://www.portalfox.com)
La Coruña, España
"Apoya a FoxPro, utiliza software legal"
Post by MPOLO S.L. - Departamento Calidad
Tengo una tabla creada con create cursor llamada xmedicion. En el siguiente
create cursor xmedicion (padre c(15),hijo c(15),partida c(7), descrip
c(100), cantidad y, longitud y, anchura y, altitud y, parcial y)
&& Cargo varios registros en xmedicion mediante un append from
select xmedicion
go top
do while !eof()
wait window " Asignando mediciones al componente "+xmedicion.hijo
timeout .5
select capipart from xcapi inner join xcapipar on
xcapi.codea=substr(xcapipar.capipart,1,3) and
xcapipar.codecomp=xmedicion.hijo
where codecapi=xmedicion.padre into cursor xcapito
replace partida with
iif(reccount("xcapito")=1,alltrim(xcapito.capipart),"") in xmedicion
skip
enddo
select xmedicion
scan for !eof()
wait window " Asignando mediciones al componente "+xmedicion.hijo
timeout .5
select capipart from xcapi inner join xcapipar on
xcapi.codea=substr(xcapipar.capipart,1,3) and
xcapipar.codecomp=xmedicion.hijo
where codecapi=xmedicion.padre into cursor xcapito
replace partida with
iif(reccount("xcapito")=1,alltrim(xcapito.capipart),"") in xmedicion
endscan
Lo curioso del tema es que ninguno de los dos anda correctamente. Si
inhabilito la linea del replace, el scan funciona de principio a fin, por el
contrario si lo dejo habilitado, el scan se corta en el primer ingreso, es
decir, modifica el primer registro y se corta
select xmedicion
scan for !eof()
wait window " Asignando mediciones al componente "+xmedicion.hijo
timeout .5
replace partida with "" in xmedicion
endscan
Tampoco funciona.
Lo raro es que antes si que funcionaba, El cursor es en memoria, no tiene
índices, no me explico que puede estar pasando
Gracias por su ayuda
Saludos
Ing. Martin R Sanchez Arnoletto
Menorca
MPOLO S.L. - Departamento Calidad
2004-08-04 12:57:29 UTC
Permalink
Hola Pablo:
En realidad el Select fué un manotón de ahogados, previamente habia un
seek() que se fijaba en los otros cursores (xcapi y xcapipar)
lo del scan for !eof(), jeje es simplemente que nunca habia usado el scan
solo, sino poniendole una condicion , lo que "ralentiza" obviamente, pero
será la costumbre jeje ya que lo has hecho notar me la sacaré. Lo raro es
que siempre me funcionaron de maravillas cosas como esta, e incluso esto
funcionó en un principio, y no se porque dejó de funcionar, y es más, se me
ocurrio hacerle un indice a un campo de xmedicion y ordenarlo por él, y
volvio a funcionar... así que me tiene en ascuas.

Bueno gracias por tu atención.
Ya veré si funciona como lo refieres tu. Ya pasaré cosa de esto...

Saludos
Martín R Sanchez Arnoletto
Jose
2004-08-04 15:41:22 UTC
Permalink
puedes probar asi:

select xmedicion
go top
do while !eof()
wait window " Asignando mediciones al componente "+xmedicion.hijo
timeout .5
select capipart from xcapi inner join xcapipar on
xcapi.codea=substr(xcapipar.capipart,1,3) and
xcapipar.codecomp=xmedicion.hijo where codecapi=xmedicion.padre into
cursor xcapito
x=iif(reccount("xcapito")=1,alltrim(xcapito.capipart),"") in xmedicion

replace partida with x
skip
enddo
Jose
2004-08-04 15:42:25 UTC
Permalink
era asi:

puedes probar asi:

select xmedicion
go top
do while !eof()
wait window " Asignando mediciones al componente "+xmedicion.hijo
timeout .5
select capipart from xcapi inner join xcapipar on
xcapi.codea=substr(xcapipar.capipart,1,3) and
xcapipar.codecomp=xmedicion.hijo where codecapi=xmedicion.padre into
cursor xcapito
sele xmedicion
x=iif(reccount("xcapito")=1,alltrim(xcapito.capipart),"")

replace partida with x
skip
enddo
Post by MPOLO S.L. - Departamento Calidad
En realidad el Select fué un manotón de ahogados, previamente habia un
seek() que se fijaba en los otros cursores (xcapi y xcapipar)
lo del scan for !eof(), jeje es simplemente que nunca habia usado el scan
solo, sino poniendole una condicion , lo que "ralentiza" obviamente, pero
será la costumbre jeje ya que lo has hecho notar me la sacaré. Lo raro es
que siempre me funcionaron de maravillas cosas como esta, e incluso esto
funcionó en un principio, y no se porque dejó de funcionar, y es más, se me
ocurrio hacerle un indice a un campo de xmedicion y ordenarlo por él, y
volvio a funcionar... así que me tiene en ascuas.
Bueno gracias por tu atención.
Ya veré si funciona como lo refieres tu. Ya pasaré cosa de esto...
Saludos
Martín R Sanchez Arnoletto
Pablo Roca
2004-08-04 16:51:35 UTC
Permalink
Post by MPOLO S.L. - Departamento Calidad
En realidad el Select fué un manotón de ahogados, previamente habia un
Manotón de ahogados? Curiosa expresión :)))

De todos modos si que es raro.

E intenta de algun modo no poner nunca un SELECT dentro de un SCAN. Tiene
que haber manera de evitarlo :)
--
Saludos,

Pablo Roca - Microsoft Visual Foxpro MVP
Sysop de PortalFox (http://www.portalfox.com)
La Coruña, España
"Apoya a FoxPro, utiliza software legal"
Post by MPOLO S.L. - Departamento Calidad
En realidad el Select fué un manotón de ahogados, previamente habia un
seek() que se fijaba en los otros cursores (xcapi y xcapipar)
lo del scan for !eof(), jeje es simplemente que nunca habia usado el scan
solo, sino poniendole una condicion , lo que "ralentiza" obviamente, pero
será la costumbre jeje ya que lo has hecho notar me la sacaré. Lo raro es
que siempre me funcionaron de maravillas cosas como esta, e incluso esto
funcionó en un principio, y no se porque dejó de funcionar, y es más, se me
ocurrio hacerle un indice a un campo de xmedicion y ordenarlo por él, y
volvio a funcionar... así que me tiene en ascuas.
Bueno gracias por tu atención.
Ya veré si funciona como lo refieres tu. Ya pasaré cosa de esto...
Saludos
Martín R Sanchez Arnoletto
Jose
2004-08-04 17:32:12 UTC
Permalink
alguna Razon ??
Post by Pablo Roca
Post by MPOLO S.L. - Departamento Calidad
En realidad el Select fué un manotón de ahogados, previamente habia un
Manotón de ahogados? Curiosa expresión :)))
De todos modos si que es raro.
E intenta de algun modo no poner nunca un SELECT dentro de un SCAN. Tiene
que haber manera de evitarlo :)
--
Saludos,
Pablo Roca - Microsoft Visual Foxpro MVP
Sysop de PortalFox (http://www.portalfox.com)
La Coruña, España
"Apoya a FoxPro, utiliza software legal"
Post by MPOLO S.L. - Departamento Calidad
En realidad el Select fué un manotón de ahogados, previamente habia un
seek() que se fijaba en los otros cursores (xcapi y xcapipar)
lo del scan for !eof(), jeje es simplemente que nunca habia usado el scan
solo, sino poniendole una condicion , lo que "ralentiza" obviamente, pero
será la costumbre jeje ya que lo has hecho notar me la sacaré. Lo raro es
que siempre me funcionaron de maravillas cosas como esta, e incluso esto
funcionó en un principio, y no se porque dejó de funcionar, y es más, se
me
Post by MPOLO S.L. - Departamento Calidad
ocurrio hacerle un indice a un campo de xmedicion y ordenarlo por él, y
volvio a funcionar... así que me tiene en ascuas.
Bueno gracias por tu atención.
Ya veré si funciona como lo refieres tu. Ya pasaré cosa de esto...
Saludos
Martín R Sanchez Arnoletto
Pablo Roca
2004-08-04 17:41:24 UTC
Permalink
Te vale lentitud?

Un

SCAN
SELECT dentro ...

normalmente se puede sustituir por un

SELECT a cursor
SCAN
SEEK

o por un

SCAN
SEEK

Todo depende del caso.
--
Saludos,

Pablo Roca - Microsoft Visual Foxpro MVP
Sysop de PortalFox (http://www.portalfox.com)
La Coruña, España
"Apoya a FoxPro, utiliza software legal"
Post by Jose
alguna Razon ??
Post by Pablo Roca
Post by MPOLO S.L. - Departamento Calidad
En realidad el Select fué un manotón de ahogados, previamente habia un
Manotón de ahogados? Curiosa expresión :)))
De todos modos si que es raro.
E intenta de algun modo no poner nunca un SELECT dentro de un SCAN. Tiene
que haber manera de evitarlo :)
--
Saludos,
Pablo Roca - Microsoft Visual Foxpro MVP
Sysop de PortalFox (http://www.portalfox.com)
La Coruña, España
"Apoya a FoxPro, utiliza software legal"
Post by MPOLO S.L. - Departamento Calidad
En realidad el Select fué un manotón de ahogados, previamente habia un
seek() que se fijaba en los otros cursores (xcapi y xcapipar)
lo del scan for !eof(), jeje es simplemente que nunca habia usado el
scan
Post by Pablo Roca
Post by MPOLO S.L. - Departamento Calidad
solo, sino poniendole una condicion , lo que "ralentiza" obviamente,
pero
Post by Pablo Roca
Post by MPOLO S.L. - Departamento Calidad
será la costumbre jeje ya que lo has hecho notar me la sacaré. Lo raro
es
Post by Pablo Roca
Post by MPOLO S.L. - Departamento Calidad
que siempre me funcionaron de maravillas cosas como esta, e incluso esto
funcionó en un principio, y no se porque dejó de funcionar, y es más, se
me
Post by MPOLO S.L. - Departamento Calidad
ocurrio hacerle un indice a un campo de xmedicion y ordenarlo por él, y
volvio a funcionar... así que me tiene en ascuas.
Bueno gracias por tu atención.
Ya veré si funciona como lo refieres tu. Ya pasaré cosa de esto...
Saludos
Martín R Sanchez Arnoletto
Esparta Palma
2004-08-04 18:11:38 UTC
Permalink
Será que me estoy volviendo viejo, que no veo la diferencia entre tus dos
tipos de sustituciones, yo, lo que tendría entendido es que hay 3 formas:

a)
SCAN
SEEK
IF FOUND()

b)
SCAN
IF SEEK()

c)
SCAN
INDEXSEEK()

Para ampliar la explicación el por qué no se debería de usar un SELECT
dentro de un SCAN :

1) El tiempo de demora
a) Crear el nuevo cursor
b) Cerrar el cursor anterior si es que ya estaba creado

2) Si tu select vá a devolver un único registro, entonces usar Seek o
IndexSeek según sea el caso, ya que no tiene ningún sentido el crear un
cursor si puedes simplemente moverte

3) Si tu select vá a devolver más de un registro entonces puedes probar el
usar otro SCAN con una cláusula FOR

De todos modos deberán hacer sus propias pruebas, con muchos datos, en lo
personal logré reducir un proceso que duraba 5 o 6 horas, a menos de 50
minutos, claro está, eran varios millones de registros en juego...
Post by Pablo Roca
Te vale lentitud?
Un
SCAN
SELECT dentro ...
normalmente se puede sustituir por un
SELECT a cursor
SCAN
SEEK
o por un
SCAN
SEEK
Todo depende del caso.
--
Saludos,
Pablo Roca - Microsoft Visual Foxpro MVP
Sysop de PortalFox (http://www.portalfox.com)
La Coruña, España
"Apoya a FoxPro, utiliza software legal"
alguna Razon ??
Post by Pablo Roca
Post by MPOLO S.L. - Departamento Calidad
En realidad el Select fué un manotón de ahogados, previamente habia un
Manotón de ahogados? Curiosa expresión :)))
De todos modos si que es raro.
E intenta de algun modo no poner nunca un SELECT dentro de un SCAN. Tiene
que haber manera de evitarlo :)
--
Saludos,
Pablo Roca - Microsoft Visual Foxpro MVP
Sysop de PortalFox (http://www.portalfox.com)
La Coruña, España
"Apoya a FoxPro, utiliza software legal"
Post by MPOLO S.L. - Departamento Calidad
En realidad el Select fué un manotón de ahogados, previamente habia un
seek() que se fijaba en los otros cursores (xcapi y xcapipar)
lo del scan for !eof(), jeje es simplemente que nunca habia usado el
scan
Post by Pablo Roca
Post by MPOLO S.L. - Departamento Calidad
solo, sino poniendole una condicion , lo que "ralentiza" obviamente,
pero
Post by Pablo Roca
Post by MPOLO S.L. - Departamento Calidad
será la costumbre jeje ya que lo has hecho notar me la sacaré. Lo raro
es
Post by Pablo Roca
Post by MPOLO S.L. - Departamento Calidad
que siempre me funcionaron de maravillas cosas como esta, e incluso esto
funcionó en un principio, y no se porque dejó de funcionar, y es más, se
me
Post by MPOLO S.L. - Departamento Calidad
ocurrio hacerle un indice a un campo de xmedicion y ordenarlo por él, y
volvio a funcionar... así que me tiene en ascuas.
Bueno gracias por tu atención.
Ya veré si funciona como lo refieres tu. Ya pasaré cosa de esto...
Saludos
Martín R Sanchez Arnoletto
ž,ø€º°`°º€ø,žž,ø€º°`°º€ø,žž,ø€º°`°º€ø,žž,ø€º°`°º
Espartaco Palma Martínez
SysOp PortalFox.com
email:mexicoSINSPAM[Arroba]portalfox.com

----------------------------------------------
PortalFox :: Nada corre como un zorr
http://www.portalfox.co

PortalFox - NNTP Forum Gatewa
-----------------------------------------------
Pablo Roca
2004-08-04 19:25:40 UTC
Permalink
Es que apenas me explique .. jajaja

La primera seria si no tuviera un indice creado por lo que quiere buscar, es
decir

Haces un SCAN a un cursor e indexas dicho cursor por lo que quieras, despues
ya viene el SEEK en el bucle.

La segunda (que es igual que la primera) .. pues seria si la tabla ya
estuviera ordenada y valiera un SEEK
Post by Esparta Palma
De todos modos deberán hacer sus propias pruebas, con muchos datos, en lo
personal logré reducir un proceso que duraba 5 o 6 horas, a menos de 50
minutos, claro está, eran varios millones de registros en juego...
Efectivamente .. asi es.
--
Saludos,

Pablo Roca - Microsoft Visual Foxpro MVP
Sysop de PortalFox (http://www.portalfox.com)
La Coruña, España
"Apoya a FoxPro, utiliza software legal"
Post by Esparta Palma
Será que me estoy volviendo viejo, que no veo la diferencia entre tus dos
a)
SCAN
SEEK
IF FOUND()
b)
SCAN
IF SEEK()
c)
SCAN
INDEXSEEK()
Para ampliar la explicación el por qué no se debería de usar un SELECT
1) El tiempo de demora
a) Crear el nuevo cursor
b) Cerrar el cursor anterior si es que ya estaba creado
2) Si tu select vá a devolver un único registro, entonces usar Seek o
IndexSeek según sea el caso, ya que no tiene ningún sentido el crear un
cursor si puedes simplemente moverte
3) Si tu select vá a devolver más de un registro entonces puedes probar el
usar otro SCAN con una cláusula FOR
De todos modos deberán hacer sus propias pruebas, con muchos datos, en lo
personal logré reducir un proceso que duraba 5 o 6 horas, a menos de 50
minutos, claro está, eran varios millones de registros en juego...
Post by Pablo Roca
Te vale lentitud?
Un
SCAN
SELECT dentro ...
normalmente se puede sustituir por un
SELECT a cursor
SCAN
SEEK
o por un
SCAN
SEEK
Todo depende del caso.
--
Saludos,
Pablo Roca - Microsoft Visual Foxpro MVP
Sysop de PortalFox (http://www.portalfox.com)
La Coruña, España
"Apoya a FoxPro, utiliza software legal"
alguna Razon ??
Post by Pablo Roca
Post by MPOLO S.L. - Departamento Calidad
En realidad el Select fué un manotón de ahogados, previamente habia un
Manotón de ahogados? Curiosa expresión :)))
De todos modos si que es raro.
E intenta de algun modo no poner nunca un SELECT dentro de un SCAN.
Tiene
Post by Pablo Roca
Post by Pablo Roca
que haber manera de evitarlo :)
--
Saludos,
Pablo Roca - Microsoft Visual Foxpro MVP
Sysop de PortalFox (http://www.portalfox.com)
La Coruña, España
"Apoya a FoxPro, utiliza software legal"
Post by MPOLO S.L. - Departamento Calidad
En realidad el Select fué un manotón de ahogados, previamente habia un
seek() que se fijaba en los otros cursores (xcapi y xcapipar)
lo del scan for !eof(), jeje es simplemente que nunca habia usado el
scan
Post by Pablo Roca
Post by MPOLO S.L. - Departamento Calidad
solo, sino poniendole una condicion , lo que "ralentiza" obviamente,
pero
Post by Pablo Roca
Post by MPOLO S.L. - Departamento Calidad
será la costumbre jeje ya que lo has hecho notar me la sacaré. Lo raro
es
Post by Pablo Roca
Post by MPOLO S.L. - Departamento Calidad
que siempre me funcionaron de maravillas cosas como esta, e incluso
esto
Post by Pablo Roca
Post by Pablo Roca
Post by MPOLO S.L. - Departamento Calidad
funcionó en un principio, y no se porque dejó de funcionar, y es
más,
Post by Esparta Palma
se
Post by Pablo Roca
Post by Pablo Roca
me
Post by MPOLO S.L. - Departamento Calidad
ocurrio hacerle un indice a un campo de xmedicion y ordenarlo por
él,
Post by Esparta Palma
y
Post by Pablo Roca
Post by Pablo Roca
Post by MPOLO S.L. - Departamento Calidad
volvio a funcionar... así que me tiene en ascuas.
Bueno gracias por tu atención.
Ya veré si funciona como lo refieres tu. Ya pasaré cosa de esto...
Saludos
Martín R Sanchez Arnoletto
ž,ø€º°`°º€ø,žž,ø€º°`°º€ø,žž,ø€º°`°º€ø,žž,ø€º°`°º
Espartaco Palma Martínez
SysOp PortalFox.com
email:mexicoSINSPAM[Arroba]portalfox.com
-----------------------------------------------
PortalFox :: Nada corre como un zorro
http://www.portalfox.com
PortalFox - NNTP Forum Gateway
-----------------------------------------------
MPOLO S.L. - Departamento Calidad
2004-08-05 05:53:26 UTC
Permalink
Manotón de ahogados: Es una expresión popular muy utilizada ( En Argentina
al menos) cuando ya se han realizado MUCHOS intentos en relacion a una
tarea sin éxito, y se intenta " una última resolución". A esta última
resolución se le asigna el nombre de "Manotón de ahogados"

Vease referencias en:

http://www.google.es/search?q=manot%C3%B3n+de+ahogados&ie=UTF-8&hl=es&meta=


Saludos
Martín R Sanchez Arnoletto
Pablo Roca
2004-08-05 07:37:23 UTC
Permalink
Interesante .. es bueno siempre aprender algo. Gracias :))
--
Saludos,

Pablo Roca - Microsoft Visual Foxpro MVP
Sysop de PortalFox (http://www.portalfox.com)
La Coruña, España
"Apoya a FoxPro, utiliza software legal"
Post by MPOLO S.L. - Departamento Calidad
Manotón de ahogados: Es una expresión popular muy utilizada ( En Argentina
al menos) cuando ya se han realizado MUCHOS intentos en relacion a una
tarea sin éxito, y se intenta " una última resolución". A esta última
resolución se le asigna el nombre de "Manotón de ahogados"
http://www.google.es/search?q=manot%C3%B3n+de+ahogados&ie=UTF-8&hl=es&meta=
Post by MPOLO S.L. - Departamento Calidad
Saludos
Martín R Sanchez Arnoletto
Carlos Woolfolk
2004-08-05 15:48:05 UTC
Permalink
En México lo conocemos como golpes de
ahogado.
Post by MPOLO S.L. - Departamento Calidad
Manotón de ahogados: Es una expresión popular muy utilizada ( En Argentina
al menos) cuando ya se han realizado MUCHOS intentos en relacion a una
tarea sin éxito, y se intenta " una última resolución". A esta última
resolución se le asigna el nombre de "Manotón de ahogados"
http://www.google.es/search?q=manot%C3%B3n+de+ahogados&ie=UTF-8&hl=es&meta=
Saludos
Martín R Sanchez Arnoletto
Jose
2004-08-10 17:06:59 UTC
Permalink
patadas de ahogado en Mexico
Post by Carlos Woolfolk
En México lo conocemos como golpes de
ahogado.
Post by MPOLO S.L. - Departamento Calidad
Manotón de ahogados: Es una expresión popular muy utilizada ( En Argentina
al menos) cuando ya se han realizado MUCHOS intentos en relacion a una
tarea sin éxito, y se intenta " una última resolución". A esta última
resolución se le asigna el nombre de "Manotón de ahogados"
http://www.google.es/search?q=manot%C3%B3n+de+ahogados&ie=UTF-8&hl=es&meta=
Post by Carlos Woolfolk
Post by MPOLO S.L. - Departamento Calidad
Saludos
Martín R Sanchez Arnoletto
Carlos Woolfolk
2004-08-10 17:55:44 UTC
Permalink
tienes razon, patadas de ahogado.
Post by Jose
patadas de ahogado en Mexico
Post by Carlos Woolfolk
En México lo conocemos como golpes de
ahogado.
Post by MPOLO S.L. - Departamento Calidad
Manotón de ahogados: Es una expresión popular muy utilizada ( En
Argentina
Post by Carlos Woolfolk
Post by MPOLO S.L. - Departamento Calidad
al menos) cuando ya se han realizado MUCHOS intentos en relacion a una
tarea sin éxito, y se intenta " una última resolución". A esta última
resolución se le asigna el nombre de "Manotón de ahogados"
http://www.google.es/search?q=manot%C3%B3n+de+ahogados&ie=UTF-8&hl=es&meta=
Post by Carlos Woolfolk
Post by MPOLO S.L. - Departamento Calidad
Saludos
Martín R Sanchez Arnoletto
Loading...