Hola,
tengo una relación Maestro/detalle usando ClientDataSets anidados; todo funcionaba a la perfección... inserciones, borrados, cambios en padre, en hijo, y todo estaba bien. Ayer tuve que modificar la tabla padre, que realmente es un view... Comenzaron los problemas. Al insertar un hijo, ClientDataSet me envía el error "edbclient: no corresponding master record found".
He debuggeado, y el nuevo registro hijo contiene correctamente la FK al padre.
hice una forma de prueba, con dos grids... el del padre y el hijo, y al mover los registros de padre, hay sincronización correcta con el grid hijo.
Por si las dudas, al insertar el hijo, hice esto:
Cita:
procedure Tz_DataModule_Seguridad.ClientDataSet_Usuario_Grupo_xBeforePost(
DataSet: TDataSet);
begin
if DataSet.State = dsInsert then
begin
DataSet.FieldByName( 'usuario_id' ).AsString:= Self.ClientDataSet_Usuario.FieldByName( 'usuario_id' ).AsString;
end;
|
Más no es necesario, ya que al parecer internamente se asignan estos valores, al tener ClientDataSet anidados.
Para la actualización de datos del ClientDataSet anidado, tengo esto:
Cita:
procedure Tz_DataModule_Seguridad.DataSetProvider_UsuarioGetTableName(
Sender: TObject; DataSet: TDataSet; var TableName: WideString);
begin
if DataSet.Name = 'SQLDataSet_Usuario_Grupo_x' then
TableName:= 'Z_USUARIO_GRUPO_X'
else if DataSet.Name = 'SQLDataSet_Usuario' then
TableName:= 'Z_USUARIO';
end;
|
Lo cual venía funcionando perfectamente.
Qué podrá ser??