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

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

Delete from table [D5, Paradox]


Романов Р.В. ©   (2003-02-05 10:54:00) 

Можно ли в одном SQL запросе удалить записи из нескольких таблиц? Если можно, то напишите простой примерчик пожалуйста.


Романов Р.В.   (2003-02-05 14:35:00) [1]

Не работает и @рен с ними. Тут и так все пугают что Paradox на каждом шагу падает. Я думаю надежность от них бы не увеличилась.


VAleksey   (2003-02-05 14:31:00) [2]


> Романов Р.В. © (05.02.03 14:11)
>
> > внешние ссылки с каскадным удалением

Да написано - то написано, да только не работает это.


Романов Р.В.   (2003-02-05 14:19:00) [3]


> В Rx library есть TSQLScript

Ценная весчь. Спасибо.


Романов Р.В.   (2003-02-05 14:11:00) [4]


> внешние ссылки с каскадным удалением

Ни разу не слышал про это. В help"е где нибуть написано? Они объявляются при создании структуры таблиц в Database Desctop?


passm   (2003-02-05 13:56:00) [5]

Ламер (05.02.03 13:51)> В Rx library есть TSQLScript. Позволяет выполнить серию запросов, разделенных терминаторным символом (по умолчанию "/").


Ламер   (2003-02-05 13:51:00) [6]

:passm
А как через скрипт?


passm   (2003-02-05 13:47:00) [7]

Романов Р.В. © (05.02.03 12:56)> Насколько я помню, в Paradox"е можно объявлять внешние ссылки с каскадным удалением...


Романов Р.В.   (2003-02-05 12:56:00) [8]

Хорошо тогда такая задача. Имеем таблицы Города, Клиенты, Грузы, Оплата груза.

При удалени груза пишем 2 запроса
delete
from Оплата груза
where IdГруза = 16(для примера)

delete
from Грузы
where IdГруза = 16

При удалении Клиента нужно удалить все его грузы и информацию об их оплате. Получается уже 3 запроса
delete
from Оплата груза
where IdГруза in
(select IdГруза
from Грузы
where IdКлиента = 23(для примера))

и второй запрос
delete
from Грузы
where IdКлиента = 23

delete
from Клиенты
where IdКлиента = 23

Если удаляем город, то нужно удалить всех клиентов 3 запроса и все грузы 3 и сам город. Итого 7 запросов.

Получается какая - то геометрическая прогрессия, точнее факториал :(. Может как то можно оптимизировать все это что бы не писать столько запросов?


MsGuns   (2003-02-05 11:58:00) [9]

В Парадоксе тоже нельзя удалить (изменить/вставить) в более чем одной таблице ОДНИМ ЗАПРОСОМ. С какой стати это будет можно в Local SQL ? Если надо ОДНОВРЕМЕННО (в смысле логически за один цикл программы, например) удалить записи из неск. таблиц, как, допустим в случае удаления записи-"родителя" и ее "детей", то делается это или TDataSet.Delete поочередно из каждой таблицы, или двумя ПОСЛЕДОВАТЕЛЬНО выполняемыми запросами (сначала на детале, затем на мастере). Если данные на SQL-сервере, то такие запросы объединяют в одну транзакцию, которую и выполняют с последующим подтверждением (commit) или откатом (rollback)


Johnmen   (2003-02-05 11:06:00) [10]

Нет


Романов Р.В.   (2003-02-05 11:05:00) [11]

Спасибо и на этом.


passm   (2003-02-05 11:02:00) [12]

Романов Р.В. © (05.02.03 10:54)> Стандартно нельзя. Только через скрипт.


Наверх

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