Нам нужно, чтобы в списке товаров отображались только те товары, которых нет во временной таблице ОТБОР. Для этого при связывании таблиц ТОВАРЫ И ОТБОР нужно сначала, создать такой вид связи, который бы показал все товары из таблицы ТОВАРЫ и в соответствующих строках отобразил факт отбора. Это делается с помощью изменения связи. Тогда в запросе появятся пустые поля там, где товар не выбран. Останется только отфильтровать этот запрос, оставив записи с пустыми полями.
Запрос без фильтра
SpNoSelect | |||
КодТовара | Название | Цена | НОМЕР |
Телевизор | |||
Холодильник | |||
кофемолка | |||
телефон Самсунг | |||
Алкател телефон |
В графе НОМЕР есть пустые поля и поля с номером (который совпадает с кодом товара) – это отобранные товары.
Запрос с фильтром
SpNoSelect | ||
КодТовара | Название | Цена |
Телевизор | ||
кофемолка | ||
телефон Самсунг |
Остались только те товары, которые не выбраны в список
Делается это так:
Создание ЗАПРОСа.
При создании запроса выберем таблицы ТОВАРЫ и ОТБОР. Свяжем таблицы между собой и изменим тип связи (правой кнопкой по связи и изменить) как показано на рисунке. Выберем поля из таблицы ТОВАРЫ, а из таблицы ОТБОР выберем поле НОМЕР, снимем галочку, чтобы не выводить и поставим условие отбора - ПУСТО (NULL). Сохраняем запрос под именем SpNoSelect.
Закрываем запрос и возвращаемся в форму. В свойстве списка S1 меняем имя источника строк (Вместо ТОВАРЫ выбираем SpNoSelect). Погодите радоваться, это еще не все. Список S1 после нажатия кнопки. Идем в процедуру и добавляем еще одну строчку Me.S1.Requery.
Маленький итог.
Что мы сделали для переноса записей из левого списка в правый.
- Подготовили запрос на вставку (добавление)
- Создали запрос для первого списка и изменили источник строк
- Поставили кнопку.
- В процедуре на нажатие кнопки выполнили следующие команды
Отключили вывод сообщений Выполнили запрос на добавление Обновили оба списка на форме Включили список сообщений |
Возврат товара в список доступных
Ягодка три. Вернуть отобранный товар в список доступных товаров.
Что для этого нужно сделать физически. А просто удалить его из таблицы ОТБОР и обновить оба списка. Вот и понадобился второй управляющий запрос на УДАЛЕНИЕ.
Запрос на удаление отобранных записей
Цель запроса и есть его содержание, а именно:
УДАЛИТЬ из таблицы ОТБОР записи у которых НОМЕР=выбранному из списка S2.
Такой простой запрос можно написать и руками
DELETE * FROM ОТБОР WHERE НОМЕР=Forms!DelForm!S2
Или сделать в конструкторе
Сохраним запрос под именем FromSelect.