Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda con ClientDataset.RefreshRecord (https://www.clubdelphi.com/foros/showthread.php?t=66869)

luifervm 16-03-2010 16:29:37

Ayuda con ClientDataset.RefreshRecord
 
Hola !!

Tengo un Problema que se lo que es, pero no se por qué esta pasando:

Estoy usando delphi 6.0 y BDE ... (clientdataset).

Tengo dos tablas en maestro detalle.

En el Encabezado tengo un campo que es calculado en la base de datos que se llama "DIFERENCIA" basicamente es la resta de dos valores que estan en dos columnas diferentes.

En el detalle voy insertanto filas que tienen valor en una u otra columna y hay un trigger en la bd que actualiza el encabezado.

Pongo un ejemplo:

El encabezado tiene todos los valores en 0
Inserto una fila en el detalle que pone un valor 100 a la derecha
Entonces el encabezado quedaria con 0 -100 = -100 en el valor calculado.

Hasta ahi todo funciona perfecto.

Despues de hacer eso necesito actualizar un campo en el encabezado.

Todo funciona bien.

Inserto otra fila y todo funciona bien.

Cuando inserto mas filas, todo deberia funcionar bien, pero tengo un problema cuando tengo que actualizar el campito en el encabezado y se va a "ejecutar" el update (en este caso se hace el post del encabezado). Me saca un error que el campo "DIFERENCIA" no se puede actualizar porque es un campo calculado...

Investigando... cada vez que yo inserto en el detalle hago el applyupdates y luego hago un refreshrecord del encabezado para que "retome" los valores de la base de datos y en el campo DIFERENCIA me ponga el ultimo valor de acuerdo a la ultima insertada en el detalle.

El problema radica en que despues de insertar la segunda fila en el detalle al hacer el refreshrecord... el condenado ya no me trae el ultimo valor despues del insert en el detalle sino que sigue mostrandome el valor ANTES de insertar la tercera fila, entonces claro cuando va a actualizar el campo que necesito en el encabezado, esta tratando de poner un valor "Viejo" en DIFERENCIA, es por eso el error. Lo que no entiendo es porque diablos el refreshrecord me esta funcionando, pero a partir de un tercer insert NO me esta trayendo el ultimo valor....

Resumo los pasos que se estan ejecutando:

Se crea el encabezado, OK.
Se inserta un registro en el detalle, OK
Se ejecuta el applyupdates del detalle y el refreshrecord del encabezado, OK (al insertar el detalle todo lo demas se calcula en la bd mediante triggers y funciona bien).
Se actualiza el campo en el encabezado, se ejecuta el applyupdates y el refresh, OK.

Para el segundo registro funciona igual, perfectamente.

Para el tercer registro, despues del applyupdates en el detalle y el refreshrecord en el encabezado... Se inserta en efecto el detalle, se calcula todo en la bd (si hago un query de la bd veo que TODO ESTA BIEN), pero el "nuevo" valor de la diferencia no lo "actualiza" en la forma, sigo viendo el que tenia despues de insertar la segunda fila... cuando se intenta hacer una modificacion en el encabezado, por tener ese valor "viejo", bota un error en el applyupdates del encabezado...

Alguna Idea??? Gracias !!

Al González 16-03-2010 18:38:17

Creo que esperas que el método RefreshRecord consulte nuevamente a la base de datos. Esa no es su función. En este hilo se explica cómo refrescar un registro consultando a la base de datos.

Saludos.

Al González. :)


La franja horaria es GMT +2. Ahora son las 22:50:17.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi