replace

Experto:
Usuario: Anónimo Fecha: 04/09/2008
Valoración: Categoría: Visual Fox Pro
02/09/2008
Usuario
hola experto ya logre teminar y exportar los registros de un txt a un dbf y luego de un dbf a la tabla principal porque estaban los campos en desorden, pero ahora tengo un problema que no puedo resolver solo se trata de colocar "N" a los clientes Nuevos que se atienden en este año solo para el 2008 y "C" a los clientes que se atienden mas de una vez osea por primera vez en el año N y por segunda vez el mismo cliente es "C" gracias por su atencion.
03/09/2008
mitchelljuar, experto respondiendo en Visual Fox Pro
Experto
HOla, necesito que me expliques mejor el tema, por que no tengo la estructura de tu tabla, describeme por favor la estructura, nombre de tu tabla o nombre de los campos, como esta organizado para enviarte el codigo que debes aplicar para que te haga el replace, espero tu aclaracion
Un saludo
03/09/2008
Usuario
Ok amigo, primero recibo los registro en la tabla borrador mas o menos 250 registros esta tabla tiene campos(columnas) llamado cod_cliente, fecha_atencion, condicion, luego hago un append from a la tabla principal que tiene los mismo campos(columnas) pero esta tabla ya tiene como 1500 registros almacenados, lo que necesito cuando pase los registros de la tabla borrador a la tabla principal verifique los cod_cliente si ya existen son "C" de lo contrario serian "N" estas variables deben de guardarse en el campo "condicion".
Gracias amiguito
03/09/2008
mitchelljuar, experto respondiendo en Visual Fox Pro
Experto
Ok, ahora si, bueno, me supongo que el agregado del borrador a la tabla principal siempre debe ocurrir, o sea, si un registro ya existe igual se inserta, solo con la diferencia de que variara el valor del campo CONDICION. Ok, esto solamente podras hacerlo con una funcion previa que verifique primero antes del append from y podria ser asi:
use borrador
replace condicion with 'N'  all &&primero lo llenamos con N
replace condicion with 'C' for siExiste(cod_cliente)           &&luego con C los que corresp.
sele principal
append from borrador
return  &&fin
 
 
function siExiste(xCodCliente)
sele principal
locate for cod_cliente=xCodCliente
if found()
             xRet = .t.
else
              xRet = .f.
endif
return(xRet)
 
La funcion siExiste retorna .T. o .F. segun el caso, es una funcion simple, para el ejemplo te hice con locate for, puede usar seek() si tienes indices que sera mucho mas rapido.
Si tienes dudas o no entendi tu necesidad me avisas.
 
03/09/2008
Usuario
Hola ya lo intente pero todo los archivos los vuelve N y  otros los deja en blanco..te explico con un ejemplo amigo
si el cliente 50 se atiende en este año por primera vez viene hacer "N", pero si el mismo cliente 50 viene por segunda vez es "C" y si es por tercera vez sigue la "C" etc...
entonces esto me ayuda para saber cuantos cliente fueron nuevos y cuantos fueron continuadores.
cuando yo agrego los registros de la tabla borrador a la tabla principal estos codigos de cliente deben ser verificados en la tabla principal para saber si existen y si es asi los agregados se convierten en "C" pero si no estan en la tabla principal son "N" Gracias por su ayuda
04/09/2008
mitchelljuar, experto respondiendo en Visual Fox Pro
Experto
Hola, los codigos en blanco que te los devuelve probablemente son las que ya estaban en original, enla principal, asi que hay que rellenarlos antes de ejecutar el ejemplo, el ejemplo que te prepare es justamente para lo que mencionas, prueba estos cambios
use borrador
go top
do while !eof8)
  if siExiste(cod_cliente) 
     replace condicion with 'C' 
  else
   replace condicion with 'N'
 endif
  sele borrador
   skip
enddo
sele principal
append from borrador
return &&fin

function siExiste(xCodCliente)
sele principal
locate for cod_cliente=xCodCliente
if found()
xRet = .t.
else
xRet = .f.
endif
return(xRet)
04/09/2008
Usuario
Gracias ahora si todo ok te agradezco mucho
Enlaces patrocinados