Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
77 / 21 / 3
Регистрация: 19.05.2013
Сообщений: 221

Запрос на проверку

10.07.2013, 15:55. Показов 1647. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть table1 c данными:
table1 (До внесения данных)
id idТовар idАптека Логический
1 456 15 true
2 566 85 true
3 798 12 true

table1 (После внесения данных)
id idТовар idАптека Логический
1 456 15 false
2 566 85 true
3 798 12 true
4 456 17 true

table1 (После запроса на обновление)
id idТовар idАптека Логический
1 456 65 false
2 566 85 true
3 798 12 true
4 456 17 true

В общем мне нужно сделать Архив ушедших препаратов. Все препараты ушедшие имеют статус False/НЕТ. Архив у меня под idАптеки = 65.
Так вот, если в какой то Аптеки имеется False, я запросом на обновление меняю idАптеки на 65 в table1, что соответствует Архиву.
Вообще мне нужно в дальнейшем сделать так:
Исходя из того нужно
Условие1. Делаем проверку в таблице table1 и если значения idАптеки = 65 и соответствующий ему idТовара совпадают с другими idАптеки где idТовара такой же, то удаляем значение с False.
Условие2. Если же нету совпадений, то оставляем как есть

подскажите как такое реализовать в коде...
или может посоветуете способ проще (ну вроде я все учел, хотя могу ошибаться)

Добавлено через 1 час 45 минут
В общем приходят препараты в базу (сравнивается по idТовара). Иногда препараты уходит из базы (т.е. становятся False).
Если препарата "Аспирин" нету со значением True он должен быть со значением False.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.07.2013, 15:55
Ответы с готовыми решениями:

Запрос на проверку данных на повторы
Здравствуйте.Подскажите как сделать запрос. Есть таблица (марка,модель, год) На ее основе сделана форма на добавление новой записи.После...

Запрос на проверку
Имеется запрос который по условию (нас. пункт) выводит всех сотрудников (ID сотрудника) и их нагрузку количество записей и нагрузка в...

Запрос на проверку данных
Народ еще раз приветствую всех!!!! Вот такой вопрос кто сможет помочь, состоит он в следующем: НА форме два поля и кнопка(логин, пароль),...

12
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
10.07.2013, 16:11
carry-y, у вас очень непрозрачное ведение аптечного склада. Нет прихода, нет расхода, нет дат операций. Будь приход и расход, можно было бы простыми селектами всегда определить состояние склада на любой момент времени. По нынешней таблице вы этого сделать не сможете. Более того, поскольку не контролируются приход и расход, возможность случайной ошибки резко возрастает - в БД нет самих цифр прихода/расхода и не будет понятно откуда идет ошибка.
Рекомендую отказаться от нынешней структуры данных и перейти на стандартный склад. По меньшей мере с фиксацией прихода и расхода по типу товара и датой операции.
1
77 / 21 / 3
Регистрация: 19.05.2013
Сообщений: 221
10.07.2013, 16:27  [ТС]
спасибо
но у меня не совсем склад, это просто информация по Аптекам
и нужно знать когда препарат был последний раз в Аптеке, если ему присвоено значение False и больше ничего не нужно, только это. А архиве всего 2500 наименований и в неделю отсилы пополняется на 5-10 значений
сейчас это работает, но очень медленно, я хочу немного другой принцип сделать и увеличить скорость работы:
куча запросов, временная таблица, потом проверки с подзапросами In которые ссылаются на запросы от этого мне нужно избавиться.
я примерно знаю как сделать, но в sql я пока не так силен и не могу додумать как написать правильно код)
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
10.07.2013, 17:54
Понял.

carry-y, расскажите об особенностях БД. В каком виде приходят данные? Препараты, видимо приходят названиями и типом упаковки? Аптеки названиями? И вы в форме, основанной на table1, выбираете препарат и аптеку? Зачем же тогда всякие временные таблицы? Разве недостаточно сделать в table1 ключом комбинацию полей idТовар, idАптека? Это будет гарантией, что комбинация не повторится.

Я понимаю, что выбирать из нескольких тысяч названий нужное нелегко. И каждый день по многу раз. Но все равно непонятно зачем это делать запросами, а не в форме? Особенно если и препараты, и аптеки приходят названиями, а не готовыми кодами.
Мне кажется, что сделав форму на table1 с хорошим поиском по товару и аптеке, вы лишитесь многих неудобств. И не нужно будет никаких временных таблиц и многих запросов.
0
77 / 21 / 3
Регистрация: 19.05.2013
Сообщений: 221
10.07.2013, 22:10  [ТС]
существует много Аптек, для каждой аптеки свой idАптеки от 1 до 80, а вот idАптеки = 65 это Архив (там хранятся препараты которых уже нету в Аптеках)
в таблице А_Объявления хранятся товары из аптек, вернее idТовара, idАптеки, Цена, Действующее(тут False либо True -соответственно True это препараты которые есть в аптеках, а False те которых нету уже в аптеках)
форма у меня есть, где можно отобрать наименования по любым условиям (дозировка,страна, название и т.д.)
процесс заброски следующий (опишу только самое главное): забрасываем прайсы аптек к примеру для idАптеки=14, соответственно для этой Аптеки запросом на обновление меняется значение True на False, затем если такой препарат был уже раньше и пришел опять ему ставиться True, и если еще какой-то новый пришел ему также ставится True в итоге тех препаратов, которых уже нету остаются висеть со значением False.
Все просто вроде)
Самое главное тут idАптеки=65 сам Архив - там содержатся все препараты со статусом False и я на своей форме могу просмотреть препараты которые сейчас есть в аптеках и которых уже давно нету)
Как я обрабатываю Архив (idАптеки=65): запросом на обновление те препараты где Действующие=false, для них я меняю idАптеки на 65, что вполне логично, тем самым у меня все препараты, которых нету в Аптеках есть в idАптеки=65. Ну а дальше я проделываю манипуляции чтобы "отделить мух от котлет". В итоге мне нужно решить проблему описанную в топике)
Миниатюры
Запрос на проверку  
0
77 / 21 / 3
Регистрация: 19.05.2013
Сообщений: 221
10.07.2013, 22:16  [ТС]
запрос, который мне нужен для меня сложноват пока, вот ищу помощи)
1. во первых допустим во всех Аптеках есть Аспирин, значит в Архиве (idАптеки=65) он нам абсолютно не нужен, так как такой idТовара есть во всех Аптеках
2. А вот если Аспирин исчезнет из всех аптек, вот только тогда мы его должны определить в Архив
3. К примеру Аспирин опять появляется в Аптеках, значит мы его должны удалить из Архива
вот мне такой запрос и нужен... день мучаюсь не могу осилить)
буду очень рад любой помощи
спасибо
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
10.07.2013, 22:34
А зачем, вообще нужен этот архив с ид=65 ? Я как-то не просматриваю его необходимости. Пусть бы себе хранились отсутствующие в своих аптеках. Есть же полный список препаратов в таблице А_Товары, зачем делать к нему усеченный аналог? Я просто не вижу, задач для которых бы понадобился архив с ид=65.
Для отчета по имеющимся препаратам достаточно выбрать из всех аптек только те у которых наличие=True. И бог с ним с архивом. Не нужен он. Ваще.
0
77 / 21 / 3
Регистрация: 19.05.2013
Сообщений: 221
10.07.2013, 23:19  [ТС]
просто тогда будет у каждой Аптеки по Аспирину к примеру в Архиве, мне не важно в какой Аптеки его нету, мне важен сам факт что его нету нигде...
соответственно для каждой idАптеки будет висеть лишние препараты с False
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
10.07.2013, 23:40
carry-y, эти 200-300 тысяч записей в table1 чепуха. Пусть себе висят в каждой аптеке. Если сделать комбинацию поле идТовар, идАптека, Наличие индексной (не ключом, а именно индексом. Ключом должна быть комбинация идТовар, идАптека), то запрос будет отрабатывать мгновенно
SQL
1
SELECT COUNT(*) FROM table1 WHERE Наличие
Как пример, у меня на таблице с миллионом записей подобный запрос отрабатывает меньше секунды на далеко не самой быстрой машине
1
77 / 21 / 3
Регистрация: 19.05.2013
Сообщений: 221
11.07.2013, 11:33  [ТС]
все же как написать запрос, который сравнивает значения где idАптеки=65 c другими значениями idАптеки по idТовара, и если idТовара совпадает - удаляется значение где idАптеки=65
0
 Аватар для Волшебник 307
1396 / 331 / 45
Регистрация: 16.04.2013
Сообщений: 786
Записей в блоге: 2
11.07.2013, 12:52
carry-y,

idАптеки=65

Это какой-то резерв?
На случай отсутствия товара,
товар перемещается туда
где он отсутствует. Да?
0
77 / 21 / 3
Регистрация: 19.05.2013
Сообщений: 221
11.07.2013, 13:14  [ТС]
Цитата Сообщение от Волшебник 307 Посмотреть сообщение
carry-y,

idАптеки=65

Это какой-то резерв?
На случай отсутствия товара,
товар перемещается туда
где он отсутствует. Да?
да совершенно верно
товар которого нету помешается в Архив и там висит, как только этот товар появляется опять то он переходит из Архива в аптеки где он появился
0
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
12.07.2013, 07:36
Лучший ответ Сообщение было отмечено mobile как решение

Решение

Цитата Сообщение от carry-y Посмотреть сообщение
все же как написать запрос, который сравнивает значения где idАптеки=65 c другими значениями idАптеки по idТовара, и если idТовара совпадает - удаляется значение где idАптеки=65
Если под "удаляется значение" понимается удаление записи, то попробуйте так
SQL
1
2
3
4
DELETE t1.*
FROM table1 AS t1
WHERE t1.idАптека=65 AND EXISTS(SELECT 1 FROM table1 AS t2 
WHERE t2.idТовар=t1.idТовар AND (t2.idАптека<>65 OR (t2.idАптека=65  AND  t2.id>t1.id)))
Но думаю, что быстрее будет работать следующий код VBA
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
  Dim DB As DAO.Database, RS As DAO.Recordset, i&
  Set DB = CurrentDb
  Set RS = DB.OpenRecordset("SELECT * FROM table1 ORDER BY idТовар, idАптека<>65", dbOpenDynaset)
  i = 0
  Do Until RS.EOF
    If i <> RS!idТовар Then
      i = RS!idТовар
    ElseIf RS!idАптека = 65 Then
      RS.Delete
    End If
    RS.MoveNext
  Loop
  RS.Close: Set RS = Nothing: Set DB = Nothing
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.07.2013, 07:36
Помогаю со студенческими работами здесь

Запрос на проверку записи
Доброго времени суток, нужна ваша помощь. Делаю курсовой, столкнулся с проблемой. У меня есть Дбгрид к нему подключена таблица...

Запрос на проверку строк
Всем привет. Есть много строк. Нужно откинуть все строки у которых san_kod='Pakavimo t' and POREIKIS='0' и откинуть те у которых data,...

Запрос на проверку строк
Привет. Как пример, есть 2 строки.В них описывается одинаковый товар с 2 складов. Как сделать если в одном складе значение 0, то и во...

Запрос на проверку деня рождения
Помогите пожалуйста. Везде пишут что нужно вытаскивать день и месяц из NOW() но у меня ошибку пишет, такой функции нет. База через...

Запрос на проверку существования аккаунта facebook
Как проверить существует ли аккаунт facebook? $a=get_headers($fURL); echo $a; Для всех страниц https://www.facebook.com/******...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru