![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка при удалении [D7, Paradox]
Ilg © (2006-08-06 22:45:00)Здравствуйте!
Столкнулся с такой проблемой:
Имеются две связанные таблицы ...
При удалении записи из одной выдается сообщение об ошибке Master has detail records. Cannot delete or modify.
Почему это происходит и как этого избежать?
Заранее Большое спасибо!
Neo Trinitron (2006-08-08 10:59:00) [1]Блин, а запросами нельзя было удалить?
> При изменении записи в родительской таблице нужно проводить подобные действия с дочерней?
надеюсь не идёт речь об редактировании ключевого поля?
Ilg (2006-08-07 19:50:00) [2]Разобрался ... Оказывается у меня указатель в Table2 смещался и была попытка удалять другую запись.
Теперь другой вопрос (может быть глупый):
При изменении записи в родительской таблице нужно проводить подобные действия с дочерней?
Ilg (2006-08-07 17:13:00) [3]Делаю с удалением в дочерней таблице. Но ошибка все равно возникает :-(
Делаю так:
procedure TDataModule1.Table2BeforeDelete(DataSet: TDataSet);
begin
Table1.DisableControls;
Table1.Filter:='Topic='+QuotedStr(Table2ShN.AsString);
Table1.Filtered:=true;
//showmessage('Table1:'+inttostr(Table1.RecordCount));
Table1.First;
while not Table1.EOF do
Table1.Delete;
//showmessage('Table1:'+inttostr(Table1.RecordCount));
Table1.Filtered:=false;
Table1.EnableControls;
end;
Причем записи из Table1 удаляются нормально, а при удалении из Table2 возникает та же ошибка (Master has detail records. Cannot delete or modify).
Что я делаю не так? Может что-то забыл?
Desdechado (2006-08-07 11:01:00) [4]Ccылка одной таблицы на другую - это не надпись на заборе, а забота о логической непротиворечивости и целостности данных. Если тебя эти 2 понятия не заботят, сними ссылку. Если заботят, то играй по правилам - сначала удаляй все, что использует это значение из справочника, а затем уже удаляй справочное значение.
Sergey13 (2006-08-07 10:54:00) [5]> [2] Ilg (07.08.06 10:33)
> Т. е. нет способа просто удалить запись в первой таблице?
Если в Парадоксе нет каскадного удаления (я не в курсе), то по другому нельзя. Эта связь для того и сделана, что бы запретить удаление записей, имеющих связанные дочерние.
Ilg (2006-08-07 10:33:00) [6]Если я правильно понял, то я должен сначала удалить все записи второй таблицы, имеющие в связанном поле значение = значению в удаляемой записи Master. Или нет?
Т. е. нет способа просто удалить запись в первой таблице?
Anatoly Podgoretsky (2006-08-06 23:58:00) [7]Потому что Master has detail records и наложена ссылочная целостность. И удаление не их одной из них. А из мастера. Удали раньше детальные записи.