![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 26.12.2009
Сообщений: 95
|
![]()
Привет всем! пишу программу, в которой следующая иерархия -
клиент > карточка клиента>авто>карточка авто и еще 4-5 вложений . Вопрос как все это лучше связать, что бы все вложенности относились только конкретному клиенту. Создать у клиента id, а все остальные вложенности должны просто копировать себе его id? пишу на delphi+mysql |
![]() |
![]() |
![]() |
#2 |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,844
|
![]()
В данном случае -- никак, поскольку эта вложенность искусственная, поскольку сами данные разнородны и не являются деревом. Нужно создать обычную реляционную БД по учебникам, а вложенность, если так уж хочется, рисовать чисто в интерфейсе.
В разработке: воспроизводственный контур ИТ
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 26.12.2009
Сообщений: 95
|
![]()
базу создавать умею, программы подобные писал максимум с 3 уровнями, т.е во всех трех таблицах были id , а потом запросом выводил в грид, все получалось, я думаю, может есть какой более удобный способ?
иметтся ввиду что у меня есть dbgrid, двойной клик по записи > еще грид, в котором данные только по этой записи, и так далее |
![]() |
![]() |
![]() |
#4 |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,844
|
![]()
Это классическая задача из учебника. Ведь пишется что-то вроде БД автосервиса?
Главное окно программы -- список клиентов (грид), при клике на клиента открывается его карточка -- диалог, где вписаны его ФИО и другие данные, плюс грид с принадлежащими ему машинами (можно на вкладке). При клике на машине, в свою очередь, открывается карточка машины, где вписаны все данные и может быть грид с описанием ремонтов (тоже на вкладке). Деревом тут и не пахнет.
В разработке: воспроизводственный контур ИТ
|
![]() |
![]() |
![]() |
#5 | ||
Участник клуба
Регистрация: 19.12.2007
Сообщений: 1,100
|
![]() Цитата:
Можно и деревом, а можно и в виде обычных внешних связей - цепляясь по id предыдущего уровня. Цитата:
id "клиента" будет основным ключем только для "авто", а id "авто" будет основным ключем для "следующего вложения" и т.д. конечно, можно id "клиента" писать во все вложения, но это уже будет избыточно, хоть и будет дополнительным вторичным ключем
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ... ![]() Последний раз редактировалось Yurk@; 04.07.2013 в 10:53. |
||
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
Здесь похоже везде отношение один-к-одному. Разве что у клиента несколько машин. Тогда и нет ни какой необходимости данные распылять по нескольким таблицам. Если один-к-многим тогда как Yurk@ предложил
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 26.12.2009
Сообщений: 95
|
![]()
разумеется, у клиента несколько машин, а у каждой машины несколько таблиц, с этим теперь понятно, спасибо))
Сразу хочу еще вопрос задать - как в 1 dbgrid выводить несколько запросов, если его можно только к 1 query привязать? для чего нужно - при открытии формы в db grid запрос выводит все записи, при нажатии на кнопку сортировать например - только грузовые, чтобы сработал уже другой запрос и в этот же грид вывел эти записи. или придется делать столько гридов друг на друге, сколько и запросов, при этом при нажатии на кнопки "только грузовые","только легковые" - скрывать ненужные гриды? |
![]() |
![]() |
![]() |
#8 | |
Участник клуба
Регистрация: 19.12.2007
Сообщений: 1,100
|
![]() Цитата:
пример: Код:
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ... ![]() Последний раз редактировалось Yurk@; 04.07.2013 в 12:11. |
|
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 26.12.2009
Сообщений: 95
|
![]()
но не совсем понял, запросы то у меня разные,то есть изначально
select * from avto - в grid весь список если нажимаю кнопку только грузовые, то select * from avto where tip=gruzovie - и результат выводится в этот же грид. то есть непонятно что надо прописать на кнопку чтобы в грид выполнялся другой запрос? а если писать в 1 запросе то вообще не понятно как кнопка поймет какой ей sql.add выполнить, а какой пропустить |
![]() |
![]() |
![]() |
#10 |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,844
|
![]()
Кнопка не поймет, она думать не умеет. Понять должен программист.
![]() Если предложение where является последним в запросе, достаточно будет присваивать SQL.Strings[SQL.Strings.Count - 1] нужное значение. Если же запрос простой, достаточно воспользоваться параметрами и менять только значение параметра, оставляя текст запроса неизменным. В учебниках именно этому и учат. Возвращаясь же к интерфейсу, хочу заметить, что вложенные диалоги в интерфейсе удобны для ведения общего реестра, а для приемки машины в ремонт в главном окне наверняка потребуется отдельная вкладка, где в гриде будут выводиться текущие ремонты -- машины, стоящие на ремонте или уже отремонтированные, но ожидающие своих хозяев. Диалоги для приема в ремонт и выдачи должны быть выполнены отдельно от диалогов реестра, иначе вашей программой никто пользоваться не будет. Возможно, что постановку на ремонт и выдачу можно объединить в одном диалоге, -- тут уже на месте смотреть надо.
В разработке: воспроизводственный контур ИТ
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как правильно организовать хранение | tarakan1983 | SQL, базы данных | 1 | 08.06.2012 19:46 |
Как правильно организовать сохранение в файл delphi | JK0 | Помощь студентам | 1 | 21.12.2010 21:14 |
Как правильно организовать непростой шаблон двоичного дерева? | nowaalex | Общие вопросы C/C++ | 10 | 02.12.2010 02:47 |
как правильно организовать продажу своего софта? | broderweb | Свободное общение | 11 | 02.12.2009 17:41 |
ADO + SQL Server. Как правильно организовать одновременную работу с таблицей | Mouse123 | БД в Delphi | 17 | 04.07.2008 17:35 |