Кнопка для возврата в список доступных товаров

Кнопку с обратной стрелкой поставим без помощи мастера. Мы теперь умные, сами напишем процедуру. Итак: поставили кнопку, поменяли имя у кнопки (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 Отбор и сохраним его (имя ClearOtbor).

 

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