Ver Mensaje Individual
  #1  
Antiguo 28-06-2015
jarlos jarlos is offline
Registrado
 
Registrado: sep 2006
Posts: 8
Reputación: 0
jarlos Va por buen camino
FireDAC - Problema con relación Maestro/detalle y columna AutoInc

Hola...

Estoy presentando un inconveniente con los componentes FireDAC.

Tengo una tabla maestra y una tabla de detalles. La tabla maestra tiene un campo AutoInc que es el campo clave y sirve para relacionar con la tabla de detalles. En estos momentos puedo hacer inserciones y modificaciones de registros.

Adicionalmente en la tabla de detalles he creado una restricción "unique constraint" que cuando se "viola" genera una excepción.

El problema se presenta cuando un usuario guarda los datos y se genera la excepción.

Cuando un usuario crea un nuevo registro el campo clave AutoInc tiene el valor -1 y todos los renglones de detalles que se van agregando toman el valor -1 en el campo de la relación. Al ejecutar el "ApplyUpdates" en el maestro, el campo AutoInc toma el próximo valor que le corresponde en la base de datos (MS SQL Server) en la tabla maestra (ejemplo: 5) y cuando se ejecuta el "ApplyUpdates" de los detalles se genera la excepción y el campo de la relación en los renglones de detalles se mantienen en -1. Esto hace que los renglones de detalles se pierdan porque ya no pertenecen al maestro "actual". No sé si estoy omitiendo alguna instrucción o algún parámetro de conexión o parámetro de los querys.

El código para guardar que estoy utilizando es:
Código Delphi [-]
  ADConnection1.StartTransaction;
  if (qrMaster.ApplyUpdates(0) = 0) then begin
    if (qrDetails.ApplyUpdates(0) = 0) then begin
      ADConnection1.Commit;
      qrMaster.CommitUpdates;
      qrDetails.CommitUpdates;
      Showmessage('Información almacenada');
    end
    else begin
      ADConnection1.Rollback;
    end;
  end
  else begin
    ADConnection1.Rollback;
  end;

¿A alguien le ha pasado o sabe por qué puede estar pasando?

De antemano, muchas gracias.

Última edición por nlsgarcia fecha: 28-06-2015 a las 06:52:10. Razón: Sintaxis Delphi
Responder Con Cita