FoxPro/Visual FoxPro - no actualiza campo en tabla

   
Vista:

no actualiza campo en tabla

Publicado por marcelo (14 intervenciones) el 29/11/2010 01:45:10
hola:

tengo un form con un pageframe con dos hojas ,que uso para actualizar una dbf de choferes que esta dentro de una b de datos

en el init del form tengo este codigo:

CursorSetProp("Buffering", 5, "choferes")
SELECT choferes
SET ORDER TO 1

en un boton para el alta ,en el metodo click tengo este codigo:

LOCAL max_codigo
SELECT TOP 1 choferes.codemp FROM choferes ORDER BY codemp DESC INTO CURSOR maxcod readwrite

max_codigo=PADL(TRANSFORM(VAL(maxcod.codemp)+1),3,"0")

thisform.maxcodigo=max_codigo &&propiedad en el form para guardar el maximo codigo
this.parent.cmdmodif.visible=.F.
this.Parent.cmdgrabar.Visible=.T.
thisform.pageframe1.ActivePage=2
SELECT choferes
INSERT INTO choferes (apel) VALUES ("")
thisform.Refresh
thisform.pageframe1.page2.SetAll("readonly",.F.,"textbox") && paar poder ingresar los adtos
RELEASE max_codigo

en el boton grabar (se clikea una vez que tengo cargados los datos para el alta),en el click tengo lo
siguiente:

TABLEUPDATE(1,.T.,'choferes')
SELECT choferes

REPLACE choferes.codemp WITH thisform.maxcodigo IN choferes

thisform.pageframe1.ActivePage=1
thisform.Refresh

cuando hago clik en grabar ,me graba los datos ok (en el grid cuando vuelve a la hoja 1 del p frame veo los datos del alta correctos ,incluido el codigo)
cuando salgo de la pantalla y vuelvo a entrar,me muestra el registro agregado ,pero con el codemp
vacio (como que no lo hubiera grabado ).es el unico dato que no tiene en el cuadro de texto donde se
ingresa
el controlsource asociaod a un campo de la tabla choferes (por eso hago un replace de ese campo solo
despues de hacer el tableupdate ).
necesitaria saber el error.o si hay una manera mas optima de hacer esto .gracias
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:no actualiza campo en tabla

Publicado por Juanma Cruz (508 intervenciones) el 29/11/2010 11:23:19
Es algo complicado de entender... pero a primera vista, te diría que el TableUpdate debe ir después de cualquier Replace, incluido ese Replace choferes.codemp , así te aseguras que todos los campos han sido actualizados correctamente.

Un apunte extra: si quieres que ese código trabaje en multiusuario, y ese código va a ser único para cada registro, deberías obtenerlo justo antes de grabar, y no al inicio del proceso de edición, porque hay un mayor riesgo que dos o más usuarios al mismo tiempo estén hjaciendo lo mismo, y por tanto se produzca un error de llave duplicada.
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:no actualiza campo en tabla

Publicado por alberto (399 intervenciones) el 29/11/2010 20:38:31
medio complicado tu codigo , pero como dice juana cruz el tableupdate() ponlo al final de los replace para confirmar cambios y el ultimo codigo sacalo antes de grabar como dice el compañero, porque puede pasar lo que le dice y se produciria claves duplicadas de codigo, yo lo uso asi en todos mis sistemas , eje boton grabar

select cli000
set order to 1
go bottom
nro=cli000.cod+1
append blank
rlock()
repla cod with nro
....
...
...
unlock all
flush // fueza a que se graben los cambios tambien
tableupdate()
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:no actualiza campo en tabla

Publicado por victor perez (278 intervenciones) el 30/11/2010 01:53:48
Hola,

No entiendo bien, tampoco...pero se ve que hay un error...

Pones "thisform.maxcodigo=max_codigo &&propiedad en el form para guardar el maximo codigo"

Debe ser "thisform.maxcodigo.value=max_codigo &&propiedad en el form para guardar el maximo codigo "

Te falto ".value"

Yo manejo los codigos o en mi caso las numeraciones de recibos y facturas usando una tabla correlativa que contiene el ultimo numero de la factura o recibo.

Al momento de grabar, verifica, si el numero de la factura ya existe en el campo DOC de algun registro de la tabla...si existe, entonces lo incrementa en 1 y hace lo mismo...buscar...

Cuando no lo encuentra (en secuencias de 1) entonces toma ese valor y lo reserva como DOC... asi me aseguro que no se repiten los numeros de facturacion en ambiente multiusuario.

Tambien puedes corroborar que el numero este disponible usando la tabla del correlativo que solo contiene un numero que es el numero de documento actual.

Saludos,

Victor,
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