PDA

Ver la Versión Completa : Actualizar tabla Maestro con FIBPlus


Jose Roman
22-03-2013, 15:11:53
Hola a todos,

Trabajo con Delphi 2007 y FIBPlus 6.9. En el formulario tengo una tabla maestro tbFacAcu y una tabla detalle tbAbono, esta relacion funciona a la perfeccion, el problema me ocurre cuando trato de actualizar un campo en la tabla maestro (lo hago por medio de codigo) y este no lo actualiza:

tbFacAcu.Edit;
tbFacAcuESTAD.Value := 'C';
tbFacAcu.Post;
tbFacAcu.Refresh;

No se si hay que realizar un paso mas para que esto suceda???

ecfisa
22-03-2013, 17:40:07
Hola Jose.

No uso los componentes FIBPlus, pero la porción de código que mostras es correcta y teóricamente debería guardar el cambio.

Bajo el título Bugs Fixed, leí esto:

4. In some cases TpFIBDataSet.Refresh worked incorrectly if SelectSQL used macros. Now it has been fixed.

de este enlace: FIBPlus 7.4 Release Notes (http://www.devrace.com/en/fibplus/articles/6012.php?sphrase_id=63975). No sé si este sea el motivo, pero es una posibilidad.

Saludos.

Casimiro Notevi
22-03-2013, 18:01:19
Haría falta ver el sql y los parámetros de los componentes.

Al González
22-03-2013, 18:49:02
Justo después de hacer el Post y antes de hacer el Refresh, verifica qué valor tiene el campo ESTAD. E intenta cambiando ese Refresh por Close + Open.

Sólo para indagar.

cloayza
25-03-2013, 13:35:00
Hola a todos,

Trabajo con Delphi 2007 y FIBPlus 6.9. En el formulario tengo una tabla maestro tbFacAcu y una tabla detalle tbAbono, esta relacion funciona a la perfeccion, el problema me ocurre cuando
trato de actualizar un campo en la tabla maestro (lo hago por medio de codigo) y este no lo actualiza:

tbFacAcu.Edit;
tbFacAcuESTAD.Value := 'C';
tbFacAcu.Post;
tbFacAcu.Refresh;

No se si hay que realizar un paso mas para que esto suceda???

Bueno una posible causa es que no estes confirmando la transacción. Para esto hay 2 maneras.

1) Si estas usando el componente TpFIBDataset, puedes activar la propiedad AutoCommit, con lo cual cada vez que haces un Edit...Post se confirma la transacción.
2) Controlar la transacción tú mediante es el siguiente código:

Transacion.StartTransaction;
tbFacAcu.Edit;
tbFacAcuESTAD.Value := 'C';
tbFacAcu.Post;
Transacion.CommitRetaining;
--tbFacAcu.Refresh; Esta línea está de más, ya nque la propiedad TpFIBDataset.Options tiene marcada por default la poRefreshAfterPost, que le indica que
despues de realizar el post refresque el registro.

Siendo Transacion el componente TpFIBTransaction correspondiente.

Bueno eso sería...