FoxPro/Visual FoxPro - Por que no reemplaza????

 
Vista:

Por que no reemplaza????

Publicado por Gaby (40 intervenciones) el 20/02/2003 19:39:14
Hola a todos, tengo un problema con el reemplazo en una tabla, la cosa esta asi,tengo tres tablas de las cuales quiero reemplazar los datos a una donde tengo los campos de las 3, el codigo es algo asi:


SELECT tpedespe
GO 1
*browse
DO WHILE !empty(tpedespe.folio) and !EOF()


SELECT torden1
GO 1
IF torden1.paciente= tpedespe.paciente
APPEND BLANK
REPLACE TORDEN1.PACIENTE WITH TPEDESPE.PACIENTE
replace torden1.foliope WITH tpedespe.folio
*replace torden1.fechape WITH tpedespe.fecha
replace torden1.proveedorpe WITH tpedespe.proveedor
replace torden1.totalpe WITH tpedespe.total
replace torden1.monedape WITH tpedespe.moneda
replace torden1.tcpe WITH tpedespe.tc
replace torden1.totalmnpe WITH tpedespe.totalmn
replace torden1.estatuspe WITH tpedespe.estatus

ELSE
*MESSAGEBOX("NO EXISTE")

ENDIF

SELECT tpedespe
SKIP


ENDDO
*MESSAGEBOX("reemplazo los pedidos especiales")

SELECT torden1
*browse


La cosa es que funciona la primera vez y me reemplaza todos, pero de la segunda tabla que es el codigo que estoy mostrando, solo el ultimo registro y lo mismo me pasa para la siguiente tabla..

Alguien podria decirme por que pasa esto y como lo resuelvo??
Gracias de antemano.
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

RE:Por que no reemplaza????

Publicado por cesarz (27 intervenciones) el 20/02/2003 20:47:27

SELECT tpedespe
GO TOP
*browse
DO WHILE !EOF()
if empty(tpedespe.folio)
SELECT tpedespe
skip
loop
endif

SELECT torden1
* debe estar activo indice por campo paciente
seek tpedespe.paciente
IF .not. found()
APPEND BLANK
ENDIF

REPLACE TORDEN1.PACIENTE WITH TPEDESPE.PACIENTE
replace torden1.foliope WITH tpedespe.folio
*replace torden1.fechape WITH tpedespe.fecha
replace torden1.proveedorpe WITH tpedespe.proveedor
replace torden1.totalpe WITH tpedespe.total
replace torden1.monedape WITH tpedespe.moneda
replace torden1.tcpe WITH tpedespe.tc
replace torden1.totalmnpe WITH tpedespe.totalmn
replace torden1.estatuspe WITH tpedespe.estatus

SELECT tpedespe
SKIP

ENDDO
*MESSAGEBOX("reemplazo los pedidos especiales")

SELECT torden1
*browse

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

SIgue pasando lo mismo

Publicado por Gaby (40 intervenciones) el 21/02/2003 00:49:19
Gracias Cesarz por contestarme, ya lo copie a mi codigo y me sigue pasando lo mismo... que sera lo que esta pasando solo me reemplaza el ultimo registro...

Espero y poder encontrar otra solucion.
Gracias de antemano.
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

RE:Por que no reemplaza????

Publicado por redrojo (66 intervenciones) el 21/02/2003 16:22:12
en ocaciones el problema no esta en el codigo sino en el apuntador de la tabla que se trabaja en memoria, cuando esto me ha sucedido, me refiero a que el codigo se ejecuta la primera vez y despues parece ignorarlo y no se ejecuta denuevo, sugiero revisar: 1. la ultima tabla abierta, 2. el area de trabajo, 3. cerrar las tablas, variables que podrian crear conflicto. 4. el orden de ejecucion del programa, 5. los llamados a rutinas. 6. otros loops.
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:Por que no reemplaza????

Publicado por gaby (40 intervenciones) el 21/02/2003 16:30:09
Gracias a todos, ya lo solucione, lo que hice fue primero en la tabla torden1 darle un go top y luego cree una variable para que me fuera sumando el numero de renglon y fuinciono paso el codigo, Gracias por todo, saludos...

SELECT tpedespe
GO TOP


SELECT torden1
GO top
vrenglon= RECNO()

DO WHILE !EOF()
if empty(tpedespe.folio)
SELECT tpedespe
skip
loop
endif

SELECT torden1
SET ORDER TO paciente
* debe estar activo indice por campo paciente
seek tpedespe.paciente
IF .not. found()
MESSAGEBOX("no existe")
APPEND BLANK
ENDIF
SELECT torden1

GO vrenglon
*REPLACE TORDEN1.PACIENTE WITH TPEDESPE.PACIENTE
replace torden1.foliope WITH tpedespe.folio
*replace torden1.fechape WITH tpedespe.fecha
replace torden1.proveedorpe WITH tpedespe.proveedor
replace torden1.totalpe WITH tpedespe.total
replace torden1.monedape WITH tpedespe.moneda
replace torden1.tcpe WITH tpedespe.tc
replace torden1.totalmnpe WITH tpedespe.totalmn
replace torden1.estatuspe WITH tpedespe.estatus



*MESSAGEBOX("reemplazo")


SELECT tpedespe
SKIP

vrenglon=vrenglon + 1

ENDDO
MESSAGEBOX("reemplazo los pedidos especiales")
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