![]() |
|
|
![]()
|
|
| SunRaider |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 10.5.2007 Репутация: нет Всего: -1 |
Такой вопрос. В базе есть две таблицы "Покупатели" и "Договоры". Я связываю их с помощью MasterFields. Покупатели - master, Договоры - detail. Соответственно таблицы выводятся в два DBGrid'a. Т.е. при установке курсора в первом на покупателе, во втором отображаются все его договоры.
Вопрос следующий: как сделать каскадное удаление данных из этих двух таблиц? Т.е. чтобы при удалении одного из покупателей удалялись и все его договоры. Заранее спасибо. |
|||
|
||||
| Валерия |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 10.3.2007 Репутация: нет Всего: 8 |
А в MasterFields разве нет при создании внешнего индекса (так называемой "связи") галочки "каскадное удаление данных" или подобное?
|
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 7 Всего: 118 |
определенно за целостностью базы данных должна следить база данных. триггеры и констрайны вам в помощь
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| SunRaider |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 10.5.2007 Репутация: нет Всего: -1 |
Валерия, там открывается Field Link Designer и там можно только указать поле, по которому осуществляется связь. Или это руками надо дописывать?
jonie, не понял идеи. Можете конкретизировать? |
|||
|
||||
| Dmi3ev |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 16 Всего: 41 |
имеется в виду, что есть триггеры. Триггер - это процедура, которая срабатывает автоматически после совершения какого-то действия. Например:
В данном примере после удаления в таблице А записи, срабатывает триггер, который удаляет записи в таблице B, которые относятся к удаляемой записи в таблице A. Вот примерная суть того, что хотел сказать jonie. То, что происходит в данном примере называется каскадным удалением. Добавлено через 7 минут и 38 секунд Если у Вас ничего не получается, можно тупо sql запросом сделать:
и когда вы удаляете из А данные просто использовать этот запрос (конечно динамический, А.field1 будет меняться). -------------------- |
||||||
|
|||||||
| SunRaider |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 10.5.2007 Репутация: нет Всего: -1 |
Dmi3ev, а код для триггера был дан с учетом MS SQL Server? Потому что он упорно пишет: "Неправильный синтаксис около конструкции FOR".
Попробовал написать такой же запрос по примеру из MSDN:
на что получил такую ошибку:
Кстати, такую же ошибку он выдает и при попытке выполнения второго приведенного Вами запроса. |
||||
|
|||||
| Dmi3ev |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 16 Всего: 41 |
нет, я просто раскрыл суть. я же не телепат, не знал, что Вы используете))) а как писать триггеры, особенно такие простые, много где написано, наверное... можно и поискать... -------------------- |
|||
|
||||
| Michrutka |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 6.2.2008 Репутация: нет Всего: нет |
Сейчас под рукой нет MSSQL
но так на взгляд попробуй
Это сообщение отредактировал(а) Michrutka - 14.12.2008, 00:30 |
|||
|
||||
| SunRaider |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 10.5.2007 Репутация: нет Всего: -1 |
Michrutka, та же самая ошибка:
|
|||
|
||||
| Dmi3ev |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 16 Всего: 41 |
Советую почитать, как создается триггер. Помимо этого для того, чтобы триггер сработал необходимы некоторые условия... Про специфику триггеров в MS SQL почитать стоит, я думаю... Ведь много информации, например, первое, что открылось уже может помочь... Почитайте... http://www.sql.ru/forum/actualthread.aspx?tid=428247 -------------------- |
|||
|
||||
| SunRaider |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 10.5.2007 Репутация: нет Всего: -1 |
Dmi3ev, спасибо, реально помогло. Мог бы, обязательно поставил +1.
|
|||
|
||||
| orthrus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 400 Регистрация: 30.10.2007 Где: г. Усть-Илимск(Ир кутская обл.) Репутация: 4 Всего: 16 |
-------------------- У того, кто ничего не делает, всегда много помощников.© Л.Н. Толстой ![]() |
|||
|
||||
| SunRaider |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 10.5.2007 Репутация: нет Всего: -1 |
orthrus, спасибо и Вам)
|
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |