Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-01-2005
mar646 mar646 is offline
Miembro
 
Registrado: dic 2004
Posts: 46
Poder: 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
  #2  
Antiguo 15-01-2005
Avatar de StartKill
StartKill StartKill is offline
Miembro
 
Registrado: ene 2004
Posts: 299
Poder: 21
StartKill Va por buen camino
Question

Wnas...No tengo mi Delphi mano ni mi interbase ;-)

Pero me gustaria saber en que evento haces nuevamente el applyupdates... no estoy muy seguro pero "pero lo digo por sospecha" pero se supone que debes reconciliar el error y resolverlo registro por registro "lo lei o me dijieron"...

Your friend;

StartKill
Lima-Perú
Responder Con Cita
  #3  
Antiguo 17-01-2005
mar646 mar646 is offline
Miembro
 
Registrado: dic 2004
Posts: 46
Poder: 0
mar646 Va por buen camino
Hola. Gracias por tu respuesta pero ya intenté atrapar el error en el reconcileerror pero no me funciona como yo quiero. Está claro que lo que debería de hacer es ir haciendo applyupdates línea a línea y no me daría este problema, e incluso irá mejor la aplicación (es lo que pasa cuando se empieza a programar por primera vez con estos componentes, será la inexperiencia) y eso es lo que haré

Para tu información mi idea era el hacer el applyupdates al terminar de introducir todo el cuerpo del documento y claro, si me da un error en un registro pos ya la tengo liada, .

De todas formas muchas gracias.
Responder Con Cita
  #4  
Antiguo 17-01-2005
Avatar de StartKill
StartKill StartKill is offline
Miembro
 
Registrado: ene 2004
Posts: 299
Poder: 21
StartKill Va por buen camino
Holas,

Parece que no me explicado bien... la idea no es hacer un applyupdate linea a linea... la idea es reconciliar el error y el error es a nivel registro por registro... osea esta bien que apliques la actualizacion a todo el detalle..."tal como lo tienes pensado".

No se si ya habras conseguido tu obejetivo...

Your friend

StartKill
Lima-Perú
StartKill@hotmail.com
Responder Con Cita
  #5  
Antiguo 18-01-2005
mar646 mar646 is offline
Miembro
 
Registrado: dic 2004
Posts: 46
Poder: 0
mar646 Va por buen camino
Gracias Startkill. Lo he solucionado haciendo applyupdates línea a línea y te explico por qué.

El caso es que mi primera opción era lo del reconcilie, pero o no sé usarlo o a mi no me funcionaba como yo esperaba. Además ahí sólo te llegan los registros que han tenido error, pero los otros han quedado modificados en la base de datos y mi aplicación no veía los cambios, por lo que cuando iba a hacer otro applyupdates me decía que ya existía un registro con la misma id. Total que después de darle muchas vueltas opté por la solución de aplicar el applyupdates a cada línea y todo me va fenomenal. Incluso yo diría que va más rápido.

De todas formas muchas gracias por tu ayuda.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 17:13:47.


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
Copyright 1996-2007 Club Delphi