Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка при удалении [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 и наложена ссылочная целостность. И удаление не их одной из них. А из мастера. Удали раньше детальные записи.


Наверх

Титульная страница Поиск, карта сайта Написать письмо