Форум программистов, компьютерный форум, киберфорум
Наши страницы

MS Access

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
Kkarn
537 / 170 / 23
Регистрация: 02.12.2014
Сообщений: 819
#1

Почему не срабатывает событие удаления записи? - MS Access

29.12.2014, 13:14. Просмотров 1835. Ответов 44
Метки нет (Все метки)

Есть необходимость пересчета некоторых полей в форме ПОСЛЕ УДАЛЕНИЯ записи. Событие Удаление возникает фактически же ДО удаления? А событие "После подтверждения Del", я так понимаю, возникает после подтверждения удаления (т.е. когда программа выведет диалоговое окно и мы подтвердим удаление), а поскольку в настройках базы отключена выдача таких подтверждений - событие не возникает... Как "поймать" удаление записи в таком случае?...
2
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2014, 13:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему не срабатывает событие удаления записи? (MS Access):

Событие удаления или добавления поля n записи m в форме - MS Access
Подскажите,пож-ста,какое событие происходит при добавлении или удалении такого-то поля такой-то записи из формы. Заранее спасибо.

Не срабатывает событие - MS Access
Здравствуйте! Помогите разобраться. Создал с помощью конструктора форму с вкладками. И к вкладке создал событие "Click". Но при переходе...

Событие Form_Delete: проблема при невозможности удаления - MS Access
Хочется отслеживать удаление записей из некоторых таблиц и вести соответствующий журнал. Поскольку триггеров нет (переходить на ADP по ряду...

Блокировка удаления записи - MS Access
Подскажите как проще всего заблокировать возможность удаления записи через форму. Необходимо чтобы если один пользователь ставит...

Почему не срабатывает SQL запрос в VBA? - MS Access
Уже второй час сижу с ним - не могу понять проблемы. Смотрите: var = Me.ИД_Пользователя Set rst = CurrentDb.OpenRecordset("SELECT *...

Почему иногда не срабатывает функция итогов в табличной форме? - MS Access
Добрый день всем. Неоднократно натыкался на подобное, в конце концов решил спросить у знающих, в чем может быть причина. Допустим,...

44
mobile
21517 / 12126 / 2401
Регистрация: 28.04.2012
Сообщений: 13,347
29.12.2014, 13:44 #2
Вам нужно воспользоваться параметром Cancel процедуры удаления Del. Если установить Cancel=True, то удаления не произойдет. То же действие на событии BeforeDelConfirm отменит удаление оставшихся записей, если выделены для удаления несколько записей.
0
Kkarn
537 / 170 / 23
Регистрация: 02.12.2014
Сообщений: 819
29.12.2014, 14:10  [ТС] #3
mobile, Хм... Что-то недопонял. Так а если мне нужно, чтобы запись была удалена? Просто после ее удаления нужно изменить значение определенного поля в форме?.. То есть я не борюсь с удалением как бы)...

Добавлено через 19 минут
Вот смотрите. У меня есть форма. на ней - две подчиненные. В одной, допустим - записи с полями Дата и Сумма, во второй - привязанные к первой записи с расшифровкой суммы по статьям, т.е. например поля Статья и Сумма. Мне нужно, чтобы после любых изменений во второй подчиненной форме (добавления, изменения, удаления записей) в поле Сумма первой подчиненной формы обновлялась общая сумма. Я понимаю, что вцелом структура сделана слегка нелогично, но саму форму переделывать я не имею права, мне только нужно сделать, чтобы правильно обновлялась сумма в первой подчиненной форме. Так вот, путем хитрых запросов на группировку и обновление я добился, что сумма обновляется при изменении и добавлении записей во вторую форму. А вот при удалении - не обновляется...
Я уже как только ни пытался организовать обновление этой саммой итоговой суммы... И делал в примечании второй формы поле с итогом, пытался ссылаться на него, но получается, что данные в нем обновляются уже после событий добавления и изменения записей, ну да бог с ним. Вот кое-как решил вопрос через запросы на группировку и обновление, но смог посадить их только на события обновления записей, а удаление поймать не могу...
0
commun
354 / 192 / 8
Регистрация: 29.10.2014
Сообщений: 801
29.12.2014, 15:51 #4
Попробуйте после удаления запустить команду (мб сработает)
Visual Basic
1
DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70 'обновить
Добавлено через 1 минуту
нужно обновлять форму,в кот хотите увидеть новый результат в модуле этой самой формы
0
Kkarn
537 / 170 / 23
Регистрация: 02.12.2014
Сообщений: 819
29.12.2014, 16:23  [ТС] #5
commun, Да нет, тут суть не в обновлении, в общем-то... Если брать мой приведенный выше пример, то если бы я ПОСЛЕ УДАЛЕНИЯ записи в подчиненной форме 2 обновил запросом данные таблицы из подчиненной формы 1, то да, после команды обновления эти данные отобразились бы новыми. А так, поскольку удаление записи в форме 2 уже прошло, а данные в таблице 1 не были обновлены запросом на обновление (поскольку я так и не смог найти, на какое событие посадить выполнение этого запроса) - то сколько ни обновляй, данные в форме 1 (и соответственно, ее таблице 1) будут старыми.
Вся суть моего вопроса как бы - найти событие формы, которое бы происходило сразу ПОСЛЕ удаления (причем это не событие AfterDelConfirm, т.к. оно возникает только если программой выдается вопрос о подтверждении удаления - а у нас в параметрах отключено подтверждение удаления)... Капец, неужели ж таки нету какого-то способа "помать" событие, которое бы гарантированно происходило СРАЗУ ПОСЛЕ удаления записи - и посадить на него выполнение нужного мне запроса?..
0
commun
354 / 192 / 8
Регистрация: 29.10.2014
Сообщений: 801
29.12.2014, 17:17 #6
В книжке написано,что при удалении записи формы в ней последоват происходят 3 события (но я втек жизни я с ними если и работал,то уже не помню):Delete-BeforeDelConfirm-AfterDelConfirm. Так что есть еще 2 события и думаю,что Delete-то самое,искомое.
0
mobile
21517 / 12126 / 2401
Регистрация: 28.04.2012
Сообщений: 13,347
29.12.2014, 17:20 #7
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Если по каким-то причинам Вам не удается использовать событие AlterDelConfirm, то можно и нужно использовать стандартную последовательность событий формы. После удаления записи обязательно наступает событие Текущая запись. Возможно, что именно там Вам будет уместно задавать дальнейшие телодвижения для формы. Может быть с проверкой, скажем публичной переменной, которой задается True на событии удаления и False на текущей записи.
1
Kkarn
537 / 170 / 23
Регистрация: 02.12.2014
Сообщений: 819
29.12.2014, 17:23  [ТС] #8
commun, Я про них уже тоже много чего начитал)... событие Delete - происходит ДО фактического удаления записи. То есть тогда, когда она еще есть в таблице... И если в это время сделать запрос к таблице, то данные о сумме еще будут в ней, и соответственно, пойдут в общую сумму. Вот уж не думал, что в Access может быть такой странный затык. Либо я как-то не понимаю логику этих самых событий... Про другие два события, связанные с удалением - та же фигня, они происходят одно - перед удалением, а второе - после, но только если пользователь подтверждает удаление в сообщении, которое выдает Access. А выдача таких сообщений у меня в базе в данном случае отключена... Какой-то тупик получается.

Добавлено через 54 секунды
mobile, Спасибо, а вот это и правда мысль)) Буду проверять.
0
commun
354 / 192 / 8
Регистрация: 29.10.2014
Сообщений: 801
29.12.2014, 17:33 #9
ни в коем случае,не буду спорить про Delete, но при событии Before.. пользователь может только запомнить данные до удаления,но самих данных уже нет
0
Kkarn
537 / 170 / 23
Регистрация: 02.12.2014
Сообщений: 819
29.12.2014, 20:06  [ТС] #10
commun, то есть фактически данных уже нет в таблице, когда наступает событие BeforeDelConfirm?.. Хм, тоже не буду спорить, я вроде бы читал, что это событие идет до фактического удаления... Ну, если и правда так, то у меня есть еще один вариант действий для проверки. Спасибо)

Добавлено через 2 часа 8 минут
Похоже, я таки чего-то не понимаю... Скажите, когда уже ПОСЛЕ удаления в форме наступает событие Текущая запись - данные из таблиц УЖЕ УДАЛЕНЫ окончательно?.. Я только что столкнулся с вот чем. Как и советовал mobile, я сделал в форме глобальную переменную, на событие удаления в форме присваиваю ей True, в событии Текущая запись прописываю сначала исполнение нужных запросов на обновление данных в таблице 1... И ни черта не обновляется! При этом я еще напихал в код мсжбоксов для контроля прохождения - так вот, по ним выходит, что событие Текущая запись настало, все запросы на обновление благополучно отработали, но данные в таблице при этом ОСТАЛИСЬ ПРЕЖНИЕ! То есть выходит, что на момент выполнения запросов еще оставались удаленные данные? Ведь итоговая сумма не изменилась, а должна была уменьшиться на сумму из удаленной записи... Я вообще ничего не понимаю.
0
commun
354 / 192 / 8
Регистрация: 29.10.2014
Сообщений: 801
29.12.2014, 20:19 #11
Событие Current возникает только при открытии, закрытии формы и при переходе от одной записи к другой.Причем еще надо каждый раз четко разбираться-это какая текущая запись? это событие этой записи или записи, к которой совершен переход. При чем здесь удаление? Я свое мнение уже ясно изложил. Да, ведь можно удалить последнюю запись, и где же Вы тогда возьмете текущую?
0
Kkarn
537 / 170 / 23
Регистрация: 02.12.2014
Сообщений: 819
29.12.2014, 20:58  [ТС] #12
commun, Ок, я проверил заодно и событие BeforeDelConfirm... Не знаю, каким чудным образом, но данные все равно остаются... То есть на момент события данные в таблице ЕСТЬ, и запрос их видит, потому и итоговая сумма не изменяется. Ужас какой-то просто. Этом при добавлении и изменении строк - запросы работают идеально, значит дело не в них...

Добавлено через 5 минут
Я, наверное, сейчас смоделирую ситуацию и выложу файл примера. Я ж теперь ночь спать не буду, пока не пойму, почему не работает...
0
commun
354 / 192 / 8
Регистрация: 29.10.2014
Сообщений: 801
29.12.2014, 21:25 #13
Если форма на запросе, то имейте в виду, что запрос на момент открытия формы выполняется 1 раз и выдает данные,проверьте саму таблицу, запрос-это фото прежних данных, для получения новых нужно выполнять запрос еще раз

Добавлено через 33 секунды
те обновлять форму

Добавлено через 20 минут

Не по теме:

Цитата:"среди разработчиков бытует мнение, что запросы, формы и отчеты могут врать, а таблицы-никогда"



Добавлено через 3 минуты
Запрос выполняется еще и после изменения или удаления данных в таблице
0
mobile
21517 / 12126 / 2401
Регистрация: 28.04.2012
Сообщений: 13,347
29.12.2014, 21:43 #14
Kkarn, посмотрите пример. Выполняется удаление записи по предложенному выше варианту. При этом, исключительно для иллюстрации, в поле Оклад1 записывается значение оклада удаленного сотрудника, деленное на количество оставшихся :-)
0
Вложения
Тип файла: zip delete.zip (38.5 Кб, 9 просмотров)
Kkarn
537 / 170 / 23
Регистрация: 02.12.2014
Сообщений: 819
29.12.2014, 21:47  [ТС] #15
Собственно, вот. Есть форма, в ней - две связанные через поле связи подформы - Таблица 1 и таблица 2. Я для примера заполнил их. в Таблице 1 стоит одна дата, а поле сумма - заблокировано, оно должно обновляться запросами автоматически. Вот при добавлении записей в Таблицу 2, а так же при их изменении - запросы работают и обновляют поле итоговой суммы в выбранной записи таблицы 1. А при удалении - хоть убейся, куда я только не пытался прилепить выполнение запросов... Запросов там три штуки, поскольку натолкнулся на "В выражении должен использоваться обновляемый запрос", а у меня там фигурирует запрос группировки, который не есть обновляемый, пришлось задействовать временную таблицу тмп, в которую сначала заносятся сгруппированные данные. но не суть, факт что запросы работают при добавлении и изменении полей, а при удалении - нивкакую, на какое бы событие я не лепил их выполнение... Помогите, пожалуйста, я уже не знаю, в какую сторону еще думать... Заранее большое спасибо)
0
Вложения
Тип файла: rar Пример.rar (26.8 Кб, 6 просмотров)
29.12.2014, 21:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2014, 21:47
Привет! Вот еще темы с ответами:

Код на заполнение Word срабатывает только один раз. Почему? - MS Access
Код на заполнение Word срабатывает только один первый раз. Потом нужно выйти-зайти в базу чтобы снова он сработал. Иначе возникает ошибка...

Применение кнопки удаления записи в подчинённых формах - MS Access
Имеется главная форма с подчинёнными формами. Необходимо добавить кнопку удалить запись, после нажатия которой должно появится сообщение о...

Событие при создании новой записи - MS Access
Как называется событие, которое вызывается при создании новой записи?

Можно ли как-нибудь узнать (обработать) момент ПОСЛЕ удаления записи? - MS Access
После удаления записи надо пересчитать другую форму. Но событие Form_Delete происходит перед удалением... По тупому можно конечно добавить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru