Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Как связать 2 таблицы на PARADOX BDE


Автор: Diless 10.3.2006, 12:15
В общем в этом суть: есть в приложении 2 таблицы, хотелось бы связать.
В DataBase Desktop, когда пытаюсь связать отображается только левая колонка с полями, где правая?
Чего делать?

Автор: 307450614 10.3.2006, 12:58
DataBase Desktop хорошо связывает таблицы в том случае, когда связываемые поля имеют одинаковое название и являются индексными...

Автор: Diless 10.3.2006, 13:40
Надо связать по Значению Project_Number. В первой таблице он во всех строках разный, а во второй может в нескольких строках быть одинаковым. Мне кажется в этом проблема.
Добавлено @ 13:45
может быть такие таблицы надо решать как нибудь по-другому? чтобы не возникало конфликта при привязывании одному полю нескольких?
как это делается?

Автор: StranikS 11.3.2006, 09:55
Почитай литературу на тему "Создание БД формата 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 13.3.2006, 08:44
Цитата

У тебя во всех остальных таблицах нельзя использовать Project_Number для связи с главной таблицей, а надо создать новое поле например T_Pro_Num и вот ТОЛЬКО его использовать для связи с главной таблицей.

Я так сделала, но тогда при сохранении данных Project_Number второй таблицы затирает Project_Number первой, потому что в 1 таблице Ключевому полю ID=2 соответствует Project_Number = например 201, а во второй 200 (там две записи с Project_Number =200).
ЧЕГО ДЕЛАТЬ??????????
Неужели никто не сталкивался с такой проблеммой? Неужели мне теперь для каждого Project_Number делать отдельную таблицу? это ж повеситься можно!

Автор: StranikS 14.3.2006, 23:32
Я не хочу показаться заумным но твоя БД не соответствует трем формам нормализации. Коротко: в литературе для тех кто создает БД есть три правила (три нормальные формы БД) при соблюдении, которых такие вот проблемы не случаются. Это вот на будущее.

Теперь что делать:
Не понятно зачем у тебя дублируются просто так поля в таблица. Зачем Project_Number в первой и во второй таблице одновременно, понятно что теперь там каша и как я понял Project_Number второй таблицы может не соответ. Project_Number первой (это кстати ошибка второй нормальной формы или первой - вот уже не помню). Удали Project_Number из второй таблицы, его функцию выполняет T_Pro_Num. Значения Project_Number должны задаваться только в одной таблице в главной, а в дочерней они только отображаются в T_Pro_Num.

Автор: Diless 17.3.2006, 09:00
Спасибо. Действительно таблицы неправильно составила.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)