Кнопку с обратной стрелкой поставим без помощи мастера. Мы теперь умные, сами напишем процедуру. Итак: поставили кнопку, поменяли имя у кнопки (FromSelect). Рисунок на кнопке меняется вот так
Открыли процедуру обработки события нажатия кнопки и написали следующие строчки.
Отключили вывод сообщений
Выполнили запрос на удаление
Обновили оба списка на форме
Включили список сообщений
Получилось?
Private Sub FromSelect_Click()
DoCmd.SetWarnings False
DoCmd.OpenQuery "FromSelect"
DoCmd.SetWarnings False
Me.S1.Requery
Me.S2.Requery
End Sub.
Удаление отобранных товаров
Ягодка четыре.
Теперь, когда мы наигрались со списками, гоняя товары туда-сюда, можно попробовать выполнить главную задачу, ту из-за которой весь сыр-бор разгорелся. Удалить из таблицы ТОВАРЫ, то что попало в ОТБОР. Вот и пришла пора напрягать мозги.
Сначала сформулируем цель на родном языке.
Запрос на удаление с подчиненным запросом в условии отбора
УДАЛИТЬ все поля ИЗ таблицы ТОВАРЫ
Если в записи
КОДТОВАРА совпадает с каким-нибудь из НОМЕРов из таблицы ОТБОР.
Явно присутствует подчиненный запрос в условии отбора. Попробуем уточнить формулировку.
УДАЛИТЬ все поля ИЗ таблицы ТОВАРЫ
Где
КОДТОВАРА содержится (выбрать НОМЕР ИЗ таблицы ОТБОР).
И на SQL DELETE * FROM Товары where КодТовара in (select номер from отбор)
Сохраним запрос с именем DelT.
Кнопка для удаления отобранных товаров
Поставим на форму еще одну кнопку. С еще одной процедурой – близнецом.
Private Sub DelTov_Click()
DoCmd.SetWarnings False
DoCmd.OpenQuery "DelT"
DoCmd.SetWarnings False
Me.S1.Requery
Me.S2.Requery
End Sub
Очистка списка отобранных товаров
Думаете, что это все? Нет. Список отобранных товаров почистить забыли. Список –то пустой а в таблице ОТБОР остались номера. Сделаем простенький запрос на удаление всего из таблицы ОТБОР. Delete * From Отбор и сохраним его (имя ClearOtbo r).
Private Sub DelTov_Click()
DoCmd.SetWarnings False
DoCmd.OpenQuery "DelT"
DoCmd.OpenQuery "ClearOtbor"
DoCmd.SetWarnings False
Me.S1.Requery
Me.S2.Requery
End Sub
.
Форма
Закрытие формы
И еще одно. Если в таком состоянии закрыть форму, то список отобранных товаров останется. Для очистки списка запустим запрос на очистку ClearOtbor в процедуре на событие ЗАКРЫТИЕ ФОРМЫ. Для этого в свойствах формы найдем событие ЗАКРЫТИЕ
и откроем процедуру. Напишем в ней 3 строчки
Private Sub Form_Close()
DoCmd.SetWarnings False
DoCmd.OpenQuery " ClearOtbor "
DoCmd.SetWarnings False
End Sub