Errores con REPLACE en sentencias con IF // SCAN

30/09/2005 - 15:33 por Pablo Javier | Informe spam
Buen día para todos,

Nuevamente estoy aquí comentándole algo que noté en el manejo de una tabla.

La tabla es un DBF, el programa es con VFP 7

Cuando la tabla supera los 3.000 registros, la siguiente sentencia no
siempre la cumple en los casos que si la debería cumplir (cuando el FOUND
es .T.)

SELECT tabla_1
GO TOP
LOCATE FOR tabla_1.id = Thisform.tid.Value
IF FOUND()
REPLACE tabla_1.fecha WITH DATE()
ENDIF

Pero lo raro es que si lo hace con esta sentencia, que es diferente:

SELECT tabla_1
GO TOP
SCAN FOR tabla_1.id = Thisform.tid.Value
REPLACE tabla_1.fecha WITH DATE()
ENDSCAN


Noto que cuando la tabla supera los 3.000 registros (que es cuando comenzó
a fallar), la primer sentencia entra en el IF pero no realiza el REPLACE.
En cambio, en la misma tabla con igual cantidad de registros, ejecuta con
éxito el contenido del SCAN (por lo menos hasta ahora).

¿Me podrían explicar el motivo de esta diferencia?

Desde ya, muchas gracias.
Pablo


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

PortalFox - NNTP Forum Gateway

Preguntas similare

Leer las respuestas

#1 Esparta Palma
30/09/2005 - 20:59 | Informe spam
Y que pasa si usas UPDATE-SQL?

lnID = Thisform.tid.Value

UPDATE Tabla1 ;
SET FechaÚTE() ;
WHERE id = lnID

¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º

Espartaco Palma Martínez
SysOp http://www.PortalFox.com
México D.F.
MoBlogs!
http://weblogs.golemproject.com/esparta/
http://www.espartha.com/blog/

Pablo Javier wrote:
Buen día para todos,

Nuevamente estoy aquí comentándole algo que noté en el manejo de una tabla.

La tabla es un DBF, el programa es con VFP 7

Cuando la tabla supera los 3.000 registros, la siguiente sentencia no
siempre la cumple en los casos que si la debería cumplir (cuando el FOUND
es .T.)

SELECT tabla_1
GO TOP
LOCATE FOR tabla_1.id = Thisform.tid.Value
IF FOUND()
REPLACE tabla_1.fecha WITH DATE()
ENDIF

Pero lo raro es que si lo hace con esta sentencia, que es diferente:

SELECT tabla_1
GO TOP
SCAN FOR tabla_1.id = Thisform.tid.Value
REPLACE tabla_1.fecha WITH DATE()
ENDSCAN


Noto que cuando la tabla supera los 3.000 registros (que es cuando comenzó
a fallar), la primer sentencia entra en el IF pero no realiza el REPLACE.
En cambio, en la misma tabla con igual cantidad de registros, ejecuta con
éxito el contenido del SCAN (por lo menos hasta ahora).

¿Me podrían explicar el motivo de esta diferencia?

Desde ya, muchas gracias.
Pablo


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

PortalFox - NNTP Forum Gateway
Respuesta Responder a este mensaje
#2 Pablo Javier
30/09/2005 - 22:37 | Informe spam
No probé, lo voy hacer y luego les cuento, gracias por el dato.

Pero, ¿tenes idea de porqué la diferencia entre IF y SCAN?

Saludos...
Pablo


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

PortalFox - NNTP Forum Gateway
Respuesta Responder a este mensaje
#3 Esparta Palma
01/10/2005 - 00:19 | Informe spam
No, ni idea, quizás deberás revisarlo con el debugger

Pablo Javier wrote:
No probé, lo voy hacer y luego les cuento, gracias por el dato.

Pero, ¿tenes idea de porqué la diferencia entre IF y SCAN?

Saludos...
Pablo


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

PortalFox - NNTP Forum Gateway



¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º

Espartaco Palma Martínez
SysOp http://www.PortalFox.com
México D.F.
MoBlogs!
http://weblogs.golemproject.com/esparta/
http://www.espartha.com/blog/
Respuesta Responder a este mensaje
#4 Carlos
01/10/2005 - 04:36 | Informe spam
Hola, el problema radica en que LOCATE posiciona el puntero en el primer
registro que en el que la expresion FOR se evalue como verdadera, si quieres
seguir utilizando la estructura que planteas con IF, puedes intentar esto

SELECT tabla_1
GO TOP
LOCATE FOR tabla_1.id = Thisform.tid.Value
*IF FOUND()
do while FOUND()
*Repite este bucle mientras encuentre algun registro que cumpla
*la condicion FOR del LOCALTE
REPLACE tabla_1.fecha WITH DATE()
CONTINUE
*el continue intentará encontrar el siguiente registro que
*cumpla con la condicion FOR del LOCATE
enddo

La otra alternativa es que simplementes pongas esto:

SELECT tabla_1
m.lnId=Thisform.tid.Value
REPLACE tabla_1.fecha WITH DATE() FOR tabla_1.id = m.lnId

Saludos
Carlos Rojas

"Pablo Javier" wrote:

No probé, lo voy hacer y luego les cuento, gracias por el dato.

Pero, ¿tenes idea de porqué la diferencia entre IF y SCAN?

Saludos...
Pablo


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

PortalFox - NNTP Forum Gateway

Respuesta Responder a este mensaje
#5 Pablo Javier
03/10/2005 - 21:44 | Informe spam
Buenas,

Probé el UPDATE y funciona.

Ahora me toca romperme la cabeza: traté de replicar el problema y no
ocurre en el la PC donde lo desarrollo, solo en la PC donde está montado
el programa.

¿Por qué existe esa discrepancia? y ¿por qué solo lo hace en esa PC???

Si alguien tiene alguna idea, cualquiera, será recontra muy escuchada, o
mejor dicho leida.

Saludos
Pablo


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

PortalFox - NNTP Forum Gateway
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida