Это старый. но моя ситуация может случиться для кого-то еще. поэтому я отправляю этот ответ.
Эта ошибка произошла и для меня.
Я использовал базу данных Access и использовал TADOTable в форме.
связь была мастер-деталью, и я соединил все таблицы с IDE Designer вместе.
мои таблицы были tbl_Floor, tbl_FloorParts, tbl_Seat, tbl_Floor которых был мастером tbl_FloorParts, а tbl_FloorParts был мастером tbl_Seat.
Так что для решения этой ошибки я сделал этот трюк.
procedure Tfrm_Main.UpdateTblFloor(...);
var
FID:Integer;
q:TADOQuery
begin
FID:=tbl_Floor.FieldByName('FID').AsInteger;
tbl_Floor.Close;
q:=TADOQuery.Create(nil);
try
q.Connection:=tbl_Floor.Connection;
q.SQL.Add('Update [Floor]');
q.SQL.Add(...);//Set Fields that needed to be updated
q.SQL.Add('where [FID]='+IntToStr(FID));
q.ExecSQL;
finally
q.free;
end;
tbl_Floor.Open;
tbl_Floor.Locate('FID',FId,[loPartialKey]);
end;
и я добавил эти события для tbl_Floor, tbl_FloorParts
procedure Tfrm_Main.tbl_FloorAfterOpen(DataSet: TDataSet);
begin
tbl_FloorParts.Open;
end;
procedure Tfrm_Main.tbl_FloorBeforeClose(DataSet: TDataSet);
begin
tbl_FloorParts.Close;
end;
procedure Tfrm_Main.tbl_FloorPartsAfterOpen(DataSet: TDataSet);
begin
tbl_Seat.Open;
end;
procedure Tfrm_Main.tbl_FloorPartsBeforeClose(DataSet: TDataSet);
begin
tbl_Seat.Close;
end;