powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / каскадное удаление
35 сообщений из 35, показаны все 2 страниц
каскадное удаление
    #32260121
labanga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые мастера!
Есть 2 таблицы. В одной накладные(ключевое поле - N накладной), а в другой товар(ключевое поле - счетчик) по этим накладным.
По идее, при удалении накладной из одной таблицы, должен удаляться весь товар по этой накладной из другой (у них связь по номеру накладной и каскадное удаление). Но на практике удаление происходит, если одной накладной соответствует только одна запись в таблице с товаром, если 2 и больше, то выдает ошибку (мол, подзапрос вернул более одного значения).
Может кто знает, как с этим бороться.
...
Рейтинг: 0 / 0
каскадное удаление
    #32260130
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделать связь таблиц один-ко-многим
...
Рейтинг: 0 / 0
каскадное удаление
    #32260132
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Внешний ключ таблицы строк накладных-номер накладной? Если стоит "каскадное удаление" - все должно удаляться. Ты чего-то недоговариваешь.
...
Рейтинг: 0 / 0
каскадное удаление
    #32260135
Бобер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В подчиненной табле должен быть внешний ключ?Он есть?Организовывать связь по полям со счетчиком вариант плохой!
...
Рейтинг: 0 / 0
каскадное удаление
    #32260145
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А по какой связи у тебя тогда "Каскадное удаление" стоит?
Я думал по связи "ЗаголовкиНакладной.НомерНакладно=СтрокиНакладной.НомерНакладной".
...
Рейтинг: 0 / 0
каскадное удаление
    #32260146
labanga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
первичный ключ в таблице с накладными, а внешний ключ в подчиненной таблице по номеру накладной
...
Рейтинг: 0 / 0
каскадное удаление
    #32260152
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
labanga,
Ты нас где-то дезинформируешь. Все должно работать (удалять).
...
Рейтинг: 0 / 0
каскадное удаление
    #32260160
labanga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
может какая-то фигня в настройках аксэса, потому что и связь есть и каскадное удаление стоит и удаляет, но только если 1 подчиненная запись, а если 2 то выдает ошибку
...
Рейтинг: 0 / 0
каскадное удаление
    #32260162
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И чего там в ошибке пишет?
...
Рейтинг: 0 / 0
каскадное удаление
    #32260165
labanga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=,<,> or when the subquery is used as an expression
...
Рейтинг: 0 / 0
каскадное удаление
    #32260167
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а может у тебя какой триггер висит на этих таблах?
...
Рейтинг: 0 / 0
каскадное удаление
    #32260169
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Причем тут подзапросы, я чего-то не понял?
...
Рейтинг: 0 / 0
каскадное удаление
    #32260173
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может у тебя в запросе не удаление туфта к-н?
...
Рейтинг: 0 / 0
каскадное удаление
    #32260175
labanga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да, триггер висит - при удалении из подчиненной таблицы происходит обновление 3-ей таблицы
...
Рейтинг: 0 / 0
каскадное удаление
    #32260178
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй руками удалить строчку, у которой есть "подчиненные" и посмотреть, отработает ли каскадное удаление...
...
Рейтинг: 0 / 0
каскадное удаление
    #32260186
labanga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так я руками и делаю. когда 1 подчиненная запись, то все работает как нужно, но когда их 2, то выдает ошибку
...
Рейтинг: 0 / 0
каскадное удаление
    #32260188
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>при удалении из подчиненной таблицы происходит обновление 3-ей таблицы
так здесь собака и порылась. на этом он и стопорит.
вываливай код, будем думать.
...
Рейтинг: 0 / 0
каскадное удаление
    #32260190
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда убери этот триггер, и попробуй без него, если отработает - дело в триггере.
...
Рейтинг: 0 / 0
каскадное удаление
    #32260206
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да и вообще видимо это в другой форум
...
Рейтинг: 0 / 0
каскадное удаление
    #32260207
labanga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
убрал триггер и все заработало, но в чем тут дело?
этот триггер обновляет данные в 3-ей таблице.
...
Рейтинг: 0 / 0
каскадное удаление
    #32260209
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в чем дело, в чем дело.
В ТРИГГЕРЕ ДЕЛО!!!
...
Рейтинг: 0 / 0
каскадное удаление
    #32260214
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sasha_1,
Кстати, интересно узнать, что это такое - триггер?
...
Рейтинг: 0 / 0
каскадное удаление
    #32260217
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Именно в триггере и дело
Который, очевидно, расчитан на удаление только одной строки
Используется там что-нибудь типа Where чтото = (Select ID From Deleted)
...
Рейтинг: 0 / 0
каскадное удаление
    #32260221
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Where чтото = (Select ID From Deleted)
во-во и я о том же.

2 Varan
триггер - енто процедурка такая, которая запускается автоматом после
изменения/удаления данных.
...
Рейтинг: 0 / 0
каскадное удаление
    #32260224
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это в каком Аксессе такой прибамбас есть?
...
Рейтинг: 0 / 0
каскадное удаление
    #32260236
labanga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в данном случае идет работа с MS SQL через аксэс 2000
...
Рейтинг: 0 / 0
каскадное удаление
    #32260241
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 labanga
У тебя еще вопросы остались или сам(а) разберешься с триггером?
...
Рейтинг: 0 / 0
каскадное удаление
    #32260252
labanga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
может подскажете как изменить триггер

FOR DELETE AS
DECLARE @kod nvarchar(55)
DECLARE @kolvo float

SELECT @kod=(SELECT [КодТовара] FROM deleted)
SELECT @kolvo=(SELECT Количество FROM deleted)

UPDATE [3dTab] SET Kol=Kol-@kolvo WHERE ([КодТовара]=@kod)
...
Рейтинг: 0 / 0
каскадное удаление
    #32260320
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Совсем навскидку, просьба не пинать

Код: plaintext
1.
2.
3.
4.
5.
FOR DELETE AS 

UPDATE [3dTab]
SET Kol=Kol-(Select [Количество] From Deleted Where Deleted.[КодТовара]=[3dtab].[КодТовара])
Where [КодТовара] In (Select [КодТовара] From Deleted)
...
Рейтинг: 0 / 0
каскадное удаление
    #32260324
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только наверное
Select Sum ([Количество]) From Deleted Where Deleted.[КодТовара]=[3dtab].[КодТовара]
...
Рейтинг: 0 / 0
каскадное удаление
    #32260332
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скоро посетители форума SQL server поймут, насколько умные люди отвечают на вопросы в форуме Access, и перебегут сюда :-)
...Мне недавно, правда, на акцессовский вопрос насчет подзапросов на ихнем форуме хорошо ответили, но потом этот вопрос удалили (а может, я просто его не нашел)
...
Рейтинг: 0 / 0
каскадное удаление
    #32260341
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вообще-то не уверен, что правильно написал. Первый триггер должне был комом получиться (с почином меня).
Да он и выглядит как-то до безобразия коряво. Почему в MS SQL нельзя Inner Join проапдейтить? Тайна, покрытая мраком...
...
Рейтинг: 0 / 0
каскадное удаление
    #32260420
Владимир Смирнов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
UPDATE [3dTab]
SET Kol = t.Kol - d.SumКоличество
FROM [3dTab] t 
INNER JOIN (Select [КодТовара], sum([Количество]) as SumКоличество From Deleted GROUP BY [КодТовара]) as d 
ON t.[КодТовара] = d.[КодТовара]
WHERE SumКоличество <>  0 
...
Рейтинг: 0 / 0
каскадное удаление
    #32260815
labanga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и вариант Лоха Позорного
Код: plaintext
1.
2.
3.
4.
FOR DELETE AS 

UPDATE [3dTab]
SET Kol=Kol-(Select [Количество] From Deleted Where Deleted.[КодТовара]=[3dtab].[КодТовара])
Where [КодТовара] In (Select [КодТовара] From Deleted)

и вариант Владимира Смирнова
Код: plaintext
1.
2.
3.
4.
5.
UPDATE [3dTab]
SET Kol = t.Kol - d.SumКоличество
FROM [3dTab] t 
INNER JOIN (Select [КодТовара], sum([Количество]) as SumКоличество From Deleted GROUP BY [КодТовара]) as d 
ON t.[КодТовара] = d.[КодТовара]
WHERE SumКоличество <>  0 


работают, но при удалении накладной выдается ошибка
Код: plaintext
Key column information is insufficient or incorrect. Too many rows were affected by update.
...
Рейтинг: 0 / 0
каскадное удаление
    #32260951
labanga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Артем1 в форуме по MS SQL подсказал выставить Set nocount on и все за работало без ошибок. Спасибо всем за помощь.
...
Рейтинг: 0 / 0
35 сообщений из 35, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / каскадное удаление
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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