![]() |
|
![]() ![]() ![]() |
|
Diless |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 6.3.2006 Репутация: нет Всего: нет |
В общем в этом суть: есть в приложении 2 таблицы, хотелось бы связать.
В DataBase Desktop, когда пытаюсь связать отображается только левая колонка с полями, где правая? Чего делать? |
|||
|
||||
307450614 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 21.2.2006 Репутация: нет Всего: нет |
DataBase Desktop хорошо связывает таблицы в том случае, когда связываемые поля имеют одинаковое название и являются индексными...
|
|||
|
||||
Diless |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 6.3.2006 Репутация: нет Всего: нет |
Надо связать по Значению Project_Number. В первой таблице он во всех строках разный, а во второй может в нескольких строках быть одинаковым. Мне кажется в этом проблема.
Добавлено @ 13:45 может быть такие таблицы надо решать как нибудь по-другому? чтобы не возникало конфликта при привязывании одному полю нескольких? как это делается? |
|||
|
||||
StranikS |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 1.2.2006 Репутация: нет Всего: 2 |
Почитай литературу на тему "Создание БД формата PARADOX", в любом толстом учебнике про Delphi есть таковой раздельчик.
Если коротко, то: 1. Все структуры БД классифицируются на следующие категории по взаимосвязи таблиц БД: - отношение "один ко многим": Таб№1 поле А |_________________ Табл№2 поле B |_________________ Табл№3 поле B |_________________ Табл№4 поле B ... - остальные "один к одному", "многие ко многим" и т.д. (посмотришь сам); 2. Для создание связи ("отношения") двух таблиц необходимо: - в главной таблице (таб№1) выбрать (создать) поле которую будет обеспечиать связь (поле А) и сделать его ключевым (*); - в дочерней таблице (табл№2) создать поле, задача которого связывание с первой таблицей и более ничего (поле В). Как правило его даже называют тем же именем что и поле А; - формат полей А и B должен быть однотипен, т.е. "Целые и целые", "автоинк и целые", "строковая и строковая" и ... - при задании связи в DataBase Desktop указываются эти поля (А и В); - в табл№2 поле В большей своей функцией является служебным и не показывается пользователю в DBGrid; - входе работе приложения при добавлении записи в табл№2 в поле В будут авт. заноситься значение поля А активной записии табл№1; - перед удалением записи в табл№1 нужно удалить соотв. ей все записи в табл№2. Добавлено @ 10:00 Забыл сделать вывод: У тебя во всех остальных таблицах нельзя использовать Project_Number для связи с главной таблицей, а надо создать новое поле например T_Pro_Num и вот ТОЛЬКО его использовать для связи с главной таблицей. |
|||
|
||||
Diless |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 6.3.2006 Репутация: нет Всего: нет |
Я так сделала, но тогда при сохранении данных Project_Number второй таблицы затирает Project_Number первой, потому что в 1 таблице Ключевому полю ID=2 соответствует Project_Number = например 201, а во второй 200 (там две записи с Project_Number =200). ЧЕГО ДЕЛАТЬ?????????? Неужели никто не сталкивался с такой проблеммой? Неужели мне теперь для каждого Project_Number делать отдельную таблицу? это ж повеситься можно! |
|||
|
||||
StranikS |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 1.2.2006 Репутация: нет Всего: 2 |
Я не хочу показаться заумным но твоя БД не соответствует трем формам нормализации. Коротко: в литературе для тех кто создает БД есть три правила (три нормальные формы БД) при соблюдении, которых такие вот проблемы не случаются. Это вот на будущее.
Теперь что делать: Не понятно зачем у тебя дублируются просто так поля в таблица. Зачем Project_Number в первой и во второй таблице одновременно, понятно что теперь там каша и как я понял Project_Number второй таблицы может не соответ. Project_Number первой (это кстати ошибка второй нормальной формы или первой - вот уже не помню). Удали Project_Number из второй таблицы, его функцию выполняет T_Pro_Num. Значения Project_Number должны задаваться только в одной таблице в главной, а в дочерней они только отображаются в T_Pro_Num. |
|||
|
||||
Diless |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 6.3.2006 Репутация: нет Всего: нет |
Спасибо. Действительно таблицы неправильно составила.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |