2015-04-22 3 views
-1

У меня есть таблица Customer, таблица Order, таблица Orderline и таблица Product. Все они имеют Autonumber поля в качестве первичного ключа, и Orderline имеет внешний ключ ссылку на Order ID на Order таблицы:MS Access Создание нового заказа и порядка заказа

ORDER 
----- 
Order ID - Autonumber 
Customer ID - Number 
... 

ORDERLINE 
--------- 
OrderLine ID - Autonumber 
Order ID - FK to Order 
Product ID - FK to Product 
Quantity 

PRODUCT 
------- 
Product ID - Autonumber 
Product details... 

У меня есть форма, где я могу выбрать клиент, а затем список записей из Orderline таблицы, и запрос, который я ссылаться из данного подпункта форме, которая перечисляет Order ID, Orderline ID, Product ID, Product details ...

у меня есть 2 проблемы.

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

  2. Когда я ввести Product ID, что я хочу, чтобы добавить новый заказ, я ожидал новый Order ID появляться (Autoincremented) И новый Идентификатор строки ID` , (Autoincremented) and the details of the product that I have selected, corresponding to the продукта я вошел, но вместо этого я получаю это сообщение об ошибке:

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

Дело в том, что таблицы должны создать мне уникальные ключи, когда я пытаюсь создать новая запись, и когда я вхожу в каждую таблицу напрямую и вхожу в новую запись, автонабор работает и создает уникальный ключ - это просто когда он пытается создать как Order ID, так и Orderline ID одновременно с тем, что он похоже, терпит неудачу.

Должен сказать, что я провел несколько дней на этом, обыскал множество поисковых систем, просмотрел целую серию видеороликов YouTube по созданию форм заказов, но безрезультатно. Любой, кто понимает Access, я уверен, что смогу мне помочь, так как я могу помочь кому-либо в аналогичных обстоятельствах в считанные минуты, если это проблема в SQL.

+0

# 1 звучит как проблема с вашим запросом. # 2 - Идентификатор автоинкремента работает только тогда, когда вы добавляете запись в таблицу, которой принадлежит идентификатор. Вы не можете добавлять записи в таблицу ордеров и вводить идентификатор продукта, который не существует, и надеемся, что он добавит запись ProductID в таблицу Product. –

+0

Какова ваша таблица заказа? можете ли вы раскрыть свой дизайн db? –

+0

Спасибо Invent - Animate, я посмотрю на мой запрос. Что касается №2 - я не добавляю продукт, просто заказ и заказ, в то же время, продукт уже существует –

ответ

0

При создании подформы вам необходимо указать связь между родительским и подформатом. те же отношения, которые вы создали для своих таблиц. Тогда только Access будет фильтровать записи для вас.

Что касается вашего вопроса. Вы должны создать новую запись [order] в таблице [order], в которую вы будете вводить/выбирая [customer_id, staff_id, информацию о заказе ect]

В одном заказе может быть несколько позиций, поэтому ваша таблица [order_items] (i предположим, это термин, который вы используете для этой таблицы) существует из

заказов с
  • Order_ID
  • product_id (ORDER_ID, pRODUCT_ID составной ключ)
  • количество
  • цена
  • и т.д ..

Теперь, когда вы хотите начать принимать заказ, вам нужно создать новую форму, привязанную к tbl_order. В frm_order у вас будет суб-элемент, привязанный к tbl_oder_items (в вашей строке заказа)

У frm_order и frm_oder_items должны быть отношения. обычно, когда вы перетаскиваете таблицу для создания подформы, ACCESS попросит установить связь. если вы создаете подчиненные вручную:

  • Выберите подчиненную
  • перейти к странице свойствам
  • выбрать мастер-ссылки поле: Order_ID
  • выберите поле потомственного: Order_ID

Теперь, когда вы открываете frm_order, он будет отображать все записи (другими словами, все товары, которые заказ имеет в своем списке) из таблицы tbl_order_items.

Ваша таблица tbl_order_item/orderline также ссылается на таблицу продуктов через поле product_id.

Вставьте комбобокс в frm_order_items и привяжите его к product_id. RowSource выпадающий список был бы

select product_id, product_name from tbl_product 

Это сообщение об ошибке будет происходить: «Изменения, запрашиваемые в таблице не были успешными, потому что они будут создавать повторяющиеся значения в индексе первичного ключа, или отношения. Измените данные в поле или в полях, содержащих повторяющиеся данные, удалите индекс или переопределите индекс, чтобы разрешить дублирование записей и повторите попытку.

при попытке добавить продукт дважды для того же заказа. вместо этого вы должны увеличить количество продукта.

Попробуйте это и сообщите нам, как все прошло.

+0

Спасибо krish для вашей помощи, я попробую сейчас –

+0

krish, у меня есть немного больше информации, когда я добавляю новую строку в мой запрос Orderline (который содержит Order, Orderline и Product), он не генерирует новые идентификаторы на заказ или Orderline, и ошибка, которую я получаю, заключается в том, что она пытается создать новую запись продукта с тем же идентификатором! Я не хочу этого, я хочу добавить существующий продукт в новый Заказ. Как я могу сказать, что не создавать новый продукт, а создать новый заказ с добавлением выбранного продукта? –

+0

Как бы то ни было, поскольку я новичок в этом, я не понимал, откуда вы взяли данные из запроса. Теперь я понимаю, что это так, и я вытаскиваю идентификатор продукта из таблицы Orderline, и он больше не пытается создать его как новый продукт. –

Смежные вопросы