|
#1
|
||||
|
||||
Связанные таблицы
Я запутался.
Есть некие товары. Я хочу логических их разделить по группам, для упрощения жизни пользователям: выбрал из списка группу и товары,принадлежащие этим группам автоматом попали в grid для редактирования. Казалось бы заведи поле в товарах и суй туда признак принадлежности к группе, но проблема в том, что каждый товар может находится в разных группах. И я чё-то совсем не могу понять как связать эти две таблицы, чтоб заработало логика, как я хочу. items (товары) ID (int) PK AI Info (varchar 256) Article (varchar 32) groups (группы) ID (int) PK AI Info (varchar 256) Помогите пожалуйста решить задачку. |
#2
|
||||
|
||||
Связь "много-много" делается через промежуточную таблицу.
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
Этот пользователь сказал Спасибо Aristarh Dark за это полезное сообщение: | ||
Uniq! (26.08.2014)
|
#3
|
||||
|
||||
Совсем забыл про этот тип связей. Просто никогда подробно не останавливался на этом. Огромное спасибо.
Дальнейший затык связан с тем, что необходимо реализовать Master-Detail визуализацию уже на форме. В TTable всегда для этого пользовался свойством MasterSource. В моём случае TTable не подходит, т.к. используется Join запрос: Код:
SELECT * FROM `itemstypes` JOIN `items` ON `itemstypes`.`ID` = `items`.`ID` В конечном итоге в DBGrid хотелось бы видеть только те записи из результата запроса, которые соответствовали бы выбранной в DBlookUpComboBox записи itemstypes (связывающая таблица два (items и groups) набора данных) |
#4
|
||||
|
||||
Код:
... where itemstypes.id = ... Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#5
|
||||
|
||||
я думал через masterdetails это делать.
А вы предлагает этот запрос повесить на какое-то событие вроде OnChange? |
#6
|
||||
|
||||
Что-то вроде того.
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#7
|
|||
|
|||
Создаете cross таблицу, назовем ее например "items_to_item_grp".
В ней у вас будет два поля: 1) items_id, которое ссылается на items.id 2) item_grp_id, которе ссылается на item_grp.id На эти поля нужно накинуть ограничения ссылочной целосности, для порядку. Кроме того, записи должны быть уникальны (не должны повторятся). В Дельфи, для удобства нужно добавить возможность связывать записи items с различными записями item_grp. Теперь, для того, чтобы выбрать товары (items), которые относятся к некоторой группе (:item_grp_id) нужен запрос следующего характера: Код:
select * from items join items_to_item_grp on items_to_item_grp.items_id = items.id where items_to_item_grp.item_grp_id = :item_grp_id; Как видим запрос параметризирован. Подстановку параметра можно делать например DBlookUpComboBox.OnChange, как вы и предполагали. |
Этот пользователь сказал Спасибо за это полезное сообщение: | ||
Uniq! (04.09.2014)
|