Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.08.2014, 11:41
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию Связанные таблицы

Я запутался.

Есть некие товары.
Я хочу логических их разделить по группам, для упрощения жизни пользователям: выбрал из списка группу и товары,принадлежащие этим группам автоматом попали в grid для редактирования.

Казалось бы заведи поле в товарах и суй туда признак принадлежности к группе, но проблема в том, что каждый товар может находится в разных группах. И я чё-то совсем не могу понять как связать эти две таблицы, чтоб заработало логика, как я хочу.

items (товары)
ID (int) PK AI
Info (varchar 256)
Article (varchar 32)

groups (группы)
ID (int) PK AI
Info (varchar 256)

Помогите пожалуйста решить задачку.
Ответить с цитированием
  #2  
Старый 26.08.2014, 12:22
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Связь "много-много" делается через промежуточную таблицу.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
Этот пользователь сказал Спасибо Aristarh Dark за это полезное сообщение:
Uniq! (26.08.2014)
  #3  
Старый 26.08.2014, 12:43
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Совсем забыл про этот тип связей. Просто никогда подробно не останавливался на этом. Огромное спасибо.

Дальнейший затык связан с тем, что необходимо реализовать Master-Detail визуализацию уже на форме.

В TTable всегда для этого пользовался свойством MasterSource. В моём случае TTable не подходит, т.к. используется Join запрос:

Код:
SELECT * FROM `itemstypes` JOIN `items` ON `itemstypes`.`ID` = `items`.`ID`

В конечном итоге в DBGrid хотелось бы видеть только те записи из результата запроса, которые соответствовали бы выбранной в DBlookUpComboBox записи itemstypes (связывающая таблица два (items и groups) набора данных)
Ответить с цитированием
  #4  
Старый 26.08.2014, 15:41
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Код:
... where itemstypes.id = ...
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #5  
Старый 26.08.2014, 15:48
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

я думал через masterdetails это делать.
А вы предлагает этот запрос повесить на какое-то событие вроде OnChange?
Ответить с цитированием
  #6  
Старый 26.08.2014, 16:24
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Что-то вроде того.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #7  
Старый 04.09.2014, 15:55
kaakaa
 
Сообщения: n/a
По умолчанию

Создаете 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)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:57.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter