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

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

Удаление записей из связанных таблиц [D7]


Страницы:   1 2 3

Андрей (начинающий) ©   (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]

Лучше проставить каскадное удаление, а не делать вручную.


Страницы:   1 2 3

Наверх

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