Ver Mensaje Individual
  #1  
Antiguo 14-01-2005
mar646 mar646 is offline
Miembro
 
Registrado: dic 2004
Posts: 46
Reputación: 0
mar646 Va por buen camino
Problemas con applyupdates

Bueno en primer lugar decir que no sabía dónde situar este hilo, así que si me equivoco ruego que me disculpen.

Uso Firebird 1.5, delphi7 y dbexpress.

El caso es que tengo 2 tablas. La primera de ellas es la cabecera de un documento (una factura por ejemplo) y la segunda es el cuerpo de esa cabecera. Indicar que están relacionadas por un campo en la segunda tabla que indica a qué documento pertenece.

El proceso que sigo es el siguiente:
- Abro una transacción.
- Modifico o inserto tanto la cabecera como las diferentes líneas.
- Hago ApplyUpdates de la cabecera.
- Hago ApplyUpdates del cuerpo. (Aquí hay más de un registro afectado)
- Si todo ha ido bien, hago commit de la transacción.
- En caso contrario dejo que pueda volver a hacer cambios.
- Si cancelo, hago rollback de la transacción.

Para acceder a la primera tabla uso un TSQLquery (para traerme únicamente un único registro), con un provider y un clientdataset. En el query indico los campos claves y el provider lo tengo a upwherekeyOnly.

Para la segunda tabla tengo la misma estructura.

El caso es que si no se produce ningún error en la base de datos (los dos applyupdates son correctos) todo va fenomenal. Si se produce un error en el primer applyupdates, también va todo bien. El problema viene cuando el primer applyupdates es correcto (no creo que sea la causa de lo que me pasa) y en el segundo applyupdates (el que afecta al cuerpo y por tanto puede afectar a más dé un registro) falla. En tal caso recojo la excepción y la muestro, hasta ahí bien. Pero cuando arreglo el fallo de esa línea y vuelvo a hacer applyupdates del conjunto, me acepta todo bien pero me duplica los registros que no han dado error y que eran nuevos en el cuerpo, con los existentes no hace nada raro.

¿Alguna idea? ¿Si se produce un error al hacer un applyupdates que afecta a más de un registro, se producen los cambios que no dan error, o por el contrario el applyupdates se hace de todo o de nada?

De antemano muchas gracias.
Responder Con Cita