Ver Mensaje Individual
  #1  
Antiguo 28-08-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Consulta: Maestro/Detalle, CachedUpdates

Hola compañeros.

Antes de comenzar: Delphi7 y Firebird 2.1.

Tengo dos IBDataSets en relación maestro/detalle. Les adjunto los campos significativos para clarificar:

Código Delphi [-]
// CAMPOS DEL MAESTRO
  tbMaes: TIBDataSet;
  tbMaes_ID: TIntegerField;
  tbMaesCod: TIBStringField;      //  NOT NULL  
  tbMaesFec: TDateTimeField;      //  NOT NULL
//  ...
// CAMPOS DEL DETALLE
  tbDetal: TIBDataSet;            
  tbDetal_ID: TIntegerField;      // NOT NULL 
  tbDetalRDia: TIntegerField;     // NOT NULL REFERENCES (tbMaes) 
  //...

Tengo que ingresar y guardar los campos del archivo detalle antes de que todos los campos del maestro
hayan sido completados, así lo requiere el ingreso.
Bástaría con hacer un post y un edit antes de guardar el detalle para funcionar correctamente,
pero se dispara lógicamente una excepción por no estar ingresados los campos "not null" en el maestro.

La solución que encontré, fue Activar CachedUpdates en los IBDataSets Maestro y detalle, para poder
realizar el post y evitar la excepción, ya que todavía los datos no han sido enviado al servidor.

Luego al guardar los IBDataSets involucrados hice:
Código Delphi [-]
  tbDetal.DataSource:= nil;
  IBDatabase.ApplyUpdates([tbMaes,tbDetal]);
  IBTransaction.CommitRetaining;
  tbDetal.DataSource:= dsMaes;

Funciona bién. Pero me queda la duda si es buena manera de hacerlo o si existe otra opción...

Espero haber sido claro y gracias por leer estas líneas.

Saludos.

Última edición por ecfisa fecha: 28-08-2010 a las 22:34:08.
Responder Con Cita