Ya lo tengo Marcos, como suele ocurrir, cuando no sabes lo que pasa, revisalo todo. He mirado línea a línea todo el código y por curioso que resulte, dos líneas más abajo del Append, aparece una asignación incorrecta a un campo, que por supuesto no cumple la integridad referencial. Pero la cuestión es que el error saltaba dos líneas antes del lugar donde se realizaba la asignación incorrecta:
Código:
Comparativo.DataSource1.DataSet.Append;
//Obra
Comparativo.DataSource1.DataSet.FieldValues['COMP_OBRA'] := codobra;
Comparativo.DataSource1.DataSet.FieldValues['COMP_OBRA'] := false;
Eso es lo que me hacía mirar el código hasta ese punto y no más abajo. ¿No parece normal verdad?. Bueno, por lo menos esto me enseñará a no confiar al 100% en el punto que me indica el trazado.
Gracias por todo Marcos. Un saludo.