Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-06-2015
jarlos jarlos is offline
Registrado
 
Registrado: sep 2006
Posts: 8
Poder: 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
 



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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema relación maestro-detalle mas filtrado en DBGrid DANIEL1818 SQL 12 23-06-2015 03:20:43
Problema con ApplyUpdate en relación maestro/detalle Ignacio Gentile Providers 1 26-12-2012 12:43:36
Saber si el DBGrid (Detalle) esta Vacio en Relacion Maestro/Detalle Adrian Murua Conexión con bases de datos 2 03-01-2009 13:48:46
Problema con relación maestro-detalle en ClientDataSet David Conexión con bases de datos 3 11-01-2008 11:02:59
Problema relacion maestro-detalle (Nested Dataset) Toni Conexión con bases de datos 10 19-05-2004 16:38:56


La franja horaria es GMT +2. Ahora son las 18:24:19.


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