Запрос для отображения списка доступных товаров без отобранных

Нам нужно, чтобы в списке товаров отображались только те товары, которых нет во временной таблице ОТБОР. Для этого при связывании таблиц ТОВАРЫ И ОТБОР нужно сначала, создать такой вид связи, который бы показал все товары из таблицы ТОВАРЫ и в соответствующих строках отобразил факт отбора. Это делается с помощью изменения связи. Тогда в запросе появятся пустые поля там, где товар не выбран. Останется только отфильтровать этот запрос, оставив записи с пустыми полями.

Запрос без фильтра

SpNoSelect
КодТовара Название Цена НОМЕР
Телевизор  
Холодильник
кофемолка  
телефон Самсунг  
Алкател телефон

В графе НОМЕР есть пустые поля и поля с номером (который совпадает с кодом товара) – это отобранные товары.

Запрос с фильтром

SpNoSelect
КодТовара Название Цена
Телевизор
кофемолка
телефон Самсунг

 

Остались только те товары, которые не выбраны в список

Делается это так:

 

Создание ЗАПРОСа.

При создании запроса выберем таблицы ТОВАРЫ и ОТБОР. Свяжем таблицы между собой и изменим тип связи (правой кнопкой по связи и изменить) как показано на рисунке. Выберем поля из таблицы ТОВАРЫ, а из таблицы ОТБОР выберем поле НОМЕР, снимем галочку, чтобы не выводить и поставим условие отбора - ПУСТО (NULL). Сохраняем запрос под именем SpNoSelect.

 

Закрываем запрос и возвращаемся в форму. В свойстве списка S1 меняем имя источника строк (Вместо ТОВАРЫ выбираем SpNoSelect). Погодите радоваться, это еще не все. Список S1 после нажатия кнопки. Идем в процедуру и добавляем еще одну строчку Me.S1.Requery.

Маленький итог.

Что мы сделали для переноса записей из левого списка в правый.

  • Подготовили запрос на вставку (добавление)
  • Создали запрос для первого списка и изменили источник строк
  • Поставили кнопку.
  • В процедуре на нажатие кнопки выполнили следующие команды
Отключили вывод сообщений Выполнили запрос на добавление Обновили оба списка на форме Включили список сообщений

Возврат товара в список доступных

 

Ягодка три. Вернуть отобранный товар в список доступных товаров.

Что для этого нужно сделать физически. А просто удалить его из таблицы ОТБОР и обновить оба списка. Вот и понадобился второй управляющий запрос на УДАЛЕНИЕ.

Запрос на удаление отобранных записей

Цель запроса и есть его содержание, а именно:

УДАЛИТЬ из таблицы ОТБОР записи у которых НОМЕР=выбранному из списка S2 .

Такой простой запрос можно написать и руками

DELETE * FROM ОТБОР WHERE НОМЕР=Forms!DelForm!S2

Или сделать в конструкторе

 

Сохраним запрос под именем FromSelect.