powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / удаление записей
12 сообщений из 12, страница 1 из 1
удаление записей
    #36990459
Makrosa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ест две таблицы А и Б. связью один к многим. как можно одновременно удалить записи по определенному условию из таблицы А и вместе с ним удалить соответствующие записи из Б
...
Рейтинг: 0 / 0
удаление записей
    #36990563
Makrosaест две таблицы А и Б. связью один к многим. как можно одновременно удалить записи по определенному условию из таблицы А и вместе с ним удалить соответствующие записи из БОдновременно - никак. Команда delete в любом варианте удаляет данные только из одной таблицы. С помощью триггеров и касадных связей можно организовать "как бы" одновременное удаление, но внутри все равно будет две команды удаления.
...
Рейтинг: 0 / 0
удаление записей
    #36990844
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если таблицы в контейнере БД то можно транзакцию использовать. BEGIN TRAN ... END TRAN
...
Рейтинг: 0 / 0
удаление записей
    #36990874
Dima TЕсли таблицы в контейнере БД то можно транзакцию использовать. BEGIN TRAN ... END TRANТранзакция обеспечит "неделимость" пары команд, но количество команд от этого не изменится, пара останется парой.
...
Рейтинг: 0 / 0
удаление записей
    #36990946
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проходящий.Dima TЕсли таблицы в контейнере БД то можно транзакцию использовать. BEGIN TRAN ... END TRANТранзакция обеспечит "неделимость" пары команд, но количество команд от этого не изменится, пара останется парой.
Количество команд увеличится, но реальное удаление произойдет одновременно в обоих таблицах по команде END TRAN.
...
Рейтинг: 0 / 0
удаление записей
    #36991395
Makrosa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проходящий.Одновременно - никак. Команда delete в любом варианте удаляет данные только из одной таблицы. С помощью триггеров и касадных связей можно организовать "как бы" одновременное удаление, но внутри все равно будет две команды удаления.

а конкретно можно (например на этом примере)
...
Рейтинг: 0 / 0
удаление записей
    #36991457
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
lnDelId =  1 
BEGIN TRAN
delete From B1 where key_ind = lnDelId
delete From A1 where key_ind = lnDelId
END TRAN
...
Рейтинг: 0 / 0
удаление записей
    #36992187
Makrosa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Makrosaкак можно одновременно удалить записи по определенному условию из таблицы А
наверное неправильно объяснил. я удаляю запись из таблицы А (неважно один или несколько). а из таблице Б самостоятельно должен удалится соответствующие ему записи (с помощью триггера или ...)
...
Рейтинг: 0 / 0
удаление записей
    #36992385
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И?
Всё упирается только в ваше слово "соответствующие", так что приходится напрягать телепатические способности.

Вариант: у вас нормализованные таблицы, тогда имеется что-то вроде tableB.id<=>tableA.id
Удаляем просто:
Код: plaintext
1.
2.
3.
4.
5.
** удаляем записи из связанной таблицы
delete from tableB where tableB.id=tableA.id
** затем удаляем запись из основной таблицы
delete from tableA where tableA.id=...
** или просто текущую запись из текущей таблицы
* delete
Естественно, команду удаления связанных записей в этом случае вполне можно повести на триггер удаления записи из основной таблицы.

Вариант: у вас установлено некое текущее отношение через SET RELATION TO + SET SKIP TO, и вы хотите удалить именно связанные записи. Обычно, связанная таблица имеет индекс по выражению связи, и этот индекс активен. Пусть у нас установлено только одно отношение (для простоты примера). Тогда можно сделать так:
Код: plaintext
1.
2.
3.
4.
5.
MyValue=Evaluate(Relation( 1 ))
select tableB
MyKey=Key(Val(SYS( 21 )))
delete all for Evaluate(MyKey)==MyValue
select tableA
delete
...
Рейтинг: 0 / 0
удаление записей
    #36993488
Makrosa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTMВариант: у вас нормализованные таблицы, тогда имеется что-то вроде tableB.id<=>tableA.id

да у меня такие таблицы. но такой вариант удаления не устраивает (так и я могу). я бы хотел чтоб, когда я удаляю запись (или записи) из таблицы А - таблица А самостоятельно, без моего участия, удаляла запись из В (например с помощью триггера встроенного в таблицу А)
...
Рейтинг: 0 / 0
удаление записей
    #36993573
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Makrosa
> я бы хотел чтоб, ... самостоятельно, без моего участия, ...

Тогда велкам в группу пользователей Большого Брата, и без особой разницы кто будет выбран для миграции, они все
поддерживают ссылочную целостность.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
удаление записей
    #36993717
MakrosaAndreTMВариант: у вас нормализованные таблицы, тогда имеется что-то вроде tableB.id<=>tableA.id

да у меня такие таблицы. но такой вариант удаления не устраивает (так и я могу). я бы хотел чтоб, когда я удаляю запись (или записи) из таблицы А - таблица А самостоятельно, без моего участия, удаляла запись из В (например с помощью триггера встроенного в таблицу А)Ну так засовывайте Ваши таблицы в базу данных и пишите соответствующий триггер. В нем то как раз и будут показанные Вам команды.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / удаление записей
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]