Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 21.02.2019, 20:02   #1
artems67
Пользователь
 
Регистрация: 17.11.2015
Сообщений: 59
Печаль Не получается написать макрос для БД

Добрый день,

Есть база данных на MS Access 2007 под названием "Учет книг на кафедрах".

Внизу небольшое описание БД + Прикреплю саму БД и схему данных.

Предметная область – база данных по книгам кафедры. Необходимо вести учет, – какие книги, по какой теме и где находятся. Разработанная структура данных имеет 7 таблиц. Ключевыми из них являются таблицы: «Книги», «Экземпляры», «Размещение книг по аудиториям».
В таблице «Книги» хранятся данные о книгах, а именно – это название книги, жанр, год издания. Уникальным ключом выступает ISBN. В таблице «Экземпляры» каждой книге присваивается свой уникальный инвентарный номер, а так же в примечаниях указывается характерные черты книжного экземпляра, которому присваивается инвентарный номер, например, это может быть указание о каких-то характерных дефектах книги.
Далее книги, с присвоенным инвентарным номером, распределяют по аудиториям кафедр с указанием даты поступления. Эта информация хранится в таблице «Размещение книг по аудиториям». Номер аудитории берется из таблицы «Помещения», где указано название аудитории, номер кафедры, к которой эта аудитория приписана, а также указывается ФИО ответственного за аудиторию и его номер телефона.
Информация по кафедрам хранится также в отдельной таблице под названием «Кафедры», где указывается уникальный номер кафедры, её название, а также ФИО и номер телефона заведующего кафедрой.
Две оставшиеся таблицы «Авторы» и «Авторы книг» хранят информацию об авторах, так как книги могут быть написаны совместно несколькими авторами, фамилии которых могут повторяться.


Собственно задача состоит в следующем, в БД есть простая форма "1 экземпляр в помещении". Форма связана с таблицей "Размещение книг по аудиториям".

Так вот нужно написать для неё макрос, чтобы соблюдалось проверка условия -> "В любом помещении КАЖДАЯ КНИГА должна быть в 1-м экземпляре."

То есть, например, в этой форме человек пытается добавить новую запись с уникальным инвентарным номером в помещение, где уже есть экземпляр так же с уникальным инвентарным номером и оба экземпляра это одна и та же книга с уникальным ISBN (ключ).

Соответственно в этом случае должно появляться сообщение, оповещающая о том что 1 экземпляр такой книги уже есть в этом помещении. А запись не должна добавляться в таблицу.

Ну, а иначе всё ок.

Вот прошу помощи. Так как человеку уже надо завтра показать результат. А я в БД не силён шибко.

Пытался что-то придумать с командой DCount, но не выходит.

Надеюсь кто-то откликнется и поможет. Хотя бы команды какие подсказать или на ход мыслей верный направить.
Изображения
Тип файла: png Связи.png (44.1 Кб, 59 просмотров)
Вложения
Тип файла: zip Учет книг на кафедрах.zip (172.9 Кб, 10 просмотров)
artems67 вне форума Ответить с цитированием
Старый 22.02.2019, 09:37   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,061
По умолчанию

1. строим ЗАПРОС (View)
1.1. начинаем(from ) с размещения книг
1.2. узнаем (присоединяем(inner join ) какие ЭКЗЕМПЛЯРЫ там есть
1.3. узнаем экземпляры каких КНИГИ
1.4. узнаем в каких ПОМЕЩЕНИЯ
1.5. РЕШАЕМ (выбираем(where ) нужное нам помещение и книгу
1.6. СЧИТАЕМ(count) сколько их там

должно получиться что-то типа этого
Код:
select count(*) --1.6
from размещение  --1.1
inner join экземпляр on ...  --1.2
inner join книги on ...  --1.3
inner join помещения on ...  --1.4

where isbn =.... --нужная книга --1.5
  and назвауд = ... --нужная аудитория
ну еще нужны скобки по правилам Access
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не получается написать программу. Sandra_Miomi Visual C++ 2 23.03.2012 22:08
Не получается написать код hello19 Visual C++ 1 04.08.2011 12:52
не получается написать прогу serga71 Паскаль, Turbo Pascal, PascalABC.NET 0 17.03.2011 05:44
Не получается использовать макрос GetStr(Assembler) depocomp Помощь студентам 8 16.05.2009 14:12
Хочу написать макрос, не получается. Прошу помощи kzld Microsoft Office Excel 8 14.04.2009 08:51


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Здесь нужно купить рекламу за 7 тыс руб в месяц! )
пишите сюда - alarforum@yandex.ru
ИКС 840