![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Удаление записей из связанных таблиц [D7]
Андрей (начинающий) © (2009-04-19 12:45:00)Есть 2 таблицы. Связь "Один ко многим" (т.е. одной записи первой таблицы соответствуюет множество записей во второй). Как правильно удалять запись из первой табл. и соответствующие ей записи второй?
Таблицы не индексированы. Что лучше использовать: Locate или Next?
Anatoly Podgoretsky (2009-04-22 11:10:00) [41]К тому же мертвая.
Anatoly Podgoretsky (2009-04-22 11:10:00) [42]Никаких каскадных удалений и транзакций там нет, это очень простая ДБ.
Sergey13 (2009-04-22 10:10:00) [43]> [5] Андрей (начинающий) (22.04.09 09:42)
> как отменить удаление всех записей в обоих?
Нужно почитать (и вникнуть) про транзакции и разобраться с их поддержкой в твоей СУБД.
Ega23 (2009-04-22 10:02:00) [44]
> Лучше проставить каскадное удаление, а не делать вручную.
Не лучше. on delete cascade - штука такая... Одним удалением можно всю базу грохнуть.
Андрей (начинающий) (2009-04-22 09:42:00) [45]
> (19.04.09 13:15) [4]
Удаление по этому методу у меня работает. Возник второй вопрос - как отменить удаление записей из обоих таблиц, если случилась ошибка при удалении какой-нибудь связанной записи? Удаляю их в обработчике BeforeDelete первой таблицы.
1 таблица:
вызывается Delete;
в обработчике BeforeDelete вызывается: while Locate(...) do Delete (для второй таблицы);
Вот, если в удалении записей второй таблицы возникает ошибка, как отменить удаление всех записей в обоих?
Андрей (начинающий) (2009-04-19 13:15:00) [46]
> какая БД
База на основе TTable, создана при помощи компонента VolgaDB. Выбор записей там осуществляется при помощи SQL, а удаление с его помощью не прописано, пэтому надо организовать стандартными средствами.
Я сделал так:
with .... .DataSet do begin
try
Open; Edit; First;
while Locate('имя поля таблицы','значение',[]) do Delete;
Close;
except
on e:Exception do SendErrorMessage(...);
end;
end;
Вроде работает, но хочется узнать - правильно ли я делаю.
Юрий Зотов (2009-04-19 12:58:00) [47]Можно, но нужна дополнительная информация - какая БД и как Вы ее создавали?
Андрей (начинающий) (2009-04-19 12:52:00) [48]
> Юрий Зотов © (19.04.09 12:47) [1]
Это как? Можно в 2 словах объяснить?
Юрий Зотов (2009-04-19 12:47:00) [49]Лучше проставить каскадное удаление, а не делать вручную.